]> git.ipfire.org Git - thirdparty/make.git/commitdiff
make -p uses same clock as rest of 'make'
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 10 May 2023 19:10:15 +0000 (12:10 -0700)
committerPaul Smith <psmith@gnu.org>
Sun, 14 May 2023 22:26:35 +0000 (18:26 -0400)
Without this patch, the output of 'make -p' would generate output that
sometimes incorrectly implied that the clock jumped backwards.
* src/main.c (time_now): New function.
(print_data_base): Use it.

src/main.c

index 5343d47bfdfce27d63b8d77fb69035f48958f40c..fdd4e9d482a0fea4acb6d77a66165312dca2708b 100644 (file)
@@ -3720,12 +3720,41 @@ print_version (void)
   printed_version = 1;
 }
 
+static time_t
+time_now (void)
+{
+  /* Use an algorithm like file_timestamp_now's, extracting just the
+     seconds part of the timestamp.  This avoids a race that would
+     generate output that incorrectly makes it look like the system
+     clock jumped backwards on platforms like GNU/Linux where the
+     'time' function does not use the CLOCK_REALTIME clock and the two
+     clocks can disagree in their seconds component.  */
+#if FILE_TIMESTAMP_HI_RES
+# if HAVE_CLOCK_GETTIME && defined CLOCK_REALTIME
+  {
+    struct timespec timespec;
+    if (clock_gettime (CLOCK_REALTIME, &timespec) == 0)
+      return timespec.tv_sec;
+  }
+# endif
+# if HAVE_GETTIMEOFDAY
+  {
+    struct timeval timeval;
+    if (gettimeofday (&timeval, 0) == 0)
+      return timeval.tv_sec;
+  }
+# endif
+#endif
+
+  return time ((time_t *) 0);
+}
+
 /* Print a bunch of information about this and that.  */
 
 static void
 print_data_base (void)
 {
-  time_t when = time ((time_t *) 0);
+  time_t when = time_now ();
 
   print_version ();
 
@@ -3738,7 +3767,7 @@ print_data_base (void)
   print_vpath_data_base ();
   strcache_print_stats ("#");
 
-  when = time ((time_t *) 0);
+  when = time_now ();
   printf (_("\n# Finished Make data base on %s\n"), ctime (&when));
 }