diff options
Diffstat (limited to 'gl/m4/time_r.m4')
| -rw-r--r-- | gl/m4/time_r.m4 | 49 |
1 files changed, 45 insertions, 4 deletions
diff --git a/gl/m4/time_r.m4 b/gl/m4/time_r.m4 index c388a831..adce438a 100644 --- a/gl/m4/time_r.m4 +++ b/gl/m4/time_r.m4 | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | dnl Reentrant time functions: localtime_r, gmtime_r. | 1 | dnl Reentrant time functions: localtime_r, gmtime_r. |
| 2 | 2 | ||
| 3 | dnl Copyright (C) 2003, 2006-2013 Free Software Foundation, Inc. | 3 | dnl Copyright (C) 2003, 2006-2023 Free Software Foundation, Inc. |
| 4 | dnl This file is free software; the Free Software Foundation | 4 | dnl This file is free software; the Free Software Foundation |
| 5 | dnl gives unlimited permission to copy and/or distribute it, | 5 | dnl gives unlimited permission to copy and/or distribute it, |
| 6 | dnl with or without modifications, as long as this notice is preserved. | 6 | dnl with or without modifications, as long as this notice is preserved. |
| @@ -12,12 +12,20 @@ AC_DEFUN([gl_TIME_R], | |||
| 12 | dnl Persuade glibc and Solaris <time.h> to declare localtime_r. | 12 | dnl Persuade glibc and Solaris <time.h> to declare localtime_r. |
| 13 | AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) | 13 | AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) |
| 14 | 14 | ||
| 15 | AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) | 15 | AC_REQUIRE([gl_TIME_H_DEFAULTS]) |
| 16 | AC_REQUIRE([AC_C_RESTRICT]) | 16 | AC_REQUIRE([AC_C_RESTRICT]) |
| 17 | 17 | ||
| 18 | dnl Some systems don't declare localtime_r() and gmtime_r() if _REENTRANT is | 18 | dnl Some systems don't declare localtime_r() and gmtime_r() if _REENTRANT is |
| 19 | dnl not defined. | 19 | dnl not defined. |
| 20 | AC_CHECK_DECLS([localtime_r], [], [], [[#include <time.h>]]) | 20 | AC_CHECK_DECLS([localtime_r], [], [], |
| 21 | [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, | ||
| 22 | gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has | ||
| 23 | been included before. */ | ||
| 24 | #if defined __MINGW32__ | ||
| 25 | # include <unistd.h> | ||
| 26 | #endif | ||
| 27 | #include <time.h> | ||
| 28 | ]]) | ||
| 21 | if test $ac_cv_have_decl_localtime_r = no; then | 29 | if test $ac_cv_have_decl_localtime_r = no; then |
| 22 | HAVE_DECL_LOCALTIME_R=0 | 30 | HAVE_DECL_LOCALTIME_R=0 |
| 23 | fi | 31 | fi |
| @@ -29,7 +37,14 @@ AC_DEFUN([gl_TIME_R], | |||
| 29 | [gl_cv_time_r_posix], | 37 | [gl_cv_time_r_posix], |
| 30 | [AC_COMPILE_IFELSE( | 38 | [AC_COMPILE_IFELSE( |
| 31 | [AC_LANG_PROGRAM( | 39 | [AC_LANG_PROGRAM( |
| 32 | [[#include <time.h>]], | 40 | [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, |
| 41 | gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has | ||
| 42 | been included before. */ | ||
| 43 | #if defined __MINGW32__ | ||
| 44 | # include <unistd.h> | ||
| 45 | #endif | ||
| 46 | #include <time.h> | ||
| 47 | ]], | ||
| 33 | [[/* We don't need to append 'restrict's to the argument types, | 48 | [[/* We don't need to append 'restrict's to the argument types, |
| 34 | even though the POSIX signature has the 'restrict's, | 49 | even though the POSIX signature has the 'restrict's, |
| 35 | since C99 says they can't affect type compatibility. */ | 50 | since C99 says they can't affect type compatibility. */ |
| @@ -49,6 +64,32 @@ AC_DEFUN([gl_TIME_R], | |||
| 49 | fi | 64 | fi |
| 50 | else | 65 | else |
| 51 | HAVE_LOCALTIME_R=0 | 66 | HAVE_LOCALTIME_R=0 |
| 67 | dnl On mingw, localtime_r() is defined as an inline function; use through a | ||
| 68 | dnl direct function call works but the use as a function pointer leads to a | ||
| 69 | dnl link error. | ||
| 70 | AC_CACHE_CHECK([whether localtime_r exists as an inline function], | ||
| 71 | [gl_cv_func_localtime_r_inline], | ||
| 72 | [AC_LINK_IFELSE( | ||
| 73 | [AC_LANG_PROGRAM( | ||
| 74 | [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, | ||
| 75 | gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has | ||
| 76 | been included before. */ | ||
| 77 | #if defined __MINGW32__ | ||
| 78 | # include <unistd.h> | ||
| 79 | #endif | ||
| 80 | #include <time.h> | ||
| 81 | ]], | ||
| 82 | [[time_t a; | ||
| 83 | struct tm r; | ||
| 84 | localtime_r (&a, &r); | ||
| 85 | ]]) | ||
| 86 | ], | ||
| 87 | [gl_cv_func_localtime_r_inline=yes], | ||
| 88 | [gl_cv_func_localtime_r_inline=no]) | ||
| 89 | ]) | ||
| 90 | if test $gl_cv_func_localtime_r_inline = yes; then | ||
| 91 | REPLACE_LOCALTIME_R=1 | ||
| 92 | fi | ||
| 52 | fi | 93 | fi |
| 53 | ]) | 94 | ]) |
| 54 | 95 | ||
