-#serial 2
+#serial 5
-dnl From Jim Meyering.
+dnl This macro is intended to be used solely in this file.
+dnl These are the prerequisite macros for GNU's strftime.c replacement.
+dnl FIXME: the list is far from complete
+AC_DEFUN(_jm_STRFTIME_PREREQS,
+[
+ dnl strftime.c uses localtime_r if it exists. Check for it.
+ AC_CHECK_FUNCS(localtime_r)
+ dnl FIXME: add tests for everything in strftime.c: e.g., HAVE_BCOPY,
+ dnl HAVE_TZNAME, HAVE_TZSET, HAVE_TM_ZONE, etc.
+])
+
+dnl Determine if the strftime function has all the features of the GNU one.
+dnl
dnl If you use this macro in a package, you should
dnl add the following two lines to acconfig.h:
dnl /* Define to gnu_strftime if the replacement function should be used. */
dnl #undef strftime
dnl
+dnl From Jim Meyering.
+dnl
AC_DEFUN(jm_FUNC_GNU_STRFTIME,
[AC_REQUIRE([AC_HEADER_TIME])dnl
+
+ _jm_STRFTIME_PREREQS
+
AC_REQUIRE([AC_C_CONST])dnl
AC_REQUIRE([AC_HEADER_STDC])dnl
AC_CHECK_HEADERS(sys/time.h)
/* This is necessary to make strftime give consistent zone strings and
e.g., seconds since the epoch (%s). */
- putenv ("TZ=GMT");
+ putenv ("TZ=GMT0");
#undef CMP
#define CMP(Fmt, Expected) n_fail += compare ((Fmt), tm, (Expected))
CMP ("%^B", "JANUARY");
CMP ("%C", "19"); /* POSIX.2 */
CMP ("%D", "01/09/70"); /* POSIX.2 */
+ CMP ("%F", "1970-01-09");
CMP ("%G", "1970"); /* GNU */
CMP ("%H", "13");
CMP ("%I", "01");
CMP ("%^c", "FRI JAN 9 13:06:07 1970");
CMP ("%d", "09");
CMP ("%e", " 9"); /* POSIX.2 */
+ CMP ("%f", "5"); /* POSIX.2 */
CMP ("%g", "70"); /* GNU */
CMP ("%h", "Jan"); /* POSIX.2 */
CMP ("%^h", "JAN");
AC_DEFINE_UNQUOTED(strftime, gnu_strftime)
fi
])
+
+AC_DEFUN(jm_FUNC_STRFTIME,
+[
+ _jm_STRFTIME_PREREQS
+ AC_REPLACE_FUNCS(strftime)
+])