diff --git a/CMakeLists.txt b/CMakeLists.txt index b9e5c58b90c3f..1d07bb4adf607 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -125,7 +125,6 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/support/cmake") include(cxx14) -include(CheckCXXCompilerFlag) include(JoinPaths) list(FIND CMAKE_CXX_COMPILE_FEATURES "cxx_variadic_templates" index) diff --git a/support/cmake/cxx14.cmake b/support/cmake/cxx14.cmake index 16ff57541b18c..1dccd0a0699ba 100644 --- a/support/cmake/cxx14.cmake +++ b/support/cmake/cxx14.cmake @@ -1,43 +1,50 @@ # C++14 feature support detection -include(CheckCXXSourceCompiles) include(CheckCXXCompilerFlag) +macro (fmt_check_cxx_compiler_flag _FLAG _RESULT) + if (NOT MSVC) + check_cxx_compiler_flag("${_FLAG}" ${_RESULT}) + endif () +endmacro () if (NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 11) -endif() -message(STATUS "CXX_STANDARD: ${CMAKE_CXX_STANDARD}") +endif () +message(STATUS "CMAKE_CXX_STANDARD: ${CMAKE_CXX_STANDARD}") if (CMAKE_CXX_STANDARD EQUAL 20) - check_cxx_compiler_flag(-std=c++20 has_std_20_flag) - check_cxx_compiler_flag(-std=c++2a has_std_2a_flag) + 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) - check_cxx_compiler_flag(-std=c++17 has_std_17_flag) - check_cxx_compiler_flag(-std=c++1z has_std_1z_flag) + 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) - check_cxx_compiler_flag(-std=c++14 has_std_14_flag) - check_cxx_compiler_flag(-std=c++1y has_std_1y_flag) + 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) - check_cxx_compiler_flag(-std=c++11 has_std_11_flag) - check_cxx_compiler_flag(-std=c++0x has_std_0x_flag) + 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) @@ -46,25 +53,16 @@ elseif (CMAKE_CXX_STANDARD EQUAL 11) endif () endif () -set(CMAKE_REQUIRED_FLAGS ${CXX_STANDARD_FLAG}) - -# Check if user-defined literals are available -check_cxx_source_compiles(" - void operator\"\" _udl(long double); - int main() {}" - SUPPORTS_USER_DEFINED_LITERALS) +if (FMT_PEDANTIC AND NOT WIN32) + include(CheckCXXSourceCompiles) + set(CMAKE_REQUIRED_FLAGS ${CXX_STANDARD_FLAG}) + # Check if user-defined literals are available + check_cxx_source_compiles(" + void operator\"\" _udl(long double); + int main() {}" + SUPPORTS_USER_DEFINED_LITERALS) + set(CMAKE_REQUIRED_FLAGS ) +endif () if (NOT SUPPORTS_USER_DEFINED_LITERALS) set (SUPPORTS_USER_DEFINED_LITERALS OFF) endif () - -# Check if is available -set(CMAKE_REQUIRED_FLAGS -std=c++1z) -check_cxx_source_compiles(" - #include - int main() {}" - FMT_HAS_VARIANT) -if (NOT FMT_HAS_VARIANT) - set (FMT_HAS_VARIANT OFF) -endif () - -set(CMAKE_REQUIRED_FLAGS ) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c6101fac34829..84c3e76ab121a 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -6,8 +6,6 @@ target_include_directories(test-main PUBLIC $) target_link_libraries(test-main gtest fmt) -include(CheckCXXCompilerFlag) - function(add_fmt_executable name) add_executable(${name} ${ARGN}) if (MINGW) @@ -145,9 +143,7 @@ if (FMT_PEDANTIC) target_include_directories( noexception-test PRIVATE ${PROJECT_SOURCE_DIR}/include) target_compile_options(noexception-test PRIVATE -fno-exceptions) - if (FMT_PEDANTIC) - target_compile_options(noexception-test PRIVATE ${PEDANTIC_COMPILE_FLAGS}) - endif () + target_compile_options(noexception-test PRIVATE ${PEDANTIC_COMPILE_FLAGS}) endif () # Test that the library compiles without locale. diff --git a/test/gtest/CMakeLists.txt b/test/gtest/CMakeLists.txt index 0cc4e1aa33672..ed0e59d5fc57c 100644 --- a/test/gtest/CMakeLists.txt +++ b/test/gtest/CMakeLists.txt @@ -18,7 +18,7 @@ else () endif () # Workaround GTest bug https://github.com/google/googletest/issues/705. -check_cxx_compiler_flag( +fmt_check_cxx_compiler_flag( -fno-delete-null-pointer-checks HAVE_FNO_DELETE_NULL_POINTER_CHECKS) if (HAVE_FNO_DELETE_NULL_POINTER_CHECKS) target_compile_options(gtest PUBLIC -fno-delete-null-pointer-checks)