From: Bruno Haible Date: Fri, 11 Aug 2023 08:24:46 +0000 (+0200) Subject: clock-time: On mingw, avoid buggy clock_gettime from libwinpthread. X-Git-Tag: v1.0~936 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=1fac141cb1193aeeed59e8f65532520ce102bfb8;p=gnulib.git 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. --- diff --git a/ChangeLog b/ChangeLog index 0a35614fd4..89dd0fa5fe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2023-08-11 Bruno Haible + + 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 readutmp: Make the header file includable from C++. diff --git a/doc/posix-functions/clock_gettime.texi b/doc/posix-functions/clock_gettime.texi index 93ac4215df..890bbfcc53 100644 --- a/doc/posix-functions/clock_gettime.texi +++ b/doc/posix-functions/clock_gettime.texi @@ -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 diff --git a/m4/clock_time.m4 b/m4/clock_time.m4 index d624a73d35..28534db1c7 100644 --- a/m4/clock_time.m4 +++ b/m4/clock_time.m4 @@ -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 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])