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