1# Configure a replacement for <sys/time.h>. 2# serial 8 3 4# Copyright (C) 2007, 2009-2014 Free Software Foundation, Inc. 5# This file is free software; the Free Software Foundation 6# gives unlimited permission to copy and/or distribute it, 7# with or without modifications, as long as this notice is preserved. 8 9# Written by Paul Eggert and Martin Lambers. 10 11AC_DEFUN([gl_HEADER_SYS_TIME_H], 12[ 13 dnl Use AC_REQUIRE here, so that the REPLACE_GETTIMEOFDAY=0 statement 14 dnl below is expanded once only, before all REPLACE_GETTIMEOFDAY=1 15 dnl statements that occur in other macros. 16 AC_REQUIRE([gl_HEADER_SYS_TIME_H_BODY]) 17]) 18 19AC_DEFUN([gl_HEADER_SYS_TIME_H_BODY], 20[ 21 AC_REQUIRE([AC_C_RESTRICT]) 22 AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) 23 AC_CHECK_HEADERS_ONCE([sys/time.h]) 24 gl_CHECK_NEXT_HEADERS([sys/time.h]) 25 26 if test $ac_cv_header_sys_time_h != yes; then 27 HAVE_SYS_TIME_H=0 28 fi 29 30 dnl On native Windows with MSVC, 'struct timeval' is defined in <winsock2.h> 31 dnl only. So include that header in the list. 32 gl_PREREQ_SYS_H_WINSOCK2 33 AC_CACHE_CHECK([for struct timeval], [gl_cv_sys_struct_timeval], 34 [AC_COMPILE_IFELSE( 35 [AC_LANG_PROGRAM( 36 [[#if HAVE_SYS_TIME_H 37 #include <sys/time.h> 38 #endif 39 #include <time.h> 40 #if HAVE_WINSOCK2_H 41 # include <winsock2.h> 42 #endif 43 ]], 44 [[static struct timeval x; x.tv_sec = x.tv_usec;]])], 45 [gl_cv_sys_struct_timeval=yes], 46 [gl_cv_sys_struct_timeval=no]) 47 ]) 48 if test $gl_cv_sys_struct_timeval != yes; then 49 HAVE_STRUCT_TIMEVAL=0 50 else 51 dnl On native Windows with a 64-bit 'time_t', 'struct timeval' is defined 52 dnl (in <sys/time.h> and <winsock2.h> for mingw64, in <winsock2.h> only 53 dnl for MSVC) with a tv_sec field of type 'long' (32-bit!), which is 54 dnl smaller than the 'time_t' type mandated by POSIX. 55 dnl On OpenBSD 5.1 amd64, tv_sec is 64 bits and time_t 32 bits, but 56 dnl that is good enough. 57 AC_CACHE_CHECK([for wide-enough struct timeval.tv_sec member], 58 [gl_cv_sys_struct_timeval_tv_sec], 59 [AC_COMPILE_IFELSE( 60 [AC_LANG_PROGRAM( 61 [[#if HAVE_SYS_TIME_H 62 #include <sys/time.h> 63 #endif 64 #include <time.h> 65 #if HAVE_WINSOCK2_H 66 # include <winsock2.h> 67 #endif 68 ]], 69 [[static struct timeval x; 70 typedef int verify_tv_sec_type[ 71 sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1 72 ]; 73 ]])], 74 [gl_cv_sys_struct_timeval_tv_sec=yes], 75 [gl_cv_sys_struct_timeval_tv_sec=no]) 76 ]) 77 if test $gl_cv_sys_struct_timeval_tv_sec != yes; then 78 REPLACE_STRUCT_TIMEVAL=1 79 fi 80 fi 81 82 dnl Check for declarations of anything we want to poison if the 83 dnl corresponding gnulib module is not in use. 84 gl_WARN_ON_USE_PREPARE([[ 85#if HAVE_SYS_TIME_H 86# include <sys/time.h> 87#endif 88#include <time.h> 89 ]], [gettimeofday]) 90]) 91 92AC_DEFUN([gl_SYS_TIME_MODULE_INDICATOR], 93[ 94 dnl Use AC_REQUIRE here, so that the default settings are expanded once only. 95 AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) 96 gl_MODULE_INDICATOR_SET_VARIABLE([$1]) 97 dnl Define it also as a C macro, for the benefit of the unit tests. 98 gl_MODULE_INDICATOR_FOR_TESTS([$1]) 99]) 100 101AC_DEFUN([gl_HEADER_SYS_TIME_H_DEFAULTS], 102[ 103 GNULIB_GETTIMEOFDAY=0; AC_SUBST([GNULIB_GETTIMEOFDAY]) 104 dnl Assume POSIX behavior unless another module says otherwise. 105 HAVE_GETTIMEOFDAY=1; AC_SUBST([HAVE_GETTIMEOFDAY]) 106 HAVE_STRUCT_TIMEVAL=1; AC_SUBST([HAVE_STRUCT_TIMEVAL]) 107 HAVE_SYS_TIME_H=1; AC_SUBST([HAVE_SYS_TIME_H]) 108 REPLACE_GETTIMEOFDAY=0; AC_SUBST([REPLACE_GETTIMEOFDAY]) 109 REPLACE_STRUCT_TIMEVAL=0; AC_SUBST([REPLACE_STRUCT_TIMEVAL]) 110]) 111