[SV 65917] Mark also_make targets as updated in make -n Suggested patch by Hannes Domani <ssbssa@yahoo.de> * src/remake.c (notice_finished_file): When run with -n, mark also_make targets as updated. * tests/scripts/options/dash-n: Test pattern and grouped targets.
diff --git a/AUTHORS b/AUTHORS index d319855..a3d1aea 100644 --- a/AUTHORS +++ b/AUTHORS
@@ -64,6 +64,7 @@ Jeremy Devenport <jeremy.devenport@gmail.com> Pete Dietl <petedietl@gmail.com> Aaron Digulla <digulla@fh-konstanz.de> + Hannes Domani <ssbssa@yahoo.de> Martin Dorey <martin.dorey@hds.com> Christian Eggers <ceggers@arri.de> Paul Eggert <eggert@twinsun.com>
diff --git a/src/remake.c b/src/remake.c index b19c67c..50d8f7e 100644 --- a/src/remake.c +++ b/src/remake.c
@@ -1112,11 +1112,17 @@ d->file->update_status = file->update_status; if (ran && !d->file->phony) - /* Fetch the new modification time. - We do this instead of just invalidating the cached time - so that a vpath_search can happen. Otherwise, it would - never be done because the target is already updated. */ - f_mtime (d->file, 0); + { + /* Fetch the new modification time. + We do this instead of just invalidating the cached time + so that a vpath_search can happen. Otherwise, it would + never be done because the target is already updated. */ + f_mtime (d->file, 0); + + if (just_print_flag) + /* Nothing got updated, but pretend it did. */ + d->file->last_mtime = NEW_MTIME; + } } /* If the target was created by an implicit rule, and it was updated,
diff --git a/tests/scripts/options/dash-n b/tests/scripts/options/dash-n index ca3b43d..91b8781 100644 --- a/tests/scripts/options/dash-n +++ b/tests/scripts/options/dash-n
@@ -15,8 +15,6 @@ 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 @@ -65,10 +63,6 @@ &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 @@ -81,7 +75,6 @@ EOF close(MAKEFILE); - # The bar target should print what would happen, but not actually run open(MAKEFILE, "> $submake"); print MAKEFILE <<'EOF'; @@ -95,6 +88,71 @@ $answer = subst_make_string("#MAKEPATH# -f \"$submake\" bar\ntouch inc\necho n --no-print-directory\n"); &compare_output($answer, &get_logfile(1)); -unlink('inc'); +# 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;