diff options
author | Jim Meyering <jim@meyering.net> | 1996-12-21 01:50:50 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 1996-12-21 01:50:50 +0000 |
commit | 5fc47138b1f01f5ec8d449585bd19abea4da7960 (patch) | |
tree | 9c61a5687ee886cac714ed21614b3aa44fcb656a /m4/strftime.m4 | |
parent | 4a2b289e7c27da90ba0ae5300d13eb72a048c51f (diff) | |
download | coreutils-5fc47138b1f01f5ec8d449585bd19abea4da7960.tar.xz |
broken out of ../acinclude.m4
Diffstat (limited to 'm4/strftime.m4')
-rw-r--r-- | m4/strftime.m4 | 125 |
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 +]) |