summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2024-05-06 13:59:51 (GMT)
committerBrad King <brad.king@kitware.com>2024-05-06 17:59:27 (GMT)
commit6df925b595220a0db1d7c172f15f39f4bee9f75d (patch)
tree09c517c735764c389e69b8a084b655f0516bd857
parent1086902abd070573060186e75a6f16dbc4c5445f (diff)
downloadCMake-6df925b595220a0db1d7c172f15f39f4bee9f75d.zip
CMake-6df925b595220a0db1d7c172f15f39f4bee9f75d.tar.gz
CMake-6df925b595220a0db1d7c172f15f39f4bee9f75d.tar.bz2
cxxmodules: Do not scan sources while testing the compiler
The C++ sources we use to test the compiler do not use modules. Avoid requiring a compiler that can scan just to enable the language, even when CMP0155 is NEW. The project may explicitly turn off `CMAKE_CXX_SCAN_FOR_MODULES` before adding any targets. Fixes: #25956
-rw-r--r--Modules/CMakeDetermineCompilerABI.cmake3
-rw-r--r--Modules/CMakeTestCXXCompiler.cmake13
2 files changed, 16 insertions, 0 deletions
diff --git a/Modules/CMakeDetermineCompilerABI.cmake b/Modules/CMakeDetermineCompilerABI.cmake
index efc18f9..b21ec73 100644
--- a/Modules/CMakeDetermineCompilerABI.cmake
+++ b/Modules/CMakeDetermineCompilerABI.cmake
@@ -34,6 +34,9 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src)
endif()
set(CMAKE_${lang}_RUNTIME_LIBRARY "Static")
endif()
+ if(lang STREQUAL "CXX")
+ set(CMAKE_${lang}_SCAN_FOR_MODULES OFF)
+ endif()
if(NOT "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xMSVC")
# Avoid adding our own platform standard libraries for compilers
# from which we might detect implicit link libraries.
diff --git a/Modules/CMakeTestCXXCompiler.cmake b/Modules/CMakeTestCXXCompiler.cmake
index e640ff9..a9fbb26 100644
--- a/Modules/CMakeTestCXXCompiler.cmake
+++ b/Modules/CMakeTestCXXCompiler.cmake
@@ -37,6 +37,13 @@ endif()
# any makefiles or projects.
if(NOT CMAKE_CXX_COMPILER_WORKS)
PrintTestCompilerStatus("CXX")
+ # FIXME: Use a block() to isolate the variables we set/unset here.
+ if(DEFINED CMAKE_CXX_SCAN_FOR_MODULES)
+ set(__CMAKE_SAVED_CXX_SCAN_FOR_MODULES "${CMAKE_CXX_SCAN_FOR_MODULES}")
+ else()
+ unset(__CMAKE_SAVED_CXX_SCAN_FOR_MODULES)
+ endif()
+ set(CMAKE_CXX_SCAN_FOR_MODULES OFF)
__TestCompiler_setTryCompileTargetType()
string(CONCAT __TestCompiler_testCXXCompilerSource
"#ifndef __cplusplus\n"
@@ -49,6 +56,12 @@ if(NOT CMAKE_CXX_COMPILER_WORKS)
try_compile(CMAKE_CXX_COMPILER_WORKS
SOURCE_FROM_VAR testCXXCompiler.cxx __TestCompiler_testCXXCompilerSource
OUTPUT_VARIABLE __CMAKE_CXX_COMPILER_OUTPUT)
+ if(DEFINED __CMAKE_SAVED_CXX_SCAN_FOR_MODULES)
+ set(CMAKE_CXX_SCAN_FOR_MODULES "${__CMAKE_SAVED_CXX_SCAN_FOR_MODULES}")
+ unset(__CMAKE_SAVED_CXX_SCAN_FOR_MODULES)
+ else()
+ unset(CMAKE_CXX_SCAN_FOR_MODULES)
+ endif()
unset(__TestCompiler_testCXXCompilerSource)
# Move result from cache to normal variable.
set(CMAKE_CXX_COMPILER_WORKS ${CMAKE_CXX_COMPILER_WORKS})