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