| 1 | # serial 29
|
|---|
| 2 |
|
|---|
| 3 | # Copyright (C) 2001-2003, 2005, 2007, 2009-2021 Free Software Foundation, Inc.
|
|---|
| 4 | # This file is free software; the Free Software Foundation
|
|---|
| 5 | # gives unlimited permission to copy and/or distribute it,
|
|---|
| 6 | # with or without modifications, as long as this notice is preserved.
|
|---|
| 7 |
|
|---|
| 8 | dnl From Jim Meyering.
|
|---|
| 9 |
|
|---|
| 10 | AC_DEFUN([gl_FUNC_GETTIMEOFDAY],
|
|---|
| 11 | [
|
|---|
| 12 | AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS])
|
|---|
| 13 | AC_REQUIRE([AC_C_RESTRICT])
|
|---|
| 14 | AC_REQUIRE([AC_CANONICAL_HOST])
|
|---|
| 15 | AC_REQUIRE([gl_SYS_TIME_H])
|
|---|
| 16 | AC_CHECK_FUNCS_ONCE([gettimeofday])
|
|---|
| 17 |
|
|---|
| 18 | gl_gettimeofday_timezone=void
|
|---|
| 19 | if test $ac_cv_func_gettimeofday != yes; then
|
|---|
| 20 | HAVE_GETTIMEOFDAY=0
|
|---|
| 21 | else
|
|---|
| 22 | AC_CACHE_CHECK([for gettimeofday with POSIX signature],
|
|---|
| 23 | [gl_cv_func_gettimeofday_posix_signature],
|
|---|
| 24 | [AC_COMPILE_IFELSE(
|
|---|
| 25 | [AC_LANG_PROGRAM(
|
|---|
| 26 | [[#include <sys/time.h>
|
|---|
| 27 | struct timeval c;
|
|---|
| 28 | int gettimeofday (struct timeval *restrict, void *restrict);
|
|---|
| 29 | ]],
|
|---|
| 30 | [[/* glibc uses struct timezone * rather than the POSIX void *
|
|---|
| 31 | if _GNU_SOURCE is defined. However, since the only portable
|
|---|
| 32 | use of gettimeofday uses NULL as the second parameter, and
|
|---|
| 33 | since the glibc definition is actually more typesafe, it is
|
|---|
| 34 | not worth wrapping this to get a compliant signature. */
|
|---|
| 35 | int (*f) (struct timeval *restrict, void *restrict)
|
|---|
| 36 | = gettimeofday;
|
|---|
| 37 | int x = f (&c, 0);
|
|---|
| 38 | return !(x | c.tv_sec | c.tv_usec);
|
|---|
| 39 | ]])],
|
|---|
| 40 | [gl_cv_func_gettimeofday_posix_signature=yes],
|
|---|
| 41 | [AC_COMPILE_IFELSE(
|
|---|
| 42 | [AC_LANG_PROGRAM(
|
|---|
| 43 | [[#include <sys/time.h>
|
|---|
| 44 | int gettimeofday (struct timeval *restrict, struct timezone *restrict);
|
|---|
| 45 | ]])],
|
|---|
| 46 | [gl_cv_func_gettimeofday_posix_signature=almost],
|
|---|
| 47 | [gl_cv_func_gettimeofday_posix_signature=no])])])
|
|---|
| 48 | if test $gl_cv_func_gettimeofday_posix_signature = almost; then
|
|---|
| 49 | gl_gettimeofday_timezone='struct timezone'
|
|---|
| 50 | elif test $gl_cv_func_gettimeofday_posix_signature != yes; then
|
|---|
| 51 | REPLACE_GETTIMEOFDAY=1
|
|---|
| 52 | fi
|
|---|
| 53 | dnl If we override 'struct timeval', we also have to override gettimeofday.
|
|---|
| 54 | if test $REPLACE_STRUCT_TIMEVAL = 1; then
|
|---|
| 55 | REPLACE_GETTIMEOFDAY=1
|
|---|
| 56 | fi
|
|---|
| 57 | dnl On mingw, the original gettimeofday has only a precision of 15.6
|
|---|
| 58 | dnl milliseconds. So override it.
|
|---|
| 59 | case "$host_os" in
|
|---|
| 60 | mingw*) REPLACE_GETTIMEOFDAY=1 ;;
|
|---|
| 61 | esac
|
|---|
| 62 | fi
|
|---|
| 63 | AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone],
|
|---|
| 64 | [Define this to 'void' or 'struct timezone' to match the system's
|
|---|
| 65 | declaration of the second argument to gettimeofday.])
|
|---|
| 66 | ])
|
|---|
| 67 |
|
|---|
| 68 | # Prerequisites of lib/gettimeofday.c.
|
|---|
| 69 | AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [:])
|
|---|