Commit | Line | Data |
---|---|---|
09607c9e TT |
1 | # Configure a more-standard replacement for <time.h>. |
2 | ||
7a6dbc2f | 3 | # Copyright (C) 2000-2001, 2003-2007, 2009-2018 Free Software Foundation, Inc. |
09607c9e | 4 | |
7a6dbc2f | 5 | # serial 11 |
09607c9e TT |
6 | |
7 | # This file is free software; the Free Software Foundation | |
8 | # gives unlimited permission to copy and/or distribute it, | |
9 | # with or without modifications, as long as this notice is preserved. | |
10 | ||
11 | # Written by Paul Eggert and Jim Meyering. | |
12 | ||
13 | AC_DEFUN([gl_HEADER_TIME_H], | |
14 | [ | |
15 | dnl Use AC_REQUIRE here, so that the default behavior below is expanded | |
16 | dnl once only, before all statements that occur in other macros. | |
17 | AC_REQUIRE([gl_HEADER_TIME_H_BODY]) | |
18 | ]) | |
19 | ||
20 | AC_DEFUN([gl_HEADER_TIME_H_BODY], | |
21 | [ | |
22 | AC_REQUIRE([AC_C_RESTRICT]) | |
23 | AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) | |
24 | gl_NEXT_HEADERS([time.h]) | |
25 | AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) | |
26 | ]) | |
27 | ||
28 | dnl Check whether 'struct timespec' is declared | |
4a626d0a | 29 | dnl in time.h, sys/time.h, pthread.h, or unistd.h. |
09607c9e TT |
30 | |
31 | AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], | |
32 | [ | |
33 | AC_CHECK_HEADERS_ONCE([sys/time.h]) | |
34 | AC_CACHE_CHECK([for struct timespec in <time.h>], | |
35 | [gl_cv_sys_struct_timespec_in_time_h], | |
36 | [AC_COMPILE_IFELSE( | |
37 | [AC_LANG_PROGRAM( | |
38 | [[#include <time.h> | |
39 | ]], | |
40 | [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], | |
41 | [gl_cv_sys_struct_timespec_in_time_h=yes], | |
42 | [gl_cv_sys_struct_timespec_in_time_h=no])]) | |
43 | ||
44 | TIME_H_DEFINES_STRUCT_TIMESPEC=0 | |
45 | SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 | |
46 | PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 | |
4a626d0a | 47 | UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 |
09607c9e TT |
48 | if test $gl_cv_sys_struct_timespec_in_time_h = yes; then |
49 | TIME_H_DEFINES_STRUCT_TIMESPEC=1 | |
50 | else | |
51 | AC_CACHE_CHECK([for struct timespec in <sys/time.h>], | |
52 | [gl_cv_sys_struct_timespec_in_sys_time_h], | |
53 | [AC_COMPILE_IFELSE( | |
54 | [AC_LANG_PROGRAM( | |
55 | [[#include <sys/time.h> | |
56 | ]], | |
57 | [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], | |
58 | [gl_cv_sys_struct_timespec_in_sys_time_h=yes], | |
59 | [gl_cv_sys_struct_timespec_in_sys_time_h=no])]) | |
60 | if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then | |
61 | SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 | |
62 | else | |
63 | AC_CACHE_CHECK([for struct timespec in <pthread.h>], | |
64 | [gl_cv_sys_struct_timespec_in_pthread_h], | |
65 | [AC_COMPILE_IFELSE( | |
66 | [AC_LANG_PROGRAM( | |
67 | [[#include <pthread.h> | |
68 | ]], | |
69 | [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], | |
70 | [gl_cv_sys_struct_timespec_in_pthread_h=yes], | |
71 | [gl_cv_sys_struct_timespec_in_pthread_h=no])]) | |
72 | if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then | |
73 | PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 | |
4a626d0a PA |
74 | else |
75 | AC_CACHE_CHECK([for struct timespec in <unistd.h>], | |
76 | [gl_cv_sys_struct_timespec_in_unistd_h], | |
77 | [AC_COMPILE_IFELSE( | |
78 | [AC_LANG_PROGRAM( | |
79 | [[#include <unistd.h> | |
80 | ]], | |
81 | [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], | |
82 | [gl_cv_sys_struct_timespec_in_unistd_h=yes], | |
83 | [gl_cv_sys_struct_timespec_in_unistd_h=no])]) | |
84 | if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then | |
85 | UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 | |
86 | fi | |
09607c9e TT |
87 | fi |
88 | fi | |
89 | fi | |
90 | AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC]) | |
91 | AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC]) | |
92 | AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC]) | |
4a626d0a | 93 | AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC]) |
09607c9e TT |
94 | ]) |
95 | ||
96 | AC_DEFUN([gl_TIME_MODULE_INDICATOR], | |
97 | [ | |
98 | dnl Use AC_REQUIRE here, so that the default settings are expanded once only. | |
99 | AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) | |
100 | gl_MODULE_INDICATOR_SET_VARIABLE([$1]) | |
101 | dnl Define it also as a C macro, for the benefit of the unit tests. | |
102 | gl_MODULE_INDICATOR_FOR_TESTS([$1]) | |
103 | ]) | |
104 | ||
105 | AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS], | |
106 | [ | |
7a6dbc2f | 107 | GNULIB_CTIME=0; AC_SUBST([GNULIB_CTIME]) |
09607c9e | 108 | GNULIB_MKTIME=0; AC_SUBST([GNULIB_MKTIME]) |
7a6dbc2f | 109 | GNULIB_LOCALTIME=0; AC_SUBST([GNULIB_LOCALTIME]) |
09607c9e | 110 | GNULIB_NANOSLEEP=0; AC_SUBST([GNULIB_NANOSLEEP]) |
7a6dbc2f | 111 | GNULIB_STRFTIME=0; AC_SUBST([GNULIB_STRFTIME]) |
09607c9e TT |
112 | GNULIB_STRPTIME=0; AC_SUBST([GNULIB_STRPTIME]) |
113 | GNULIB_TIMEGM=0; AC_SUBST([GNULIB_TIMEGM]) | |
114 | GNULIB_TIME_R=0; AC_SUBST([GNULIB_TIME_R]) | |
4a626d0a | 115 | GNULIB_TIME_RZ=0; AC_SUBST([GNULIB_TIME_RZ]) |
7a6dbc2f | 116 | GNULIB_TZSET=0; AC_SUBST([GNULIB_TZSET]) |
09607c9e TT |
117 | dnl Assume proper GNU behavior unless another module says otherwise. |
118 | HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R]) | |
119 | HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP]) | |
120 | HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME]) | |
121 | HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM]) | |
7a6dbc2f SDJ |
122 | HAVE_TZSET=1; AC_SUBST([HAVE_TZSET]) |
123 | dnl Even GNU libc does not have timezone_t yet. | |
124 | HAVE_TIMEZONE_T=0; AC_SUBST([HAVE_TIMEZONE_T]) | |
09607c9e TT |
125 | dnl If another module says to replace or to not replace, do that. |
126 | dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK; | |
127 | dnl this lets maintainers check for portability. | |
7a6dbc2f | 128 | REPLACE_CTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_CTIME]) |
09607c9e TT |
129 | REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; AC_SUBST([REPLACE_LOCALTIME_R]) |
130 | REPLACE_MKTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_MKTIME]) | |
131 | REPLACE_NANOSLEEP=GNULIB_PORTCHECK; AC_SUBST([REPLACE_NANOSLEEP]) | |
7a6dbc2f | 132 | REPLACE_STRFTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_STRFTIME]) |
09607c9e | 133 | REPLACE_TIMEGM=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMEGM]) |
7a6dbc2f | 134 | REPLACE_TZSET=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TZSET]) |
4a626d0a PA |
135 | |
136 | dnl Hack so that the time module doesn't depend on the sys_time module. | |
137 | dnl First, default GNULIB_GETTIMEOFDAY to 0 if sys_time is absent. | |
138 | : ${GNULIB_GETTIMEOFDAY=0}; AC_SUBST([GNULIB_GETTIMEOFDAY]) | |
139 | dnl Second, it's OK to not use GNULIB_PORTCHECK for REPLACE_GMTIME | |
140 | dnl and REPLACE_LOCALTIME, as portability to Solaris 2.6 and earlier | |
141 | dnl is no longer a big deal. | |
142 | REPLACE_GMTIME=0; AC_SUBST([REPLACE_GMTIME]) | |
143 | REPLACE_LOCALTIME=0; AC_SUBST([REPLACE_LOCALTIME]) | |
09607c9e | 144 | ]) |