| # -*-perl-*- | |
| $description = "Test make -W (what if) option.\n"; | |
| # Basic build | |
| run_make_test(q! | |
| a.x: b.x | |
| a.x b.x: ; echo >> $@ | |
| !, | |
| '', "echo >> b.x\necho >> a.x"); | |
| # Run it again: nothing should happen | |
| run_make_test(undef, '', "#MAKE#: 'a.x' is up to date."); | |
| # Now run it with -W b.x: should rebuild a.x | |
| run_make_test(undef, '-W b.x', 'echo >> a.x'); | |
| # Put the timestamp for a.x into the future; it should still be remade. | |
| # There are clock skew errors printed here but they will be cleared by | |
| # the comparison code. | |
| utouch(1000, 'a.x'); | |
| run_make_test(undef, '', "#MAKE#: 'a.x' is up to date."); | |
| run_make_test(undef, '-W b.x', 'echo >> a.x'); | |
| # Clean up | |
| rmfiles('a.x', 'b.x'); | |
| # Test -W with the re-exec feature: we don't want to re-exec forever | |
| # Savannah bug # 7566 | |
| # First set it up with a normal build | |
| run_make_test(q! | |
| all: baz.x ; @: | |
| include foo.x | |
| foo.x: bar.x | |
| #TAB#@echo "\$$(info restarts=\$$(MAKE_RESTARTS))" > $@ | |
| #TAB#@echo "touch $@" | |
| bar.x: ; echo >> $@ | |
| baz.x: bar.x ; @echo "touch $@" | |
| !, | |
| '', 'echo >> bar.x | |
| touch foo.x | |
| restarts=1 | |
| touch baz.x'); | |
| # Now run with -W bar.x | |
| # Tweak foo.x's timestamp so the update will change it. | |
| # There are clock skew errors printed here but they will be cleared by | |
| # the comparison code. | |
| &utouch(1000, 'foo.x'); | |
| run_make_test(undef, '-W bar.x', "restarts=\ntouch foo.x\nrestarts=1\ntouch baz.x"); | |
| rmfiles('foo.x', 'bar.x'); | |
| # Test -W on vpath-found files: it should take effect. | |
| # Savannah bug # 15341 | |
| mkdir('x-dir', 0777); | |
| utouch(-20, 'x-dir/x'); | |
| touch('y'); | |
| run_make_test(q! | |
| y: x ; @echo cp $< $@ | |
| !, | |
| '-W x-dir/x VPATH=x-dir', | |
| 'cp x-dir/x y'); | |
| # Make sure ./ stripping doesn't interfere with the match. | |
| run_make_test(q! | |
| y: x ; @echo cp $< $@ | |
| !, | |
| '-W ./x-dir/x VPATH=x-dir', | |
| 'cp x-dir/x y'); | |
| run_make_test(undef, | |
| '-W x-dir/x VPATH=./x-dir', | |
| 'cp ./x-dir/x y'); | |
| unlink(qw(y x-dir/x)); | |
| rmdir('x-dir'); | |
| 1; |