#                                                                    -*-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;
