[libvirt] [PATCH 2/2] tests: fix eventtest build on macOS

Roman Bogorodskiy bogorodskiy at gmail.com
Sat Nov 19 18:16:20 UTC 2016


macOS doesn't support clock_gettime(2), at least versions prior 10.12
(I didn't actually check 10.12 though). So, use its own routines in
eventtest.

 * configure.ac: check for requires symbols and define
   HAVE_MACH_CLOCK_ROUTINES if found
 * tests/eventtest.c: add clock_get_time() based implementation
 * tests/Makefile.am: don't explicitly LDADD -lrt, use
   $(LIB_CLOCK_GETTIME)
---
 configure.ac      |  9 +++++++++
 tests/Makefile.am |  2 +-
 tests/eventtest.c | 16 ++++++++++++++++
 3 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index 66d88c4..c1b0ca0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2522,6 +2522,15 @@ AC_CHECK_MEMBERS([struct if_data.ifi_oqdrops],
 		 [#include <net/if.h>
 		 ])
 
+AC_CHECK_DECLS([clock_serv_t, host_get_clock_service, clock_get_time],
+               [AC_DEFINE([HAVE_MACH_CLOCK_ROUTINES],
+                          [1],
+                          [whether Mach clock routines are available])],
+               [],
+               [#include <mach/clock.h>
+                #include <mach/mach.h>
+               ])
+
 # Check if we need to look for ifconfig
 if test "$want_ifconfig" = "yes"; then
      AC_PATH_PROG([IFCONFIG_PATH], [ifconfig])
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 924029a..6a24861 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1310,7 +1310,7 @@ endif WITH_DRIVER_MODULES
 if WITH_LIBVIRTD
 eventtest_SOURCES = \
 	eventtest.c testutils.h testutils.c
-eventtest_LDADD = -lrt $(LDADDS)
+eventtest_LDADD = $(LIB_CLOCK_GETTIME) $(LDADDS)
 endif WITH_LIBVIRTD
 
 libshunload_la_SOURCES = shunloadhelper.c
diff --git a/tests/eventtest.c b/tests/eventtest.c
index 011bedc..ed1089e 100644
--- a/tests/eventtest.c
+++ b/tests/eventtest.c
@@ -26,6 +26,11 @@
 #include <signal.h>
 #include <time.h>
 
+#if HAVE_MACH_CLOCK_ROUTINES
+#include <mach/clock.h>
+#include <mach/mach.h>
+#endif
+
 #include "testutils.h"
 #include "internal.h"
 #include "virfile.h"
@@ -262,7 +267,18 @@ finishJob(const char *name, int handle, int timer)
 {
     struct timespec waitTime;
     int rc;
+#if HAVE_MACH_CLOCK_ROUTINES
+    clock_serv_t cclock;
+    mach_timespec_t mts;
+
+    host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
+    clock_get_time(cclock, &mts);
+    mach_port_deallocate(mach_task_self(), cclock);
+    waitTime.tv_sec = mts.tv_sec;
+    waitTime.tv_nsec = mts.tv_nsec;
+#else
     clock_gettime(CLOCK_REALTIME, &waitTime);
+#endif
     waitTime.tv_sec += 5;
     rc = 0;
     while (!eventThreadJobDone && rc == 0)
-- 
2.10.2




More information about the libvir-list mailing list