mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-15 03:30:39 -06:00
The mapping for this flag was added by commit43aa632f57(VS: Populate `-Qspectre-` flag table entry for v142, 2019-01-24, v3.14.0-rc1~74^2~7). However, it did not do anything because the special logic added by commitbb60ed6e72(VS: Add flag table entry for -Qspectre, 2018-10-08, v3.13.0-rc1~4^2) to move the `SpectreMitigation` element from `ClCompile` to the top level only handled the presence of the setting and not its value. Extend the special logic to carry the value too. Fixes: #19535
31 lines
1.1 KiB
CMake
31 lines
1.1 KiB
CMake
macro(VsSpectreMitigation_check tgt spectre_expect)
|
|
set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/${tgt}.vcxproj")
|
|
if(NOT EXISTS "${vcProjectFile}")
|
|
set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not exist.")
|
|
return()
|
|
endif()
|
|
|
|
set(HAVE_SpectreMitigation 0)
|
|
|
|
file(STRINGS "${vcProjectFile}" lines)
|
|
foreach(line IN LISTS lines)
|
|
if(line MATCHES "^ *<SpectreMitigation>([^<>]+)</SpectreMitigation>")
|
|
set(spectre_actual "${CMAKE_MATCH_1}")
|
|
if(NOT "${spectre_actual}" STREQUAL "${spectre_expect}")
|
|
set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj has <SpectreMitigation> '${spectre_actual}', not '${spectre_expect}'.")
|
|
return()
|
|
endif()
|
|
set(HAVE_SpectreMitigation 1)
|
|
break()
|
|
endif()
|
|
endforeach()
|
|
|
|
if(NOT HAVE_SpectreMitigation AND NOT "${spectre_expect}" STREQUAL "")
|
|
set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a <SpectreMitigation> field.")
|
|
return()
|
|
endif()
|
|
endmacro()
|
|
|
|
VsSpectreMitigation_check(SpectreMitigationOn-C "Spectre")
|
|
VsSpectreMitigation_check(SpectreMitigationOff-C "false")
|