From dd6a5d371fd7a3e2937bb579955003c54b727233 Mon Sep 17 00:00:00 2001
From: Claus Klein <claus.klein.sha@googlemail.com>
Date: Mon, 28 Aug 2023 21:38:51 +0200
Subject: [PATCH] Fix CMAKE_UNITY_BUILD usage (#738)

Add missing include guard.
This fix https://github.com/cpp-best-practices/cmake_template/issues/64

Co-authored-by: ArthurSonzogni <sonzogniarthur@gmail.com>
---
 CHANGELOG.md              | 3 +++
 cmake/ftxui_test.cmake    | 5 +++++
 src/ftxui/screen/util.hpp | 5 +++++
 3 files changed, 13 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index a094fd12..ec06a130 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,9 @@ current (development)
 - Feature: Add support for `Input`'s insert mode. Add `InputOption::insert`
   option. Added by @mingsheng13.
 
+### Build
+- Support for cmake's "unity/jumbo" builds. Fixed by @ClausKlein.
+
 5.0.0
 -----
 
diff --git a/cmake/ftxui_test.cmake b/cmake/ftxui_test.cmake
index 71caa691..0b9a86df 100644
--- a/cmake/ftxui_test.cmake
+++ b/cmake/ftxui_test.cmake
@@ -59,6 +59,11 @@ target_include_directories(ftxui-tests
 )
 target_compile_features(ftxui-tests PRIVATE cxx_std_20)
 
+# Disable unity build for tests. There are several files defining the same
+# function in different anonymous namespaces. This is not allowed in unity
+# builds, as it would result in multiple definitions of the same function.
+set_target_properties(ftxui-tests PROPERTIES UNITY_BUILD OFF)
+
 if (FTXUI_MICROSOFT_TERMINAL_FALLBACK)
   target_compile_definitions(ftxui-tests
     PRIVATE "FTXUI_MICROSOFT_TERMINAL_FALLBACK")
diff --git a/src/ftxui/screen/util.hpp b/src/ftxui/screen/util.hpp
index e2d76574..91a769b8 100644
--- a/src/ftxui/screen/util.hpp
+++ b/src/ftxui/screen/util.hpp
@@ -1,6 +1,9 @@
 // Copyright 2022 Arthur Sonzogni. All rights reserved.
 // Use of this source code is governed by the MIT license that can be found in
 // the LICENSE file.
+#ifndef FTXUI_SCREEN_UTIL_HPP
+#define FTXUI_SCREEN_UTIL_HPP
+
 namespace ftxui {
 namespace util {
 
@@ -12,3 +15,5 @@ constexpr const T& clamp(const T& v, const T& lo, const T& hi) {
 
 }  // namespace util
 }  // namespace ftxui
+
+#endif /* end of include guard: FTXUI_SCREEN_UTIL_HPP */
-- 
GitLab