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