# gethrxtime.m4 serial 12
dnl Copyright (C) 2005-2006, 2008-2019 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.

dnl Written by Paul Eggert.

AC_DEFUN([gl_GETHRXTIME],
[
  AC_REQUIRE([gl_ARITHMETIC_HRTIME_T])
  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
  AC_REQUIRE([gl_XTIME])
  AC_CHECK_DECLS([gethrtime], [], [], [[#include <time.h>]])
  LIB_GETHRXTIME=
  if test $ac_cv_have_decl_gethrtime = no \
     || test $gl_cv_arithmetic_hrtime_t = no; then
    dnl Find libraries needed to link lib/gethrxtime.c.
    AC_REQUIRE([gl_CLOCK_TIME])
    AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
    AC_CHECK_FUNCS_ONCE([microuptime nanouptime])
    if test $ac_cv_func_nanouptime != yes \
       && { test $ac_cv_have_decl_gethrtime = no \
            || test $gl_cv_arithmetic_hrtime_t = no; }; then
      AC_CACHE_CHECK([whether CLOCK_MONOTONIC or CLOCK_REALTIME is defined],
        [gl_cv_have_clock_gettime_macro],
        [AC_EGREP_CPP([have_clock_gettime_macro],
          [
#          include <time.h>
#          if defined CLOCK_MONOTONIC || defined CLOCK_REALTIME
            have_clock_gettime_macro
#          endif
          ],
          [gl_cv_have_clock_gettime_macro=yes],
          [gl_cv_have_clock_gettime_macro=no])])
      if test $gl_cv_have_clock_gettime_macro = yes; then
        LIB_GETHRXTIME=$LIB_CLOCK_GETTIME
      fi
    fi
  fi
  AC_SUBST([LIB_GETHRXTIME])
])

# Test whether hrtime_t is an arithmetic type.
# It is not arithmetic in older Solaris c89 (which insists on
# not having a long long int type).
AC_DEFUN([gl_ARITHMETIC_HRTIME_T],
[
  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
  AC_CACHE_CHECK([for arithmetic hrtime_t], [gl_cv_arithmetic_hrtime_t],
    [AC_COMPILE_IFELSE(
       [AC_LANG_PROGRAM([[#include <time.h>]],
          [[hrtime_t x = 0; return x/x;]])],
       [gl_cv_arithmetic_hrtime_t=yes],
       [gl_cv_arithmetic_hrtime_t=no])])
  if test $gl_cv_arithmetic_hrtime_t = yes; then
    AC_DEFINE([HAVE_ARITHMETIC_HRTIME_T], [1],
      [Define if you have an arithmetic hrtime_t type.])
  fi
])

# Prerequisites of lib/xtime.h.
AC_DEFUN([gl_XTIME],
[
  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
  :
])
