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

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

# 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 = subst_make_string("#MAKEPATH# -f \"$submake\" bar\ntouch inc\necho n --no-print-directory\n");
&compare_output($answer, &get_logfile(1));

# SV 65917: Verify handling of -n with multi-target pattern rules

# This is what the makefile below would run
utouch(-12, qw(alpha.p));
utouch(-10, qw(alpha.x alpha.y));
utouch(-8, qw(beta.p));
utouch(-6, qw(beta.x beta.y));
utouch(-4, qw(alpha.q));
utouch(-2, qw(beta.q));

# Now make some things out of date
touch(qw(alpha.p));

run_make_test(q!
.SUFFIXES:
.RECIPEPREFIX := >

all: alpha.q beta.q

alpha.p beta.p:
> touch $@

%.x %.y: %.p
> touch $*.x $*.y

alpha.q: alpha.x alpha.y beta.y
> touch $@

beta.q: beta.x beta.y alpha.y
> touch $@
!,
    '-n', "touch alpha.x alpha.y\ntouch alpha.q\ntouch beta.q\n");

# This is what the makefile below would run
utouch(-12, qw(quark.p));
utouch(-10, qw(quark.x quark.y));
utouch(-8, qw(meson.p));
utouch(-6, qw(meson.x meson.y));
utouch(-4, qw(quark.q));
utouch(-2, qw(meson.q));

# Now make some things out of date
touch(qw(quark.p));

run_make_test(q!
.SUFFIXES:
.RECIPEPREFIX := >

all: quark.q meson.q

quark.p meson.p:
> touch $@

quark.x quark.y &: quark.p
> touch quark.x quark.y

meson.x meson.y &: meson.p
> touch meson.x meson.y

quark.q: quark.x quark.y meson.y
> touch $@

meson.q: meson.x meson.y quark.y
> touch $@
!,
    '-n', "touch quark.x quark.y\ntouch quark.q\ntouch meson.q\n");

1;
