summaryrefslogtreecommitdiff
path: root/m4/strftime.m4
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>1996-12-21 01:50:50 +0000
committerJim Meyering <jim@meyering.net>1996-12-21 01:50:50 +0000
commit5fc47138b1f01f5ec8d449585bd19abea4da7960 (patch)
tree9c61a5687ee886cac714ed21614b3aa44fcb656a /m4/strftime.m4
parent4a2b289e7c27da90ba0ae5300d13eb72a048c51f (diff)
downloadcoreutils-5fc47138b1f01f5ec8d449585bd19abea4da7960.tar.xz
broken out of ../acinclude.m4
Diffstat (limited to 'm4/strftime.m4')
-rw-r--r--m4/strftime.m4125
1 files changed, 125 insertions, 0 deletions
diff --git a/m4/strftime.m4 b/m4/strftime.m4
new file mode 100644
index 000000000..8b40a69b6
--- /dev/null
+++ b/m4/strftime.m4
@@ -0,0 +1,125 @@
+#serial 2
+
+dnl From Jim Meyering.
+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
+AC_DEFUN(jm_FUNC_GNU_STRFTIME,
+[AC_REQUIRE([AC_HEADER_TIME])dnl
+ AC_REQUIRE([AC_C_CONST])dnl
+ AC_REQUIRE([AC_HEADER_STDC])dnl
+ AC_CHECK_HEADERS(sys/time.h)
+ AC_CACHE_CHECK([for working GNU strftime], jm_cv_func_working_gnu_strftime,
+ [AC_TRY_RUN(
+changequote(<<, >>)dnl
+<< /* Ulrich Drepper provided parts of the test program. */
+#if STDC_HEADERS
+# include <stdlib.h>
+#endif
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+static int
+compare (const char *fmt, const struct tm *tm, const char *expected)
+{
+ char buf[99];
+ strftime (buf, 99, fmt, tm);
+ if (strcmp (buf, expected))
+ {
+#ifdef SHOW_FAILURES
+ printf ("fmt: \"%s\", expected \"%s\", got \"%s\"\n",
+ fmt, expected, buf);
+#endif
+ return 1;
+ }
+ return 0;
+}
+
+int
+main ()
+{
+ int n_fail = 0;
+ struct tm *tm;
+ time_t t = 738367; /* Fri Jan 9 13:06:07 1970 */
+ tm = gmtime (&t);
+
+ /* This is necessary to make strftime give consistent zone strings and
+ e.g., seconds since the epoch (%s). */
+ putenv ("TZ=GMT");
+
+#undef CMP
+#define CMP(Fmt, Expected) n_fail += compare ((Fmt), tm, (Expected))
+
+ CMP ("%-m", "1"); /* GNU */
+ CMP ("%A", "Friday");
+ CMP ("%^A", "FRIDAY"); /* The ^ is a GNU extension. */
+ CMP ("%B", "January");
+ CMP ("%^B", "JANUARY");
+ CMP ("%C", "19"); /* POSIX.2 */
+ CMP ("%D", "01/09/70"); /* POSIX.2 */
+ CMP ("%G", "1970"); /* GNU */
+ CMP ("%H", "13");
+ CMP ("%I", "01");
+ CMP ("%M", "06");
+ CMP ("%M", "06");
+ CMP ("%R", "13:06"); /* POSIX.2 */
+ CMP ("%S", "07");
+ CMP ("%T", "13:06:07"); /* POSIX.2 */
+ CMP ("%U", "01");
+ CMP ("%V", "02");
+ CMP ("%W", "01");
+ CMP ("%X", "13:06:07");
+ CMP ("%Y", "1970");
+ CMP ("%Z", "GMT");
+ CMP ("%_m", " 1"); /* GNU */
+ CMP ("%a", "Fri");
+ CMP ("%^a", "FRI");
+ CMP ("%b", "Jan");
+ CMP ("%^b", "JAN");
+ CMP ("%c", "Fri Jan 9 13:06:07 1970");
+ CMP ("%^c", "FRI JAN 9 13:06:07 1970");
+ CMP ("%d", "09");
+ CMP ("%e", " 9"); /* POSIX.2 */
+ CMP ("%g", "70"); /* GNU */
+ CMP ("%h", "Jan"); /* POSIX.2 */
+ CMP ("%^h", "JAN");
+ CMP ("%j", "009");
+ CMP ("%k", "13"); /* GNU */
+ CMP ("%l", " 1"); /* GNU */
+ CMP ("%m", "01");
+ CMP ("%n", "\n"); /* POSIX.2 */
+ CMP ("%p", "PM");
+ CMP ("%r", "01:06:07 PM"); /* POSIX.2 */
+ CMP ("%s", "738367"); /* GNU */
+ CMP ("%t", "\t"); /* POSIX.2 */
+ CMP ("%u", "5"); /* POSIX.2 */
+ CMP ("%w", "5");
+ CMP ("%x", "01/09/70");
+ CMP ("%y", "70");
+ CMP ("%z", "+0000"); /* GNU */
+
+ exit (n_fail ? 1 : 0);
+}
+ >>,
+changequote([, ])dnl
+ jm_cv_func_working_gnu_strftime=yes,
+ jm_cv_func_working_gnu_strftime=no,
+ dnl When crosscompiling, assume strftime is missing or broken.
+ jm_cv_func_working_gnu_strftime=no)
+ ])
+ if test $jm_cv_func_working_gnu_strftime = no; then
+ LIBOBJS="$LIBOBJS strftime.o"
+ AC_DEFINE_UNQUOTED(strftime, gnu_strftime)
+ fi
+])