| # serial 12 |
| |
| # Copyright (C) 2001-2003, 2005, 2007, 2009 Free Software Foundation, Inc. |
| # This file is free software; the Free Software Foundation |
| # gives unlimited permission to copy and/or distribute it, |
| # with or without modifications, as long as this notice is preserved. |
| |
| dnl From Jim Meyering. |
| |
| AC_DEFUN([gl_FUNC_GETTIMEOFDAY], |
| [ |
| AC_REQUIRE([AC_C_RESTRICT]) |
| AC_REQUIRE([gl_HEADER_SYS_TIME_H]) |
| AC_CHECK_FUNCS_ONCE([gettimeofday]) |
| |
| AC_CACHE_CHECK([for gettimeofday with POSIX signature], |
| [gl_cv_func_gettimeofday_posix_signature], |
| [AC_COMPILE_IFELSE( |
| [AC_LANG_PROGRAM( |
| [[#include <sys/time.h> |
| struct timeval c; |
| ]], |
| [[ |
| int (*f) (struct timeval *restrict, void *restrict) = gettimeofday; |
| int x = f (&c, 0); |
| return !(x | c.tv_sec | c.tv_usec); |
| ]])], |
| [gl_cv_func_gettimeofday_posix_signature=yes], |
| [gl_cv_func_gettimeofday_posix_signature=no])]) |
| |
| gl_FUNC_GETTIMEOFDAY_CLOBBER |
| |
| if test $gl_cv_func_gettimeofday_posix_signature != yes; then |
| REPLACE_GETTIMEOFDAY=1 |
| SYS_TIME_H=sys/time.h |
| if test $gl_cv_func_gettimeofday_clobber != yes; then |
| AC_LIBOBJ([gettimeofday]) |
| gl_PREREQ_GETTIMEOFDAY |
| fi |
| fi |
| ]) |
| |
| |
| dnl See if gettimeofday clobbers the static buffer that localtime uses |
| dnl for its return value. The gettimeofday function from Mac OS X 10.0.4 |
| dnl (i.e., Darwin 1.3.7) has this problem. |
| dnl |
| dnl If it does, then arrange to use gettimeofday and localtime only via |
| dnl the wrapper functions that work around the problem. |
| |
| AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER], |
| [ |
| AC_REQUIRE([gl_HEADER_SYS_TIME_H]) |
| |
| AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer], |
| [gl_cv_func_gettimeofday_clobber], |
| [AC_RUN_IFELSE( |
| [AC_LANG_PROGRAM( |
| [[#include <string.h> |
| #include <sys/time.h> |
| #include <time.h> |
| #include <stdlib.h> |
| ]], |
| [[ |
| time_t t = 0; |
| struct tm *lt; |
| struct tm saved_lt; |
| struct timeval tv; |
| lt = localtime (&t); |
| saved_lt = *lt; |
| gettimeofday (&tv, NULL); |
| return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0; |
| ]])], |
| [gl_cv_func_gettimeofday_clobber=no], |
| [gl_cv_func_gettimeofday_clobber=yes], |
| dnl When crosscompiling, assume it is broken. |
| [gl_cv_func_gettimeofday_clobber=yes])]) |
| |
| if test $gl_cv_func_gettimeofday_clobber = yes; then |
| REPLACE_GETTIMEOFDAY=1 |
| SYS_TIME_H=sys/time.h |
| gl_GETTIMEOFDAY_REPLACE_LOCALTIME |
| AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], [1], |
| [Define if gettimeofday clobbers the localtime buffer.]) |
| fi |
| ]) |
| |
| AC_DEFUN([gl_GETTIMEOFDAY_REPLACE_LOCALTIME], [ |
| AC_LIBOBJ([gettimeofday]) |
| gl_PREREQ_GETTIMEOFDAY |
| AC_DEFINE([gmtime], [rpl_gmtime], |
| [Define to rpl_gmtime if the replacement function should be used.]) |
| AC_DEFINE([localtime], [rpl_localtime], |
| [Define to rpl_localtime if the replacement function should be used.]) |
| ]) |
| |
| # Prerequisites of lib/gettimeofday.c. |
| AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [ |
| AC_CHECK_HEADERS([sys/timeb.h]) |
| AC_CHECK_FUNCS([_ftime]) |
| ]) |