|
Packit |
26a39e |
# -*-perl-*-
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
$description = "Test automatic variable setting.";
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
$details = "";
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
use Cwd;
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
$dir = cwd;
|
|
Packit |
26a39e |
$dir =~ s,.*/([^/]+)$,../$1,;
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
open(MAKEFILE, "> $makefile");
|
|
Packit |
26a39e |
print MAKEFILE "dir = $dir\n";
|
|
Packit |
26a39e |
print MAKEFILE <<'EOF';
|
|
Packit |
26a39e |
.SUFFIXES:
|
|
Packit |
26a39e |
.SUFFIXES: .x .y .z
|
|
Packit |
26a39e |
$(dir)/foo.x : baz.z $(dir)/bar.y baz.z
|
|
Packit |
26a39e |
@echo '$$@ = $@, $$(@D) = $(@D), $$(@F) = $(@F)'
|
|
Packit |
26a39e |
@echo '$$* = $*, $$(*D) = $(*D), $$(*F) = $(*F)'
|
|
Packit |
26a39e |
@echo '$$< = $<, $$(
|
|
Packit |
26a39e |
@echo '$$^ = $^, $$(^D) = $(^D), $$(^F) = $(^F)'
|
|
Packit |
26a39e |
@echo '$$+ = $+, $$(+D) = $(+D), $$(+F) = $(+F)'
|
|
Packit |
26a39e |
@echo '$$? = $?, $$(?D) = $(?D), $$(?F) = $(?F)'
|
|
Packit |
26a39e |
touch $@
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
$(dir)/bar.y baz.z : ; touch $@
|
|
Packit |
26a39e |
EOF
|
|
Packit |
26a39e |
close(MAKEFILE);
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
# TEST #0 -- simple test
|
|
Packit |
26a39e |
# -------
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
# Touch these into the past
|
|
Packit |
26a39e |
&utouch(-10, qw(foo.x baz.z));
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
&run_make_with_options($makefile, "", &get_logfile);
|
|
Packit |
26a39e |
$answer = "touch $dir/bar.y
|
|
Packit |
26a39e |
\$\@ = $dir/foo.x, \$(\@D) = $dir, \$(\@F) = foo.x
|
|
Packit |
26a39e |
\$* = $dir/foo, \$(*D) = $dir, \$(*F) = foo
|
|
Packit |
26a39e |
\$< = baz.z, \$(
|
|
Packit |
26a39e |
\$^ = baz.z $dir/bar.y, \$(^D) = . $dir, \$(^F) = baz.z bar.y
|
|
Packit |
26a39e |
\$+ = baz.z $dir/bar.y baz.z, \$(+D) = . $dir ., \$(+F) = baz.z bar.y baz.z
|
|
Packit |
26a39e |
\$? = $dir/bar.y, \$(?D) = $dir, \$(?F) = bar.y
|
|
Packit |
26a39e |
touch $dir/foo.x\n";
|
|
Packit |
26a39e |
&compare_output($answer, &get_logfile(1));
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
unlink(qw(foo.x bar.y baz.z));
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
# TEST #1 -- test the SysV emulation of $$@ etc.
|
|
Packit |
26a39e |
# -------
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
$makefile2 = &get_tmpfile;
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
open(MAKEFILE, "> $makefile2");
|
|
Packit |
26a39e |
print MAKEFILE "dir = $dir\n";
|
|
Packit |
26a39e |
print MAKEFILE <<'EOF';
|
|
Packit |
26a39e |
.SECONDEXPANSION:
|
|
Packit |
26a39e |
.SUFFIXES:
|
|
Packit |
26a39e |
.DEFAULT: ; @echo '$@'
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
$(dir)/foo $(dir)/bar: $@.x $$@.x $$$@.x $$$$@.x $$(@D).x $$(@F).x
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
$(dir)/x.z $(dir)/y.z: $(dir)/%.z : $@.% $$@.% $$$@.% $$$$@.% $$(@D).% $$(@F).%
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
$(dir)/biz: $$(@).x $${@}.x $${@D}.x $${@F}.x
|
|
Packit |
26a39e |
EOF
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
close(MAKEFILE);
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
&run_make_with_options($makefile2, "$dir/foo $dir/bar", &get_logfile);
|
|
Packit |
26a39e |
$answer = ".x\n$dir/foo.x\nx\n\$@.x\n$dir.x\nfoo.x\n$dir/bar.x\nbar.x\n";
|
|
Packit |
26a39e |
&compare_output($answer, &get_logfile(1));
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
&run_make_with_options($makefile2, "$dir/x.z $dir/y.z", &get_logfile);
|
|
Packit |
26a39e |
$answer = ".x\n$dir/x.z.x\nx\n\$@.x\n$dir.x\nx.z.x\n.y\n$dir/y.z.y\n\y\n\$@.y\n$dir.y\ny.z.y\n";
|
|
Packit |
26a39e |
&compare_output($answer, &get_logfile(1));
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
&run_make_with_options($makefile2, "$dir/biz", &get_logfile);
|
|
Packit |
26a39e |
$answer = "$dir/biz.x\n$dir.x\nbiz.x\n";
|
|
Packit |
26a39e |
&compare_output($answer, &get_logfile(1));
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
# TEST #2 -- test for Savannah bug #12320.
|
|
Packit |
26a39e |
#
|
|
Packit |
26a39e |
run_make_test('
|
|
Packit |
26a39e |
.SUFFIXES: .b .src
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
mbr.b: mbr.src
|
|
Packit |
26a39e |
@echo $*
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
mbr.src: ; @:',
|
|
Packit |
26a39e |
'',
|
|
Packit |
26a39e |
'mbr');
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
# TEST #3 -- test for Savannah bug #8154
|
|
Packit |
26a39e |
# Make sure that nonexistent prerequisites are listed in $?, since they are
|
|
Packit |
26a39e |
# considered reasons for the target to be rebuilt.
|
|
Packit |
26a39e |
#
|
|
Packit |
26a39e |
# See also Savannah bugs #16002 and #16051.
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
touch('foo');
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
run_make_test('
|
|
Packit |
26a39e |
foo: bar ; @echo "\$$? = $?"
|
|
Packit |
26a39e |
bar: ;',
|
|
Packit |
26a39e |
'',
|
|
Packit |
26a39e |
'$? = bar');
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
unlink('foo');
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
# TEST #4: ensure prereq ordering is correct when the commmand target has none
|
|
Packit |
26a39e |
# See Savannah bug #21198
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
run_make_test('
|
|
Packit |
26a39e |
all : A B
|
|
Packit |
26a39e |
all : ; @echo $@ -- $^ -- $<
|
|
Packit |
26a39e |
all : C D
|
|
Packit |
26a39e |
all : E F
|
|
Packit |
26a39e |
A B C D E F G H : ; @:
|
|
Packit |
26a39e |
',
|
|
Packit |
26a39e |
'', "all -- A B C D E F -- A\n");
|
|
Packit |
26a39e |
|
|
Packit |
26a39e |
1;
|