| 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 | '', 'echo >> bar.x
|
|---|
| 46 | touch foo.x
|
|---|
| 47 | restarts=1
|
|---|
| 48 | touch baz.x');
|
|---|
| 49 |
|
|---|
| 50 | # Now run with -W bar.x
|
|---|
| 51 |
|
|---|
| 52 | # Tweak foo.x's timestamp so the update will change it.
|
|---|
| 53 | &utouch(1000, 'foo.x');
|
|---|
| 54 |
|
|---|
| 55 | run_make_test(undef, '-W bar.x', "restarts=\ntouch foo.x\nrestarts=1\ntouch baz.x");
|
|---|
| 56 |
|
|---|
| 57 | rmfiles('foo.x', 'bar.x');
|
|---|
| 58 |
|
|---|
| 59 | # Test -W on vpath-found files: it should take effect.
|
|---|
| 60 | # Savannah bug # 15341
|
|---|
| 61 |
|
|---|
| 62 | mkdir('x-dir', 0777);
|
|---|
| 63 | utouch(-20, 'x-dir/x');
|
|---|
| 64 | touch('y');
|
|---|
| 65 |
|
|---|
| 66 | run_make_test('
|
|---|
| 67 | y: x ; @echo cp $< $@
|
|---|
| 68 | ',
|
|---|
| 69 | '-W x-dir/x VPATH=x-dir',
|
|---|
| 70 | 'cp x-dir/x y');
|
|---|
| 71 |
|
|---|
| 72 | # Make sure ./ stripping doesn't interfere with the match.
|
|---|
| 73 |
|
|---|
| 74 | run_make_test('
|
|---|
| 75 | y: x ; @echo cp $< $@
|
|---|
| 76 | ',
|
|---|
| 77 | '-W ./x-dir/x VPATH=x-dir',
|
|---|
| 78 | 'cp x-dir/x y');
|
|---|
| 79 |
|
|---|
| 80 | run_make_test(undef,
|
|---|
| 81 | '-W x-dir/x VPATH=./x-dir',
|
|---|
| 82 | 'cp ./x-dir/x y');
|
|---|
| 83 |
|
|---|
| 84 | unlink(qw(y x-dir/x));
|
|---|
| 85 | rmdir('x-dir');
|
|---|
| 86 |
|
|---|
| 87 | 1;
|
|---|
| 88 |
|
|---|
| 89 | ### Local Variables:
|
|---|
| 90 | ### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
|
|---|
| 91 | ### End:
|
|---|