]> Savannah Git Hosting - gnulib.git/commitdiff
clock-time: On mingw, avoid buggy clock_gettime from libwinpthread.
authorBruno Haible <bruno@clisp.org>
Fri, 11 Aug 2023 08:24:46 +0000 (10:24 +0200)
committerBruno Haible <bruno@clisp.org>
Fri, 11 Aug 2023 08:38:38 +0000 (10:38 +0200)
* m4/clock_time.m4 (gl_CLOCK_TIME): Require AC_CANONICAL_HOST. On
native Windows, avoid using clock_getres clock_gettime clock_settime
from mingw's libwinpthread.
* doc/posix-functions/clock_gettime.texi: Mention the mingw bug.

ChangeLog
doc/posix-functions/clock_gettime.texi
m4/clock_time.m4

index 0a35614fd44c847469dd358287e9ac72fd96dc18..89dd0fa5fee24fb3ace34ca159234f8946152ad0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2023-08-11  Bruno Haible  <bruno@clisp.org>
+
+       clock-time: On mingw, avoid buggy clock_gettime from libwinpthread.
+       * m4/clock_time.m4 (gl_CLOCK_TIME): Require AC_CANONICAL_HOST. On
+       native Windows, avoid using clock_getres clock_gettime clock_settime
+       from mingw's libwinpthread.
+       * doc/posix-functions/clock_gettime.texi: Mention the mingw bug.
+
 2023-08-10  Bruno Haible  <bruno@clisp.org>
 
        readutmp: Make the header file includable from C++.
index 93ac4215df202a2289ff9970ac4affbe6caf66ad..890bbfcc53ca66caa329d60afd440c9ba055617b 100644 (file)
@@ -15,6 +15,10 @@ Portability problems not fixed by Gnulib:
 @item
 This function is missing on some platforms:
 Mac OS X 10.11, Minix 3.1.8, mingw, MSVC 14.
+@item
+This function leaves the upper 32 bits of the @code{tv_sec} field of the result
+uninitialized on some platforms:
+mingw in 32-bit mode.
 @end itemize
 
 The Gnulib modules @code{gettime} and @code{timespec_get} are partial
index d624a73d35d40c3447c864680fc51df8fa9c5b5b..28534db1c76fdb7a7b63f3268bc0d6f70f7e7c70 100644 (file)
@@ -1,4 +1,4 @@
-# clock_time.m4 serial 12
+# clock_time.m4 serial 13
 dnl Copyright (C) 2002-2006, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -12,9 +12,17 @@ dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_CLOCK_TIME],
 [
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
   dnl Persuade glibc and Solaris <time.h> to declare these functions.
   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
 
+  # On mingw, these functions are defined in the libwinpthread library,
+  # which is better avoided.  In fact, the clock_gettime function is buggy
+  # in 32-bit mingw, when -D__MINGW_USE_VC2005_COMPAT is used (which Gnulib's
+  # year2038 module does): It leaves the upper 32 bits of the tv_sec field
+  # of the result uninitialized.
+
   # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.
   # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
 
@@ -23,12 +31,22 @@ AC_DEFUN([gl_CLOCK_TIME],
   # library, inducing unnecessary run-time overhead.
   CLOCK_TIME_LIB=
   AC_SUBST([CLOCK_TIME_LIB])
-  gl_saved_libs=$LIBS
-    AC_SEARCH_LIBS([clock_gettime], [rt posix4],
-                   [test "$ac_cv_search_clock_gettime" = "none required" ||
-                    CLOCK_TIME_LIB=$ac_cv_search_clock_gettime])
-    AC_CHECK_FUNCS([clock_getres clock_gettime clock_settime])
-  LIBS=$gl_saved_libs
+  case "$host_os" in
+    mingw*)
+      ac_cv_func_clock_getres=no
+      ac_cv_func_clock_gettime=no
+      ac_cv_func_clock_settime=no
+      ;;
+    *)
+      gl_saved_libs=$LIBS
+        AC_SEARCH_LIBS([clock_gettime], [rt posix4],
+                       [test "$ac_cv_search_clock_gettime" = "none required" ||
+                        CLOCK_TIME_LIB=$ac_cv_search_clock_gettime])
+        AC_CHECK_FUNCS([clock_getres clock_gettime clock_settime])
+      LIBS=$gl_saved_libs
+      ;;
+  esac
+
   # For backward compatibility.
   LIB_CLOCK_GETTIME="$CLOCK_TIME_LIB"
   AC_SUBST([LIB_CLOCK_GETTIME])