mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-19 02:17: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
|
file(GLOB lang_files
|
||||||
"${CMAKE_ROOT}/Modules/Compiler/*-DetermineCompiler.cmake")
|
"${CMAKE_ROOT}/Modules/Compiler/*-DetermineCompiler.cmake")
|
||||||
set(nonlang CXX)
|
set(nonlang CXX)
|
||||||
if (lang STREQUAL CXX)
|
if ("x${lang}" STREQUAL "xCXX")
|
||||||
set(nonlang C)
|
set(nonlang C)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
function(cmake_determine_compile_features lang)
|
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")
|
message(CHECK_START "Detecting ${lang} compile features")
|
||||||
|
|
||||||
set(CMAKE_C90_COMPILE_FEATURES)
|
set(CMAKE_C90_COMPILE_FEATURES)
|
||||||
@@ -54,7 +54,7 @@ function(cmake_determine_compile_features lang)
|
|||||||
|
|
||||||
message(CHECK_PASS "done")
|
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")
|
message(CHECK_START "Detecting ${lang} compile features")
|
||||||
|
|
||||||
set(CMAKE_CXX98_COMPILE_FEATURES)
|
set(CMAKE_CXX98_COMPILE_FEATURES)
|
||||||
@@ -110,7 +110,7 @@ function(cmake_determine_compile_features lang)
|
|||||||
|
|
||||||
message(CHECK_PASS "done")
|
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")
|
message(CHECK_START "Detecting ${lang} compile features")
|
||||||
|
|
||||||
set(CMAKE_CUDA03_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(CallProject)
|
||||||
run_cmake_toolchain(CheckLanguage)
|
run_cmake_toolchain(CheckLanguage)
|
||||||
run_cmake_toolchain(FlagsInit)
|
run_cmake_toolchain(FlagsInit)
|
||||||
|
run_cmake_toolchain(LangVars)
|
||||||
run_cmake_toolchain(LinkFlagsInit)
|
run_cmake_toolchain(LinkFlagsInit)
|
||||||
|
|
||||||
function(run_IncludeDirectories)
|
function(run_IncludeDirectories)
|
||||||
|
Reference in New Issue
Block a user