1 # -*-perl-*- 2 3 $description = "Test make -W (what if) option.\n"; 4 5 # Basic build 6 7 run_make_test(' 8 a.x: b.x 9 a.x b.x: ; echo >> $@ 10 ', 11 '', "echo >> b.x\necho >> a.x"); 12 13 # Run it again: nothing should happen 14 15 run_make_test(undef, '', "#MAKE#: `a.x' is up to date."); 16 17 # Now run it with -W b.x: should rebuild a.x 18 19 run_make_test(undef, '-W b.x', 'echo >> a.x'); 20 21 # Put the timestamp for a.x into the future; it should still be remade. 22 23 utouch(1000, 'a.x'); 24 run_make_test(undef, '', "#MAKE#: `a.x' is up to date."); 25 run_make_test(undef, '-W b.x', 'echo >> a.x'); 26 27 # Clean up 28 29 rmfiles('a.x', 'b.x'); 30 31 # Test -W with the re-exec feature: we don't want to re-exec forever 32 # Savannah bug # 7566 33 34 # First set it up with a normal build 35 36 run_make_test(' 37 all: baz.x ; @: 38 include foo.x 39 foo.x: bar.x 40 @echo "\$$(info restarts=\$$(MAKE_RESTARTS))" > $@ 41 @echo "touch $@" 42 bar.x: ; echo >> $@ 43 baz.x: bar.x ; @echo "touch $@" 44 ', 45 '', '#MAKEFILE#:3: foo.x: No such file or directory 46 echo >> bar.x 47 touch foo.x 48 restarts=1 49 touch baz.x'); 50 51 # Now run with -W bar.x 52 53 # Tweak foo.x's timestamp so the update will change it. 54 &utouch(1000, 'foo.x'); 55 56 run_make_test(undef, '-W bar.x', "restarts=\ntouch foo.x\nrestarts=1\ntouch baz.x"); 57 58 rmfiles('foo.x', 'bar.x'); 59 60 # Test -W on vpath-found files: it should take effect. 61 # Savannah bug # 15341 62 63 mkdir('x-dir', 0777); 64 utouch(-20, 'x-dir/x'); 65 touch('y'); 66 67 run_make_test(' 68 y: x ; @echo cp $< $@ 69 ', 70 '-W x-dir/x VPATH=x-dir', 71 'cp x-dir/x y'); 72 73 # Make sure ./ stripping doesn't interfere with the match. 74 75 run_make_test(' 76 y: x ; @echo cp $< $@ 77 ', 78 '-W ./x-dir/x VPATH=x-dir', 79 'cp x-dir/x y'); 80 81 run_make_test(undef, 82 '-W x-dir/x VPATH=./x-dir', 83 'cp ./x-dir/x y'); 84 85 unlink(qw(y x-dir/x)); 86 rmdir('x-dir'); 87 88 1; 89