configure: Cache result of pthread_condattr_setclock() check
authorTobias Brunner <tobias@strongswan.org>
Thu, 16 Jun 2016 15:57:37 +0000 (17:57 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 17 Jun 2016 09:36:48 +0000 (11:36 +0200)
Even if not using caching when running the configure script (-C) this
allows pre-defining the result by setting the environment variable
ss_cv_func_pthread_condattr_setclock_monotonic=yes|no|unknown
before/while running the script.

As the check requires running a test program this might be helpful
when cross-compiling to disable using monotonic time if
pthread_condattr_setclock() is defined but not actually usable with
CLOCK_MONOTONIC.

References #1502.

configure.ac

index 3c6132e..35f069a 100644 (file)
@@ -512,24 +512,28 @@ AC_COMPILE_IFELSE(
 # check if pthread_condattr_setclock(CLOCK_MONOTONIC) is supported
 saved_LIBS=$LIBS
 LIBS=$PTHREADLIB
-AC_MSG_CHECKING([for pthread_condattr_setclock(CLOCK_MONOTONIC)])
-AC_RUN_IFELSE(
-       [AC_LANG_SOURCE(
-               [[#include <pthread.h>
-                 int main() { pthread_condattr_t attr;
-                       pthread_condattr_init(&attr);
-                       return pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);}]])],
-       [AC_MSG_RESULT([yes]);
-        AC_DEFINE([HAVE_CONDATTR_CLOCK_MONOTONIC], [],
-                          [pthread_condattr_setclock supports CLOCK_MONOTONIC])],
-       [AC_MSG_RESULT([no])],
-       # Check existence of pthread_condattr_setclock if cross-compiling
-       [AC_MSG_RESULT([unknown]);
-        AC_CHECK_FUNCS(pthread_condattr_setclock,
-               [AC_DEFINE([HAVE_CONDATTR_CLOCK_MONOTONIC], [],
-                                  [have pthread_condattr_setclock()])]
-       )]
-)
+AC_CACHE_CHECK([for pthread_condattr_setclock(CLOCK_MONOTONIC)],
+       [ss_cv_func_pthread_condattr_setclock_monotonic],
+       [AC_RUN_IFELSE(
+               [AC_LANG_SOURCE(
+                       [[#include <pthread.h>
+                         int main() { pthread_condattr_t attr;
+                               pthread_condattr_init(&attr);
+                               return pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);}]])],
+               [ss_cv_func_pthread_condattr_setclock_monotonic=yes],
+               [ss_cv_func_pthread_condattr_setclock_monotonic=no],
+               # Check existence of pthread_condattr_setclock if cross-compiling
+               [AC_CHECK_FUNCS(pthread_condattr_setclock,
+                       ss_cv_func_pthread_condattr_setclock_monotonic=unknown)]
+       )])
+if test x$ss_cv_func_pthread_condattr_setclock_monotonic = xyes; then
+       AC_DEFINE([HAVE_CONDATTR_CLOCK_MONOTONIC], [],
+                         [pthread_condattr_setclock supports CLOCK_MONOTONIC])
+elif test x$ss_cv_func_pthread_condattr_setclock_monotonic = xunknown; then
+       AC_DEFINE([HAVE_CONDATTR_CLOCK_MONOTONIC], [],
+                         [have pthread_condattr_setclock()])
+fi
+
 # check if we actually are able to configure attributes on cond vars
 AC_CHECK_FUNCS(pthread_condattr_init)
 # instead of pthread_condattr_setclock Android has this function