summaryrefslogtreecommitdiff
path: root/m4
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2019-11-16 13:13:58 +0100
committerBruno Haible <bruno@clisp.org>2019-11-16 13:13:58 +0100
commitb7bf9f4361c8d78ccfda7a30ff31f7a406ea972e (patch)
tree2186d0634ebd17161fdba59c9a4ff70c571e6db2 /m4
parent5f8e536e11e8be936768592b8c24e18350e2f775 (diff)
downloadgnulib-b7bf9f4361c8d78ccfda7a30ff31f7a406ea972e.tar.gz
time_r: Fix for mingw.
Reported by Christian Biesinger <cbiesinger@google.com> in <https://lists.gnu.org/archive/html/bug-gnulib/2019-11/msg00014.html>. * lib/time.in.h: On mingw, include <unistd.h>. * m4/time_r.m4 (gl_TIME_R): On mingw, include <unistd.h> before <time.h>. Test for localtime_r in a way that works when it is defined as an inline function.
Diffstat (limited to 'm4')
-rw-r--r--m4/time_r.m443
1 files changed, 39 insertions, 4 deletions
diff --git a/m4/time_r.m4 b/m4/time_r.m4
index 5caeca7509..72cc97508a 100644
--- a/m4/time_r.m4
+++ b/m4/time_r.m4
@@ -17,19 +17,54 @@ AC_DEFUN([gl_TIME_R],
dnl Some systems don't declare localtime_r() and gmtime_r() if _REENTRANT is
dnl not defined.
- AC_CHECK_DECLS([localtime_r], [], [], [[#include <time.h>]])
+ AC_CHECK_DECLS([localtime_r], [], [],
+ [[/* mingw's <time.h> provides the functions asctime_r, ctime_r,
+ gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has
+ been included before. */
+ #if defined __MINGW32__
+ # include <unistd.h>
+ #endif
+ #include <time.h>
+ ]])
if test $ac_cv_have_decl_localtime_r = no; then
HAVE_DECL_LOCALTIME_R=0
fi
- AC_CHECK_FUNCS_ONCE([localtime_r])
- if test $ac_cv_func_localtime_r = yes; then
+ dnl We can't use AC_CHECK_FUNC here, because localtime_r() is defined as an
+ dnl inline function on mingw.
+ AC_CACHE_CHECK([for localtime_r], [gl_cv_func_localtime_r],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[/* mingw's <time.h> provides the functions asctime_r, ctime_r,
+ gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has
+ been included before. */
+ #if defined __MINGW32__
+ # include <unistd.h>
+ #endif
+ #include <time.h>
+ ]],
+ [[time_t a;
+ struct tm r;
+ localtime_r (&a, &r);
+ ]])
+ ],
+ [gl_cv_func_localtime_r=yes],
+ [gl_cv_func_localtime_r=no])
+ ])
+ if test $gl_cv_func_localtime_r = yes; then
HAVE_LOCALTIME_R=1
AC_CACHE_CHECK([whether localtime_r is compatible with its POSIX signature],
[gl_cv_time_r_posix],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
- [[#include <time.h>]],
+ [[/* mingw's <time.h> provides the functions asctime_r, ctime_r,
+ gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has
+ been included before. */
+ #if defined __MINGW32__
+ # include <unistd.h>
+ #endif
+ #include <time.h>
+ ]],
[[/* We don't need to append 'restrict's to the argument types,
even though the POSIX signature has the 'restrict's,
since C99 says they can't affect type compatibility. */