summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <roland@redhat.com>1996-02-29 00:27:25 +0000
committerRoland McGrath <roland@redhat.com>1996-02-29 00:27:25 +0000
commitb07e961db1aaa6f10c090897c7ba84ee3d4488f9 (patch)
tree801f9cc7162362e2d157db85840800b9a93472ed
parent5958f289000914a972b155ce4ca065bf26c79743 (diff)
downloadgunmake-b07e961db1aaa6f10c090897c7ba84ee3d4488f9.tar.gz
Wed Feb 28 03:56:20 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* remake.c (f_mtime): Check for future timestamps; give error and mark file as "failed to update".
-rw-r--r--remake.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/remake.c b/remake.c
index 528b0ba..0ba53c0 100644
--- a/remake.c
+++ b/remake.c
@@ -1,5 +1,5 @@
/* Basic dependency engine for GNU Make.
-Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 1995 Free Software Foundation, Inc.
+Copyright (C) 1988,89,90,91,92,93,94,95,96 Free Software Foundation, Inc.
This file is part of GNU Make.
GNU Make is free software; you can redistribute it and/or modify
@@ -988,6 +988,27 @@ f_mtime (file, search)
file = file->prev;
} while (file != 0);
+ {
+ /* Files can have bogus timestamps that nothing newly made will be
+ "newer" than. Updating their dependents could just result in loops.
+ So notify the user of the anomaly by treating future files as
+ unrecoverably absent. */
+
+ static time_t now;
+ if (mtime > now && ! file->updated)
+ {
+ /* This file's time appears to be in the future.
+ Update our concept of the present, and compare again. */
+ extern time_t time ();
+ if (mtime > time (&now))
+ {
+ error ("*** File `%s' has modification time in the future",
+ file->name);
+ file->update_status = 2;
+ }
+ }
+ }
+
return mtime;
}