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