From d93b687bde1121f58dcfa1b16cb1da4f0a73dafd Mon Sep 17 00:00:00 2001
From: SpaceIm <30052553+SpaceIm@users.noreply.github.com>
Date: Thu, 25 May 2023 19:34:34 +0200
Subject: [PATCH] CMake: use compile_features to set min C++ standard (#647)

---
 cmake/ftxui_fuzzer.cmake      |  5 +----
 cmake/ftxui_set_options.cmake | 14 +-------------
 cmake/ftxui_test.cmake        |  5 +----
 examples/CMakeLists.txt       |  4 +---
 4 files changed, 4 insertions(+), 24 deletions(-)

diff --git a/cmake/ftxui_fuzzer.cmake b/cmake/ftxui_fuzzer.cmake
index 8d92f7bf..cb77554c 100644
--- a/cmake/ftxui_fuzzer.cmake
+++ b/cmake/ftxui_fuzzer.cmake
@@ -14,10 +14,7 @@ function(fuzz source)
   target_link_libraries(${name} PRIVATE component)
   target_compile_options(${name} PRIVATE -fsanitize=fuzzer,address)
   target_link_libraries(${name} PRIVATE -fsanitize=fuzzer,address)
-  set_target_properties(${name} PROPERTIES
-    CXX_STANDARD 20
-    CXX_EXTENSIONS OFF
-  )
+  target_compile_features(${name} PRIVATE cxx_std_17)
 endfunction(fuzz)
 
 fuzz(terminal_input_parser_test_fuzzer)
diff --git a/cmake/ftxui_set_options.cmake b/cmake/ftxui_set_options.cmake
index 8b95dab2..40a88e1e 100644
--- a/cmake/ftxui_set_options.cmake
+++ b/cmake/ftxui_set_options.cmake
@@ -43,19 +43,7 @@ function(ftxui_set_options library)
       $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
   )
 
-  # Play nicely if we are being consumed by another project
-  # and use their CMAKE_CXX_STANDARD. Otherwise, fall back to 17
-  # C++17 is used. We require fold expression at least.
-  if (DEFINED CMAKE_CXX_STANDARD)
-    set(CXX_STANDARD ${CMAKE_CXX_STANDARD})
-  else()
-    set(CXX_STANDARD 17)
-  endif()
-  
-  set_target_properties(${library} PROPERTIES
-    CXX_STANDARD ${CXX_STANDARD}
-    CXX_EXTENSIONS OFF
-  )
+  target_compile_features(${library} PUBLIC cxx_std_17)
 
   # Force Microsoft Visual Studio to decode sources files in UTF-8. This applies
   # to the library and the library users.
diff --git a/cmake/ftxui_test.cmake b/cmake/ftxui_test.cmake
index fbbbbfa2..88eb3c8c 100644
--- a/cmake/ftxui_test.cmake
+++ b/cmake/ftxui_test.cmake
@@ -57,10 +57,7 @@ target_link_libraries(ftxui-tests
 target_include_directories(ftxui-tests
   PRIVATE src
 )
-set_target_properties(ftxui-tests PROPERTIES
-  CXX_STANDARD 20
-  CXX_EXTENSIONS OFF
-)
+target_compile_features(ftxui-tests PRIVATE cxx_std_20)
 
 if (FTXUI_MICROSOFT_TERMINAL_FALLBACK)
   target_compile_definitions(ftxui-tests
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 4660a6b4..330559fc 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -8,9 +8,7 @@ function(example name)
   target_link_libraries(ftxui_example_${name} PUBLIC ${DIRECTORY_LIB})
   file(RELATIVE_PATH dir ${EXAMPLES_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
   set_property(GLOBAL APPEND PROPERTY FTXUI::EXAMPLES ${dir}/${name})
-  set_target_properties(ftxui_example_${name} PROPERTIES
-    CXX_STANDARD 17
-  )
+  target_compile_features(ftxui_example_${name} PRIVATE cxx_std_17)
 endfunction(example)
 
 add_subdirectory(component)
-- 
GitLab