| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/ControlFlowGuardProject.vcxproj")
- if(NOT EXISTS "${vcProjectFile}")
- set(RunCMake_TEST_FAILED "Project file ControlFlowGuardProject.vcxproj does not exist.")
- return()
- endif()
- set(Is_in_link_section 0)
- set(HAS_ControlFlowGuardSetting 0)
- file(STRINGS "${vcProjectFile}" lines)
- foreach(line IN LISTS lines)
- if(line MATCHES "^ *<LinkControlFlowGuard>([^<>]+)</LinkControlFlowGuard>")
- set(RunCMake_TEST_FAILED "Project file ControlFlowGuardProject.vcxproj contains the invalid <LinkControlFlowGuard> link property.")
- return()
- break()
- endif()
- if(line MATCHES "^ *<Link>")
- # The start of the link section of the vcxproj file
- set(Is_in_link_section 1)
- continue()
- endif()
- if(line MATCHES "^ *</Link>")
- # The end of the link section of the vcxproj file
- set(Is_in_link_section 0)
- continue()
- endif()
- if(Is_in_link_section)
- if(line MATCHES "^ *<AdditionalOptions>([^<>]+)</AdditionalOptions>")
- if("${CMAKE_MATCH_1}" MATCHES ".*/guard:cf.*")
- set(HAS_ControlFlowGuardSetting 1)
- break()
- endif()
- endif()
- endif()
- endforeach()
- if(NOT HAS_ControlFlowGuardSetting)
- set(RunCMake_TEST_FAILED "Project file ControlFlowGuardProject.vcxproj does not have '/guard:cf' specified in the <AdditionalOptions> property.")
- return()
- endif()
|