#                                                                    -*-perl-*-
$description = "Test the -n option.\n";

$details = "Try various uses of -n and ensure they all give the correct results.\n";

touch('orig');

run_make_test(q!
final: intermediate ; echo >> $@
intermediate: orig ; echo >> $@
!,
              '', "echo >> intermediate\necho >> final\n");

# TEST 1

run_make_test(undef, '-Worig -n', "echo >> intermediate\necho >> final\n");

rmfiles(qw(orig intermediate final));

# We consider the actual updated timestamp of targets with all
# recursive commands, even with -n.  Switching this to the new model
# is non-trivial because we use a trick below to change the log content
# before we compare it ...

$makefile2 = &get_tmpfile;

open(MAKEFILE, "> $makefile2");

print MAKEFILE <<'EOF';
.SUFFIXES:
BAR =     # nothing
FOO = +$(BAR)
a: b; echo > $@
b: c; $(FOO)
EOF

close(MAKEFILE);

&utouch(-20, 'b');
&utouch(-10, 'a');
&touch('c');

# TEST 2

&run_make_with_options($makefile2, "", &get_logfile);
$answer = "$make_name: 'a' is up to date.\n";
&compare_output($answer, &get_logfile(1));

# TEST 3

&run_make_with_options($makefile2, "-n", &get_logfile);
$answer = "$make_name: 'a' is up to date.\n";
&compare_output($answer, &get_logfile(1));

# TEST 4

unlink(qw(a b));

&run_make_with_options($makefile2, "-t -n", &get_logfile);

open(DASH_N_LOG, ">>" . &get_logfile(1));
print DASH_N_LOG "a exists but should not!\n" if -e 'a';
print DASH_N_LOG "b exists but should not!\n" if -e 'b';
close(DASH_N_LOG);

&compare_output("touch b\ntouch a\n", &get_logfile(1));

# CLEANUP

unlink(qw(a b c));

# Ensure -n continues to be included with recursive/re-execed make
# See Savannah bug #38051

$topmake = &get_tmpfile;
$submake = &get_tmpfile;

open(MAKEFILE, "> $topmake");
print MAKEFILE <<"EOF";
foo: ; \@\$(MAKE) -f "$submake" bar
EOF
close(MAKEFILE);


# The bar target should print what would happen, but not actually run
open(MAKEFILE, "> $submake");
print MAKEFILE <<'EOF';
inc: ; touch $@
-include inc
bar: ; @echo $(strip $(MAKEFLAGS))
EOF
close(MAKEFILE);

&run_make_with_options($topmake, '-n --no-print-directory', &get_logfile);
$answer = "$make_command -f \"$submake\" bar\ntouch inc\necho n --no-print-directory\n";
&compare_output($answer, &get_logfile(1));

unlink('inc');

1;
