c0fcf198bd60d5f1f2ccf1b170878dbdec8b6741
[gnulib.git] / m4 / mktime.m4
1 dnl From Jim Meyering.
2 dnl FIXME: this should migrate into libit.
3
4 AC_DEFUN(AM_FUNC_MKTIME,
5 [AC_REQUIRE([AC_HEADER_TIME])dnl
6  AC_CHECK_HEADERS(sys/time.h)
7  AC_CACHE_CHECK([for working mktime], am_cv_func_working_mktime,
8   [AC_TRY_RUN([/* Test program from Paul Eggert (eggert@twinsun.com)
9    and Tony Leneis (tony@plaza.ds.adp.com).  */
10 #if TIME_WITH_SYS_TIME
11 # include <sys/time.h>
12 # include <time.h>
13 #else
14 # if HAVE_SYS_TIME_H
15 #  include <sys/time.h>
16 # else
17 #  include <time.h>
18 # endif
19 #endif
20
21 static time_t time_t_max;
22
23 static void
24 mktime_test (now)
25      time_t now;
26 {
27   if (mktime (localtime (&now)) != now)
28     exit (1);
29   now = time_t_max - now;
30   if (mktime (localtime (&now)) != now)
31     exit (1);
32 }
33
34 int
35 main ()
36 {
37   time_t t, delta;
38   for (time_t_max = 1; 0 < time_t_max; time_t_max *= 2)
39     continue;
40   time_t_max--;
41   delta = time_t_max / 997; /* a suitable prime number */
42   for (t = 0; t <= time_t_max - delta; t += delta)
43     mktime_test (t);
44   mktime_test ((time_t) 60 * 60);
45   mktime_test ((time_t) 60 * 60 * 24);
46   exit (0);
47 }
48               ],
49              am_cv_func_working_mktime=yes, am_cv_func_working_mktime=no,
50              dnl When crosscompiling, assume mktime is missing or broken.
51              am_cv_func_working_mktime=no)
52   ])
53   if test $am_cv_func_working_mktime = no; then
54     LIBOBJS="$LIBOBJS mktime.o"
55   fi
56 ])