From c4e0b10f18255bc45a9e15c5bde9b11b95e9ad0f Mon Sep 17 00:00:00 2001
From: Po Lu <luangruo@yahoo.com>
Date: Thu, 10 Aug 2023 01:53:26 +0000
Subject: [PATCH] Fix the MS-DOS, Haiku, USG, etc builds

* configure.ac (emacs_cv_boot_time_file): Only compute this on
GNU/Linux, the sole system with systemd.
* nt/inc/ms-w32.h (BOOT_TIME_FILE): Remove now redundant #undef.
* src/filelock.c (get_boot_time): Eschew BOOT_TIME_FILE if not
defined.
---
 configure.ac    | 23 +++++++++++++----------
 nt/inc/ms-w32.h |  1 -
 src/filelock.c  |  3 ++-
 3 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/configure.ac b/configure.ac
index 56c8cf1ae05..b5f8a0d5416 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2625,11 +2625,11 @@ if test "$GCC" = yes && test "$ac_enable_autodepend" = yes; then
 fi
 AC_SUBST([AUTO_DEPEND])
 
+BOOT_TIME_FILE=
 AC_CACHE_CHECK([for old but post-boot file],
   [emacs_cv_boot_time_file],
   [AS_CASE([$opsys],
-     [*bsd|darwin|dragonfly],
-       [emacs_cv_boot_time_file='not needed'],
+     [gnu-linux],
      [emacs_cv_boot_time_file=unknown
       AS_IF([test $cross_compiling = no],
 	[# systemd puts it in /var/lib/systemd.
@@ -2642,19 +2642,22 @@ AC_CACHE_CHECK([for old but post-boot file],
 	     /var/run/random-seed
 	 do
 	   test -f $file && { emacs_cv_boot_time_file=$file; break; }
-	 done])])])
+	 done])],
+     [*], [emacs_cv_boot_time_file=not-needed])])
+
 AS_CASE([$emacs_cv_boot_time_file],
   [/*|*:*], [BOOT_TIME_FILE=\"$emacs_cv_boot_time_file\"],
-  [NULL|nullptr|0], [BOOT_TIME_FILE=$emacs_cv_boot_time_file],
-  ['not needed'], [BOOT_TIME_FILE=NULL],
+  ['not needed'], [BOOT_TIME_FILE=],
   [# Guess systemd if unknown.
    # If guess is wrong, Emacs falls back on something else.
    BOOT_TIME_FILE=\"/var/lib/systemd/random-seed\"])
-AC_DEFINE_UNQUOTED([BOOT_TIME_FILE], [$BOOT_TIME_FILE],
-  [Name of file that, if it exists, postdates boot and predates
-   the first Emacs invocation; or a null pointer if no such file is known.
-   This file is used only on GNU/Linux and other systems
-   that lack the FreeBSD-style sysctl with KERN_BOOTTIME.])
+
+AS_IF([test -n "$BOOT_TIME_FILE"],
+  [AC_DEFINE_UNQUOTED([BOOT_TIME_FILE], [$BOOT_TIME_FILE],
+    [Name of file that, if it exists, postdates boot and predates
+     the first Emacs invocation; or a null pointer if no such file is known.
+     This file is used only on GNU/Linux and other systems
+     that lack the FreeBSD-style sysctl with KERN_BOOTTIME.])])
 
 #### Choose a window system.
 
diff --git a/nt/inc/ms-w32.h b/nt/inc/ms-w32.h
index b23fd5030fa..58be1199345 100644
--- a/nt/inc/ms-w32.h
+++ b/nt/inc/ms-w32.h
@@ -121,7 +121,6 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
    the output, but that's gross.  So this should do; if the file is
    not there, the boot time will be returned as zero, and filelock.c
    already handles that.  */
-#undef BOOT_TIME_FILE
 #define BOOT_TIME_FILE "C:/pagefile.sys"
 
 /* ============================================================ */
diff --git a/src/filelock.c b/src/filelock.c
index 0ad130353f3..3b1ff8ad566 100644
--- a/src/filelock.c
+++ b/src/filelock.c
@@ -159,7 +159,7 @@ get_boot_time (void)
   }
 #endif /* defined (CTL_KERN) && defined (KERN_BOOTTIME) */
 
-  if (BOOT_TIME_FILE)
+#ifdef BOOT_TIME_FILE
     {
       struct stat st;
       if (stat (BOOT_TIME_FILE, &st) == 0)
@@ -168,6 +168,7 @@ get_boot_time (void)
 	  return boot_time;
 	}
     }
+#endif /* BOOT_TIME_FILE */
 
 #if defined (BOOT_TIME)
   /* The utmp routines maintain static state.  Don't touch that state
-- 
2.39.5