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 "^ *([^<>]+)") set(spectre_actual "${CMAKE_MATCH_1}") if(NOT "${spectre_actual}" STREQUAL "${spectre_expect}") set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj has '${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 field.") return() endif() endmacro() VsSpectreMitigation_check(SpectreMitigationOn-C "Spectre") VsSpectreMitigation_check(SpectreMitigationOff-C "false")