mirror of
https://github.com/mirror/make.git
synced 2024-12-27 13:20:34 +08:00
Fixed bug #14334 by propagate the change of modification time to all the
double-colon entries only if it is the last one to be updated.
This commit is contained in:
parent
1fd3f9d79c
commit
a34b85490d
@ -1,3 +1,9 @@
|
|||||||
|
2005-12-07 Boris Kolpackov <boris@kolpackov.net>
|
||||||
|
|
||||||
|
* remake.c (notice_finished_file): Propagate the change of
|
||||||
|
modification time to all the double-colon entries only if
|
||||||
|
it is the last one to be updated. Fixes bug #14334.
|
||||||
|
|
||||||
2005-11-17 Boris Kolpackov <boris@kolpackov.net>
|
2005-11-17 Boris Kolpackov <boris@kolpackov.net>
|
||||||
|
|
||||||
* function.c (func_flavor): Implement the flavor function which
|
* function.c (func_flavor): Implement the flavor function which
|
||||||
|
32
remake.c
32
remake.c
@ -841,7 +841,6 @@ notice_finished_file (struct file *file)
|
|||||||
|
|
||||||
if ((ran && !file->phony) || touched)
|
if ((ran && !file->phony) || touched)
|
||||||
{
|
{
|
||||||
struct file *f;
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
/* If -n, -t, or -q and all the commands are recursive, we ran them so
|
/* If -n, -t, or -q and all the commands are recursive, we ran them so
|
||||||
@ -861,11 +860,34 @@ notice_finished_file (struct file *file)
|
|||||||
i = 1;
|
i = 1;
|
||||||
|
|
||||||
file->last_mtime = i == 0 ? UNKNOWN_MTIME : NEW_MTIME;
|
file->last_mtime = i == 0 ? UNKNOWN_MTIME : NEW_MTIME;
|
||||||
|
}
|
||||||
|
|
||||||
/* Propagate the change of modification time to all the double-colon
|
if (file->double_colon)
|
||||||
entries for this file. */
|
{
|
||||||
for (f = file->double_colon; f != 0; f = f->prev)
|
/* If this is a double colon rule and it is the last one to be
|
||||||
f->last_mtime = file->last_mtime;
|
updated, propagate the change of modification time to all the
|
||||||
|
double-colon entries for this file.
|
||||||
|
|
||||||
|
We do it on the last update because it is important to handle
|
||||||
|
individual entries as separate rules with separate timestamps
|
||||||
|
while they are treated as targets and then as one rule with the
|
||||||
|
unified timestamp when they are considered as a prerequisite
|
||||||
|
of some target. */
|
||||||
|
|
||||||
|
struct file *f;
|
||||||
|
FILE_TIMESTAMP max_mtime = file->last_mtime;
|
||||||
|
|
||||||
|
/* Check that all rules were updated and at the same time find
|
||||||
|
the max timestamp. We assume UNKNOWN_MTIME is newer then
|
||||||
|
any other value. */
|
||||||
|
for (f = file->double_colon; f != 0 && f->updated; f = f->prev)
|
||||||
|
if (max_mtime != UNKNOWN_MTIME
|
||||||
|
&& (f->last_mtime == UNKNOWN_MTIME || f->last_mtime > max_mtime))
|
||||||
|
max_mtime = f->last_mtime;
|
||||||
|
|
||||||
|
if (f == 0)
|
||||||
|
for (f = file->double_colon; f != 0; f = f->prev)
|
||||||
|
f->last_mtime = max_mtime;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ran && file->update_status != -1)
|
if (ran && file->update_status != -1)
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
2005-12-07 Boris Kolpackov <boris@kolpackov.net>
|
||||||
|
|
||||||
|
* scripts/features/double_colon: Add a test for bug #14334.
|
||||||
|
|
||||||
2005-11-17 Boris Kolpackov <boris@kolpackov.net>
|
2005-11-17 Boris Kolpackov <boris@kolpackov.net>
|
||||||
|
|
||||||
* scripts/functions/flavor: Add a test for the flavor function.
|
* scripts/functions/flavor: Add a test for the flavor function.
|
||||||
|
@ -124,4 +124,32 @@ $answer = "ok\n$make_name: Circular d <- d dependency dropped.\noops\n";
|
|||||||
|
|
||||||
unlink('foo','f1.h','f2.h');
|
unlink('foo','f1.h','f2.h');
|
||||||
|
|
||||||
|
|
||||||
|
# TEST 9: make sure all rules in s double colon family get executed
|
||||||
|
# (Savannah bug #14334).
|
||||||
|
#
|
||||||
|
|
||||||
|
&touch('one');
|
||||||
|
&touch('two');
|
||||||
|
|
||||||
|
run_make_test('
|
||||||
|
.PHONY: all
|
||||||
|
all: result
|
||||||
|
|
||||||
|
result:: one
|
||||||
|
@echo $^ >>$@
|
||||||
|
@echo $^
|
||||||
|
|
||||||
|
result:: two
|
||||||
|
@echo $^ >>$@
|
||||||
|
@echo $^
|
||||||
|
|
||||||
|
',
|
||||||
|
'',
|
||||||
|
'one
|
||||||
|
two');
|
||||||
|
|
||||||
|
unlink('result','one','two');
|
||||||
|
|
||||||
|
# This tells the test driver that the perl test script executed properly.
|
||||||
1;
|
1;
|
||||||
|
Loading…
Reference in New Issue
Block a user