provide clock_gettime() implementation for lovely OSX, which doesn't have it
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 14 Aug 2013 16:39:34 +0000 (12:39 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 14 Aug 2013 16:39:34 +0000 (12:39 -0400)
libs/ardour/globals.cc

index 89edc66e8423ea77aac04f415cc0fc02ca57541c..4e99bc767e572128286892589645e928c5375235 100644 (file)
@@ -540,6 +540,31 @@ ARDOUR::get_available_sync_options ()
 /** Return a monotonic value for the number of microseconds that have elapsed
  * since an arbitrary zero origin.
  */
+
+#ifdef __MACH__
+/* Thanks Apple for not implementing this basic SUSv2, POSIX.1-2001 function
+ */
+#include <mach/mach_time.h>
+#define CLOCK_REALTIME 0
+#define CLOCK_MONOTONIC 0
+int 
+clock_gettime (int /*clk_id*/, struct timespec *t)
+{
+        static bool initialized = false;
+        static mach_timebase_info_data_t timebase;
+        if (!initialized) {
+                mach_timebase_info(&timebase);
+                initialized = true;
+        }
+        uint64_t time;
+        time = mach_absolute_time();
+        double nseconds = ((double)time * (double)timebase.numer)/((double)timebase.denom);
+        double seconds = ((double)time * (double)timebase.numer)/((double)timebase.denom * 1e9);
+        t->tv_sec = seconds;
+        t->tv_nsec = nseconds;
+        return 0;
+}
+#endif
  
 microseconds_t
 ARDOUR::get_microseconds ()