summaryrefslogtreecommitdiffstats
path: root/src/fmt/support/cmake/cxx14.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'src/fmt/support/cmake/cxx14.cmake')
-rw-r--r--src/fmt/support/cmake/cxx14.cmake54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/fmt/support/cmake/cxx14.cmake b/src/fmt/support/cmake/cxx14.cmake
new file mode 100644
index 000000000..deb1e26fb
--- /dev/null
+++ b/src/fmt/support/cmake/cxx14.cmake
@@ -0,0 +1,54 @@
+# C++14 feature support detection
+
+include(CheckCXXCompilerFlag)
+function (fmt_check_cxx_compiler_flag flag result)
+ if (NOT MSVC)
+ check_cxx_compiler_flag("${flag}" ${result})
+ endif ()
+endfunction ()
+
+if (NOT CMAKE_CXX_STANDARD)
+ set(CMAKE_CXX_STANDARD 11)
+endif()
+message(STATUS "CXX_STANDARD: ${CMAKE_CXX_STANDARD}")
+
+if (CMAKE_CXX_STANDARD EQUAL 20)
+ fmt_check_cxx_compiler_flag(-std=c++20 has_std_20_flag)
+ fmt_check_cxx_compiler_flag(-std=c++2a has_std_2a_flag)
+
+ if (has_std_20_flag)
+ set(CXX_STANDARD_FLAG -std=c++20)
+ elseif (has_std_2a_flag)
+ set(CXX_STANDARD_FLAG -std=c++2a)
+ endif ()
+
+elseif (CMAKE_CXX_STANDARD EQUAL 17)
+ fmt_check_cxx_compiler_flag(-std=c++17 has_std_17_flag)
+ fmt_check_cxx_compiler_flag(-std=c++1z has_std_1z_flag)
+
+ if (has_std_17_flag)
+ set(CXX_STANDARD_FLAG -std=c++17)
+ elseif (has_std_1z_flag)
+ set(CXX_STANDARD_FLAG -std=c++1z)
+ endif ()
+
+elseif (CMAKE_CXX_STANDARD EQUAL 14)
+ fmt_check_cxx_compiler_flag(-std=c++14 has_std_14_flag)
+ fmt_check_cxx_compiler_flag(-std=c++1y has_std_1y_flag)
+
+ if (has_std_14_flag)
+ set(CXX_STANDARD_FLAG -std=c++14)
+ elseif (has_std_1y_flag)
+ set(CXX_STANDARD_FLAG -std=c++1y)
+ endif ()
+
+elseif (CMAKE_CXX_STANDARD EQUAL 11)
+ fmt_check_cxx_compiler_flag(-std=c++11 has_std_11_flag)
+ fmt_check_cxx_compiler_flag(-std=c++0x has_std_0x_flag)
+
+ if (has_std_11_flag)
+ set(CXX_STANDARD_FLAG -std=c++11)
+ elseif (has_std_0x_flag)
+ set(CXX_STANDARD_FLAG -std=c++0x)
+ endif ()
+endif ()