xref: /netbsd-src/external/gpl2/gmake/dist/tests/scripts/misc/general4 (revision 69606e3f5c9388e52aed8c120ad63c049ca45d8f)
1*69606e3fSchristos#                                                                    -*-perl-*-
2*69606e3fSchristos
3*69606e3fSchristos$description = "\
4*69606e3fSchristosThis tests random features of make's algorithms, often somewhat obscure,
5*69606e3fSchristoswhich have either broken at some point in the past or seem likely to
6*69606e3fSchristosbreak.";
7*69606e3fSchristos
8*69606e3fSchristosrun_make_test('
9*69606e3fSchristos# Make sure that subdirectories built as prerequisites are actually handled
10*69606e3fSchristos# properly.
11*69606e3fSchristos
12*69606e3fSchristosall: dir/subdir/file.a
13*69606e3fSchristos
14*69606e3fSchristosdir/subdir: ; @echo mkdir -p dir/subdir
15*69606e3fSchristos
16*69606e3fSchristosdir/subdir/file.b: dir/subdir ; @echo touch dir/subdir/file.b
17*69606e3fSchristos
18*69606e3fSchristosdir/subdir/%.a: dir/subdir/%.b ; @echo cp $< $@',
19*69606e3fSchristos              '', "mkdir -p dir/subdir\ntouch dir/subdir/file.b\ncp dir/subdir/file.b dir/subdir/file.a\n");
20*69606e3fSchristos
21*69606e3fSchristos# Test implicit rules
22*69606e3fSchristos
23*69606e3fSchristos&touch('foo.c');
24*69606e3fSchristosrun_make_test('foo: foo.o',
25*69606e3fSchristos              'CC="@echo cc" OUTPUT_OPTION=',
26*69606e3fSchristos              'cc -c foo.c
27*69606e3fSchristoscc foo.o -o foo');
28*69606e3fSchristosunlink('foo.c');
29*69606e3fSchristos
30*69606e3fSchristos
31*69606e3fSchristos# Test other implicit rule searching
32*69606e3fSchristos
33*69606e3fSchristos&touch('bar');
34*69606e3fSchristosrun_make_test('
35*69606e3fSchristostest.foo:
36*69606e3fSchristos%.foo : baz ; @echo done $<
37*69606e3fSchristos%.foo : bar ; @echo done $<
38*69606e3fSchristosfox: baz
39*69606e3fSchristos',
40*69606e3fSchristos              '',
41*69606e3fSchristos              'done bar');
42*69606e3fSchristosunlink('bar');
43*69606e3fSchristos
44*69606e3fSchristos
45*69606e3fSchristos# Test implicit rules with '$' in the name (see se_implicit)
46*69606e3fSchristos
47*69606e3fSchristosrun_make_test(q!
48*69606e3fSchristos%.foo : baz$$bar ; @echo 'done $<'
49*69606e3fSchristos%.foo : bar$$baz ; @echo 'done $<'
50*69606e3fSchristostest.foo:
51*69606e3fSchristosbaz$$bar bar$$baz: ; @echo '$@'
52*69606e3fSchristos!,
53*69606e3fSchristos              '',
54*69606e3fSchristos              "baz\$bar\ndone baz\$bar");
55*69606e3fSchristos
56*69606e3fSchristos
57*69606e3fSchristos# Test implicit rules with '$' in the name (see se_implicit)
58*69606e3fSchristos# Use the '$' in the pattern.
59*69606e3fSchristos
60*69606e3fSchristosrun_make_test(q!
61*69606e3fSchristos%.foo : %$$bar ; @echo 'done $<'
62*69606e3fSchristostest.foo:
63*69606e3fSchristostest$$bar: ; @echo '$@'
64*69606e3fSchristos!,
65*69606e3fSchristos              '',
66*69606e3fSchristos              "test\$bar\ndone test\$bar");
67*69606e3fSchristos
68*69606e3fSchristos# Make sure that subdirectories built as prerequisites are actually handled
69*69606e3fSchristos# properly... this time with '$'
70*69606e3fSchristos
71*69606e3fSchristosrun_make_test(q!
72*69606e3fSchristos
73*69606e3fSchristosall: dir/subdir/file.$$a
74*69606e3fSchristos
75*69606e3fSchristosdir/subdir: ; @echo mkdir -p '$@'
76*69606e3fSchristos
77*69606e3fSchristosdir/subdir/file.$$b: dir/subdir ; @echo touch '$@'
78*69606e3fSchristos
79*69606e3fSchristosdir/subdir/%.$$a: dir/subdir/%.$$b ; @echo 'cp $< $@'
80*69606e3fSchristos!,
81*69606e3fSchristos              '', "mkdir -p dir/subdir\ntouch dir/subdir/file.\$b\ncp dir/subdir/file.\$b dir/subdir/file.\$a\n");
82*69606e3fSchristos
83*69606e3fSchristos1;
84