From c0dc475bcc485384f788c8164ff14a707a6e4fd4 Mon Sep 17 00:00:00 2001
From: Florian Fischer <florian.fl.fischer@fau.de>
Date: Tue, 26 Jan 2021 22:26:44 +0100
Subject: [PATCH] [meson] include compare header only if available

---
 apps/WorkerSleepExample.cpp | 8 ++++++--
 meson.build                 | 5 +++++
 tests/AlarmFutureTest.cpp   | 6 +++++-
 3 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/apps/WorkerSleepExample.cpp b/apps/WorkerSleepExample.cpp
index 3d1379de..481dba4a 100644
--- a/apps/WorkerSleepExample.cpp
+++ b/apps/WorkerSleepExample.cpp
@@ -1,7 +1,6 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 // Copyright © 2020 Florian Schmaus
 #include <chrono>		 // for milliseconds, operator+, hig...
-#include <compare>	 // for operator<, strong_ordering
 #include <cstdlib>	 // for exit, EXIT_SUCCESS
 #include <iostream>	 // for operator<<, basic_ostream, endl
 #include <ratio>		 // for ratio
@@ -12,7 +11,12 @@
 #include "Fiber.hpp"			 // for Fiber
 #include "Runtime.hpp"		 // for Runtime
 #include "emper-common.h"	 // for UNUSED_ARG, workerid_t
-#include "emper.hpp"			 // for spawn
+#include "emper-config.h"
+#include "emper.hpp"	// for spawn
+
+#ifdef EMPER_HAS_COMPARE_H
+#include <compare>	// for operator>=, strong_ordering
+#endif
 
 static unsigned int ITERATIONS = 10;
 
diff --git a/meson.build b/meson.build
index 8385425d..f2038dac 100644
--- a/meson.build
+++ b/meson.build
@@ -26,6 +26,11 @@ if option_urcu
 	emper_dependencies += [liburcu_dep]
 endif
 
+cpp_compiler = meson.get_compiler('cpp')
+if cpp_compiler.has_header('compare')
+  conf_data.set('EMPER_HAS_COMPARE_H', true)
+endif
+
 conf_data.set('EMPER_WORKER_SLEEP', get_option('worker_sleep'))
 conf_data.set('EMPER_WORKER_WAKEUP_STRATEGY', get_option('worker_wakeup_strategy'))
 conf_data.set('EMPER_LOCKED_WS_QUEUE', get_option('locked_ws_queue'))
diff --git a/tests/AlarmFutureTest.cpp b/tests/AlarmFutureTest.cpp
index 11dcad1c..b14830a4 100644
--- a/tests/AlarmFutureTest.cpp
+++ b/tests/AlarmFutureTest.cpp
@@ -3,12 +3,16 @@
 #include <cassert>	// for assert
 #include <cerrno>		// for ETIME
 #include <chrono>		// for microseconds, duration_cast, operator-
-#include <compare>	// for operator>=, strong_ordering
 #include <cstdint>	// for int32_t
 #include <cstdlib>	// for exit, EXIT_SUCCESS
 
+#include "emper-config.h"
 #include "io/Future.hpp"	// for AlarmFuture
 
+#ifdef EMPER_HAS_COMPARE_H
+#include <compare>	// for operator>=, strong_ordering
+#endif
+
 using emper::io::AlarmFuture;
 
 void emperTest() {
-- 
GitLab