浏览代码

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
Brad King 1 年之前
父节点
当前提交
6df925b595
共有 2 个文件被更改,包括 16 次插入0 次删除
  1. 3 0
      Modules/CMakeDetermineCompilerABI.cmake
  2. 13 0
      Modules/CMakeTestCXXCompiler.cmake

+ 3 - 0
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.

+ 13 - 0
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})