diff options
author | Yang Tse <yangsita@gmail.com> | 2008-06-29 03:19:20 +0000 |
---|---|---|
committer | Yang Tse <yangsita@gmail.com> | 2008-06-29 03:19:20 +0000 |
commit | 1058e5fdde288fdffaabc3431b228c9e61b4d189 (patch) | |
tree | 82b6a5fb130ab1282cca5f5e503e1c49ac2197f5 /acinclude.m4 | |
parent | 6929d9355f2b5dc039d60300ff8eb7504a1cf2c2 (diff) | |
download | curl-1058e5fdde288fdffaabc3431b228c9e61b4d189.tar.gz |
John Lightsey filed bug report #1999181: "CLOCK_MONOTONIC always fails on
some systems" (http://curl.haxx.se/bug/view.cgi?id=1999181). The problem was
that the configure script did not use the _POSIX_MONOTONIC_CLOCK feature test
macro when checking monotonic clock availability. This is now fixed and the
monotonic clock will not be used unless the feature test macro is defined
with a value greater than zero indicating always supported.
Diffstat (limited to 'acinclude.m4')
-rw-r--r-- | acinclude.m4 | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/acinclude.m4 b/acinclude.m4 index b72604ab7..b672367aa 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -1979,13 +1979,16 @@ dnl Check if monotonic clock_gettime is available. AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [ AC_REQUIRE([AC_HEADER_TIME])dnl - AC_CHECK_HEADERS(sys/types.h sys/time.h time.h) + AC_CHECK_HEADERS(sys/types.h unistd.h sys/time.h time.h) AC_MSG_CHECKING([for monotonic clock_gettime]) AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #ifdef HAVE_SYS_TYPES_H #include <sys/types.h> #endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif #ifdef HAVE_SYS_TIME_H #include <sys/time.h> #ifdef TIME_WITH_SYS_TIME @@ -1997,8 +2000,14 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [ #endif #endif ]],[[ +#if defined(_POSIX_MONOTONIC_CLOCK) && (_POSIX_MONOTONIC_CLOCK > 0) + dnl The monotonic clock will not be used unless the feature test macro is + dnl defined with a value greater than zero indicating _always_ supported. struct timespec ts; (void)clock_gettime(CLOCK_MONOTONIC, &ts); +#else + HAVE_CLOCK_GETTIME_MONOTONIC shall not be defined. +#endif ]]) ],[ AC_MSG_RESULT([yes]) @@ -2039,6 +2048,9 @@ AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [ #ifdef HAVE_SYS_TYPES_H #include <sys/types.h> #endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif #ifdef HAVE_SYS_TIME_H #include <sys/time.h> #ifdef TIME_WITH_SYS_TIME @@ -2082,6 +2094,46 @@ AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [ ;; esac # + dnl only do runtime verification when not cross-compiling + if test "x$cross_compiling" != "xyes" && + test "$ac_cv_func_clock_gettime" = "yes"; then + AC_MSG_CHECKING([if monotonic clock_gettime works]) + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +#ifdef HAVE_SYS_TIME_H +#include <sys/time.h> +#ifdef TIME_WITH_SYS_TIME +#include <time.h> +#endif +#else +#ifdef HAVE_TIME_H +#include <time.h> +#endif +#endif + ]],[[ +#if defined(_POSIX_MONOTONIC_CLOCK) && (_POSIX_MONOTONIC_CLOCK > 0) + struct timespec ts; + if (0 == clock_gettime(CLOCK_MONOTONIC, &ts)) + exit(0); +#endif + exit(1); + ]]) + ],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined]) + ac_cv_func_clock_gettime="no" + LIBS="$curl_cv_save_LIBS" + ]) + fi + # case "$ac_cv_func_clock_gettime" in yes) AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1, |