From: Bruno Haible Date: Sun, 24 Nov 2019 13:32:23 +0000 (+0100) Subject: time_r: Fix for mingw (regression from 2019-11-16). X-Git-Tag: v1.0~4578 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=18b6cc1e844b578ab2c709190376e6649183212f;p=gnulib.git time_r: Fix for mingw (regression from 2019-11-16). * m4/time_r.m4 (gl_TIME_R): Revert to using AC_CHECK_FUNCS_ONCE. Use the AC_LINK_IFELSE test only if the function does not appear to exist. --- diff --git a/ChangeLog b/ChangeLog index 984792b25b..5c2f5c5869 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2019-11-24 Bruno Haible + + time_r: Fix for mingw (regression from 2019-11-16). + * m4/time_r.m4 (gl_TIME_R): Revert to using AC_CHECK_FUNCS_ONCE. Use the + AC_LINK_IFELSE test only if the function does not appear to exist. + 2019-11-24 Bruno Haible wcstok: Add tests. diff --git a/m4/time_r.m4 b/m4/time_r.m4 index 72cc97508a..cc4b3e009b 100644 --- a/m4/time_r.m4 +++ b/m4/time_r.m4 @@ -30,28 +30,8 @@ AC_DEFUN([gl_TIME_R], HAVE_DECL_LOCALTIME_R=0 fi - 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 provides the functions asctime_r, ctime_r, - gmtime_r, localtime_r only if or has - been included before. */ - #if defined __MINGW32__ - # include - #endif - #include - ]], - [[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 + AC_CHECK_FUNCS_ONCE([localtime_r]) + if test $ac_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], @@ -84,6 +64,32 @@ AC_DEFUN([gl_TIME_R], fi else HAVE_LOCALTIME_R=0 + dnl On mingw, localtime_r() is defined as an inline function; use through a + dnl direct function call works but the use as a function pointer leads to a + dnl link error. + AC_CACHE_CHECK([whether localtime_r exists as an inline function], + [gl_cv_func_localtime_r_inline], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[/* mingw's provides the functions asctime_r, ctime_r, + gmtime_r, localtime_r only if or has + been included before. */ + #if defined __MINGW32__ + # include + #endif + #include + ]], + [[time_t a; + struct tm r; + localtime_r (&a, &r); + ]]) + ], + [gl_cv_func_localtime_r_inline=yes], + [gl_cv_func_localtime_r_inline=no]) + ]) + if test $gl_cv_func_localtime_r_inline = yes; then + REPLACE_LOCALTIME_R=1 + fi fi ])