X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Fgettimeofday.m4;h=770434ad90c171c4abbe359458c99f0999bec571;hb=2354d5ead305b61c925e53bcfb73d47de7c53162;hp=3e2baa1ea8c0c2465b8f35b145e7d590b4dd09c8;hpb=e3690a35bd90920179297ce0939230f786cdc475;p=gnulib.git diff --git a/m4/gettimeofday.m4 b/m4/gettimeofday.m4 index 3e2baa1ea..770434ad9 100644 --- a/m4/gettimeofday.m4 +++ b/m4/gettimeofday.m4 @@ -1,67 +1,101 @@ -#serial 1 +#serial 11 + +# Copyright (C) 2001, 2002, 2003, 2005, 2007 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. -dnl + +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 + 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 + GETTIMEOFDAY_REPLACEMENT=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 it's return value. The gettimeofday function from Mac OS X 10.0.4, -dnl i.e. Darwin 1.3.7 has this problem. +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 only via the wrapper -dnl function that works around the problem. +dnl If it does, then arrange to use gettimeofday and localtime only via +dnl the wrapper functions that work around the problem. -AC_DEFUN([AC_FUNC_GETTIMEOFDAY_CLOBBER], +AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER], [ - AC_REQUIRE([AC_HEADER_TIME]) - AC_CHECK_HEADERS(string.h stdlib.h) - AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer], - jm_cv_func_gettimeofday_clobber, - [AC_TRY_RUN([ -#include -#if HAVE_STRING_H -# include -#endif + AC_REQUIRE([gl_HEADER_SYS_TIME_H]) -#if TIME_WITH_SYS_TIME -# include -# include -#else -# if HAVE_SYS_TIME_H -# include -# else -# include -# endif -#endif + AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer], + [gl_cv_func_gettimeofday_clobber], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include + #include + #include + #include + ]], + [[ + 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 HAVE_STDLIB_H -# include -#endif + if test $gl_cv_func_gettimeofday_clobber = yes; then + GETTIMEOFDAY_REPLACEMENT=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 +]) -int -main () -{ - time_t t = 0; - struct tm *lt; - struct tm saved_lt; - struct timeval tv; - lt = localtime (&t); - saved_lt = *lt; - gettimeofday (&tv, NULL); - if (memcmp (lt, &saved_lt, sizeof (struct tm)) != 0) - exit (1); +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.]) +]) - exit (0); -} - ], - jm_cv_func_gettimeofday_clobber=no, - jm_cv_func_gettimeofday_clobber=yes, - dnl When crosscompiling, assume it is broken. - jm_cv_func_gettimeofday_clobber=yes) - ]) - if test $jm_cv_func_gettimeofday_clobber = yes; then - AC_LIBOBJ(gettimeofday) - AC_DEFINE_UNQUOTED(gettimeofday, rpl_gettimeofday, - [Define to rpl_gettimeofday if the replacement function should be used.]) - AC_DEFINE(GETTIMEOFDAY_CLOBBERS_LOCALTIME_BUFFER, 1, - [Define if gettimeofday clobbers localtime's static buffer.]) - fi +# Prerequisites of lib/gettimeofday.c. +AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [ + AC_CHECK_HEADERS([sys/timeb.h]) + AC_CHECK_FUNCS([_ftime]) ])