From c6346a12acce6f4d039a459ce4b54fd44cd8a496 Mon Sep 17 00:00:00 2001 From: Tobias Markus Date: Tue, 14 May 2024 11:27:20 +0200 Subject: [PATCH] Fix old versions of CMake erroneously reporting Intel LLVM as Clang Fixes #4315 --- googletest/cmake/internal_utils.cmake | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/googletest/cmake/internal_utils.cmake b/googletest/cmake/internal_utils.cmake index 580ac1cbc..58cc54993 100644 --- a/googletest/cmake/internal_utils.cmake +++ b/googletest/cmake/internal_utils.cmake @@ -96,10 +96,23 @@ macro(config_compiler_and_linker) set(cxx_no_exception_flags "-fno-exceptions") set(cxx_strict_flags "-W -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wunused-parameter -Wcast-align -Winline -Wredundant-decls") set(cxx_no_rtti_flags "-fno-rtti") - if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + + # CMake versions less than 3.20 will erroneously report + # IntelLLVM compilers as clang. Therefore we check if + # we're really dealing with IntelLLVM as compiler. + # See https://github.com/google/googletest/issues/4315 + set(compiler_is_really_intel_llvm FALSE) + if (${CMAKE_VERSION} VERSION_LESS 3.20) + string(FIND "${CMAKE_CXX_COMPILER}" "icpx" icpx_position) + if (icpx_position GREATER -1) + set(compiler_is_really_intel_llvm TRUE) + endif() + endif() + + if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT compiler_is_really_intel_llvm) set(cxx_strict_flags "${cxx_strict_flags} -Wchar-subscripts") endif() - if (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM") + if (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM" OR compiler_is_really_intel_llvm) set(cxx_base_flags "${cxx_base_flags} -Wno-implicit-float-size-conversion -ffp-model=precise") endif() elseif (CMAKE_COMPILER_IS_GNUCXX)