@@ -112,7 +112,7 @@ AC_CHECK_MEMBERS([struct mmsghdr.msg_len], [], [], [[#include <sys/socket.h>]])
AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_scope_id], [], [],
[[#include <sys/socket.h>
#include <netinet/in.h>]])
-AC_CHECK_FUNCS([mlockall strnlen getloadavg statvfs getmntent_r sendmmsg])
+AC_CHECK_FUNCS([mlockall strnlen getloadavg statvfs getmntent_r sendmmsg clock_gettime])
AC_CHECK_HEADERS([mntent.h sys/statvfs.h linux/types.h linux/if_ether.h stdatomic.h])
AC_CHECK_HEADERS([net/if_mib.h], [], [], [[#include <sys/types.h>
#include <net/if.h>]])
@@ -41,7 +41,7 @@
VLOG_DEFINE_THIS_MODULE(timeval);
-#if defined(_WIN32) || defined(__MACH__)
+#if !defined(HAVE_CLOCK_GETTIME)
typedef unsigned int clockid_t;
static int clock_gettime(clock_t id, struct timespec *ts);
@@ -52,7 +52,7 @@ static int clock_gettime(clock_t id, struct timespec *ts);
#ifndef CLOCK_REALTIME
#define CLOCK_REALTIME 2
#endif
-#endif /* defined(_WIN32) || defined(__MACH__) */
+#endif /* !defined(HAVE_CLOCK_GETTIME) */
#ifdef _WIN32
/* Number of 100 ns intervals from January 1, 1601 till January 1, 1970. */
@@ -453,7 +453,7 @@ clock_gettime(clock_t id, struct timespec *ts)
}
#endif /* _WIN32 */
-#ifdef __MACH__
+#if defined(__MACH__) && !defined(HAVE_CLOCK_GETTIME)
#include <mach/clock.h>
#include <mach/mach.h>
static int
[Problem] Compilation error on newer versions of macOS (Sierra onwards) due to multiple declarations of clock_gettime. [Solution] Have configure check for clock_gettime and check this result in timeval to avoid incorrectly declaring/defining clock_gettime again. [Testing] Source code now successfully builds on macOS. Signed-off-by: Richard Oliver <richard@richard-oliver.co.uk> --- configure.ac | 2 +- lib/timeval.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-)