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