| # -*-perl-*- | |
| $description = "\ | |
| This tests random features of make's algorithms, often somewhat obscure, | |
| which have either broken at some point in the past or seem likely to | |
| break."; | |
| run_make_test(' | |
| # Make sure that subdirectories built as prerequisites are actually handled | |
| # properly. | |
| all: dir/subdir/file.a | |
| dir/subdir: ; @echo mkdir -p dir/subdir | |
| dir/subdir/file.b: dir/subdir ; @echo touch dir/subdir/file.b | |
| dir/subdir/%.a: dir/subdir/%.b ; @echo cp $< $@', | |
| '', "mkdir -p dir/subdir\ntouch dir/subdir/file.b\ncp dir/subdir/file.b dir/subdir/file.a\n"); | |
| # Test implicit rules | |
| &touch('foo.c'); | |
| run_make_test('foo: foo.o', | |
| 'CC="@echo cc" OUTPUT_OPTION=', | |
| 'cc -c foo.c | |
| cc foo.o -o foo'); | |
| unlink('foo.c'); | |
| # Test implicit rules with '$' in the name (see se_implicit) | |
| run_make_test(q! | |
| %.foo : baz$$bar ; @echo 'done $<' | |
| %.foo : bar$$baz ; @echo 'done $<' | |
| test.foo: | |
| baz$$bar bar$$baz: ; @echo '$@' | |
| !, | |
| '', | |
| "baz\$bar\ndone baz\$bar"); | |
| # Test implicit rules with '$' in the name (see se_implicit) | |
| # Use the '$' in the pattern. | |
| run_make_test(q! | |
| %.foo : %$$bar ; @echo 'done $<' | |
| test.foo: | |
| test$$bar: ; @echo '$@' | |
| !, | |
| '', | |
| "test\$bar\ndone test\$bar"); | |
| # Make sure that subdirectories built as prerequisites are actually handled | |
| # properly... this time with '$' | |
| run_make_test(q! | |
| all: dir/subdir/file.$$a | |
| dir/subdir: ; @echo mkdir -p '$@' | |
| dir/subdir/file.$$b: dir/subdir ; @echo touch '$@' | |
| dir/subdir/%.$$a: dir/subdir/%.$$b ; @echo 'cp $< $@' | |
| !, | |
| '', "mkdir -p dir/subdir\ntouch dir/subdir/file.\$b\ncp dir/subdir/file.\$b dir/subdir/file.\$a\n"); | |
| # Test odd whitespace at the beginning of a line | |
| run_make_test(" | |
| all: | |
| \f | |
| \\ | |
| \f \\ | |
| \013 \\ | |
| all: ; \@echo hi | |
| ", | |
| '', "hi\n"); | |
| 1; |