1# -*-perl-*- 2 3$description = "Test automatic variable setting."; 4 5$details = ""; 6 7use Cwd; 8 9$dir = cwd; 10$dir =~ s,.*/([^/]+)$,../$1,; 11 12open(MAKEFILE, "> $makefile"); 13print MAKEFILE "dir = $dir\n"; 14print MAKEFILE <<'EOF'; 15.SUFFIXES: 16.SUFFIXES: .x .y .z 17$(dir)/foo.x : baz.z $(dir)/bar.y baz.z 18 @echo '$$@ = $@, $$(@D) = $(@D), $$(@F) = $(@F)' 19 @echo '$$* = $*, $$(*D) = $(*D), $$(*F) = $(*F)' 20 @echo '$$< = $<, $$(<D) = $(<D), $$(<F) = $(<F)' 21 @echo '$$^ = $^, $$(^D) = $(^D), $$(^F) = $(^F)' 22 @echo '$$+ = $+, $$(+D) = $(+D), $$(+F) = $(+F)' 23 @echo '$$? = $?, $$(?D) = $(?D), $$(?F) = $(?F)' 24 touch $@ 25 26$(dir)/bar.y baz.z : ; touch $@ 27EOF 28close(MAKEFILE); 29 30# TEST #0 -- simple test 31# ------- 32 33# Touch these into the past 34&utouch(-10, qw(foo.x baz.z)); 35 36&run_make_with_options($makefile, "", &get_logfile); 37$answer = "touch $dir/bar.y 38\$\@ = $dir/foo.x, \$(\@D) = $dir, \$(\@F) = foo.x 39\$* = $dir/foo, \$(*D) = $dir, \$(*F) = foo 40\$< = baz.z, \$(<D) = ., \$(<F) = baz.z 41\$^ = baz.z $dir/bar.y, \$(^D) = . $dir, \$(^F) = baz.z bar.y 42\$+ = baz.z $dir/bar.y baz.z, \$(+D) = . $dir ., \$(+F) = baz.z bar.y baz.z 43\$? = $dir/bar.y, \$(?D) = $dir, \$(?F) = bar.y 44touch $dir/foo.x\n"; 45&compare_output($answer, &get_logfile(1)); 46 47unlink(qw(foo.x bar.y baz.z)); 48 49# TEST #1 -- test the SysV emulation of $$@ etc. 50# ------- 51 52$makefile2 = &get_tmpfile; 53 54open(MAKEFILE, "> $makefile2"); 55print MAKEFILE "dir = $dir\n"; 56print MAKEFILE <<'EOF'; 57.SECONDEXPANSION: 58.SUFFIXES: 59.DEFAULT: ; @echo '$@' 60 61$(dir)/foo $(dir)/bar: $@.x $$@.x $$$@.x $$$$@.x $$(@D).x $$(@F).x 62 63$(dir)/x.z $(dir)/y.z: $(dir)/%.z : $@.% $$@.% $$$@.% $$$$@.% $$(@D).% $$(@F).% 64 65$(dir)/biz: $$(@).x $${@}.x $${@D}.x $${@F}.x 66EOF 67 68close(MAKEFILE); 69 70&run_make_with_options($makefile2, "$dir/foo $dir/bar", &get_logfile); 71$answer = ".x\n$dir/foo.x\nx\n\$@.x\n$dir.x\nfoo.x\n$dir/bar.x\nbar.x\n"; 72&compare_output($answer, &get_logfile(1)); 73 74&run_make_with_options($makefile2, "$dir/x.z $dir/y.z", &get_logfile); 75$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"; 76&compare_output($answer, &get_logfile(1)); 77 78&run_make_with_options($makefile2, "$dir/biz", &get_logfile); 79$answer = "$dir/biz.x\n$dir.x\nbiz.x\n"; 80&compare_output($answer, &get_logfile(1)); 81 82# TEST #2 -- test for Savannah bug #12320. 83# 84run_make_test(' 85.SUFFIXES: .b .src 86 87mbr.b: mbr.src 88 @echo $* 89 90mbr.src: ; @:', 91 '', 92 'mbr'); 93 94# TEST #3 -- test for Savannah bug #8154 95# Make sure that nonexistent prerequisites are listed in $?, since they are 96# considered reasons for the target to be rebuilt. 97# 98# This was undone due to Savannah bug #16002. We'll re-do it in the next 99# release. See Savannah bug #16051. 100 101#touch('foo'); 102# 103#run_make_test(' 104#foo: bar ; @echo "\$$? = $?" 105#bar: ;', 106# '', 107# '$? = bar'); 108# 109#unlink('foo'); 110 1111; 112