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