mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-14 02:08:27 +08:00
CompilerId/Features: Tolerate variables named for languages
If a `CMakeLists.txt` or `CMAKE_TOOLCHAIN_FILE` sets a variable named `C`, `CXX`, or `CUDA`, we were previously comparing each enabled language name to the value of that variable, rather than the name itself. Double-quote the string to take advantage of policy `CMP0054`, but also add "x" prefixes to support projects that do not set the policy. Fixes: #22125
This commit is contained in:
@@ -18,7 +18,7 @@ function(compiler_id_detection outvar lang)
|
||||
file(GLOB lang_files
|
||||
"${CMAKE_ROOT}/Modules/Compiler/*-DetermineCompiler.cmake")
|
||||
set(nonlang CXX)
|
||||
if (lang STREQUAL CXX)
|
||||
if ("x${lang}" STREQUAL "xCXX")
|
||||
set(nonlang C)
|
||||
endif()
|
||||
|
||||
|
@@ -4,7 +4,7 @@
|
||||
|
||||
function(cmake_determine_compile_features lang)
|
||||
|
||||
if(lang STREQUAL C AND COMMAND cmake_record_c_compile_features)
|
||||
if("x${lang}" STREQUAL "xC" AND COMMAND cmake_record_c_compile_features)
|
||||
message(CHECK_START "Detecting ${lang} compile features")
|
||||
|
||||
set(CMAKE_C90_COMPILE_FEATURES)
|
||||
@@ -54,7 +54,7 @@ function(cmake_determine_compile_features lang)
|
||||
|
||||
message(CHECK_PASS "done")
|
||||
|
||||
elseif(lang STREQUAL CXX AND COMMAND cmake_record_cxx_compile_features)
|
||||
elseif("x${lang}" STREQUAL "xCXX" AND COMMAND cmake_record_cxx_compile_features)
|
||||
message(CHECK_START "Detecting ${lang} compile features")
|
||||
|
||||
set(CMAKE_CXX98_COMPILE_FEATURES)
|
||||
@@ -110,7 +110,7 @@ function(cmake_determine_compile_features lang)
|
||||
|
||||
message(CHECK_PASS "done")
|
||||
|
||||
elseif(lang STREQUAL CUDA AND COMMAND cmake_record_cuda_compile_features)
|
||||
elseif("x${lang}" STREQUAL "xCUDA" AND COMMAND cmake_record_cuda_compile_features)
|
||||
message(CHECK_START "Detecting ${lang} compile features")
|
||||
|
||||
set(CMAKE_CUDA03_COMPILE_FEATURES)
|
||||
|
2
Tests/RunCMake/ToolchainFile/LangVars-toolchain.cmake
Normal file
2
Tests/RunCMake/ToolchainFile/LangVars-toolchain.cmake
Normal file
@@ -0,0 +1,2 @@
|
||||
set(C 1)
|
||||
set(CXX 1)
|
7
Tests/RunCMake/ToolchainFile/LangVars.cmake
Normal file
7
Tests/RunCMake/ToolchainFile/LangVars.cmake
Normal file
@@ -0,0 +1,7 @@
|
||||
foreach(test_language C CXX)
|
||||
enable_language(${test_language})
|
||||
if(DEFINED CMAKE_${test_language}_STANDARD_DEFAULT
|
||||
AND NOT CMAKE_${test_language}_COMPILE_FEATURES)
|
||||
message(FATAL_ERROR "Compile features not found for ${test_language}")
|
||||
endif()
|
||||
endforeach()
|
@@ -9,6 +9,7 @@ run_cmake_toolchain(CallEnableLanguage)
|
||||
run_cmake_toolchain(CallProject)
|
||||
run_cmake_toolchain(CheckLanguage)
|
||||
run_cmake_toolchain(FlagsInit)
|
||||
run_cmake_toolchain(LangVars)
|
||||
run_cmake_toolchain(LinkFlagsInit)
|
||||
|
||||
function(run_IncludeDirectories)
|
||||
|
Reference in New Issue
Block a user