diff options
Diffstat (limited to 'Tests')
3 files changed, 48 insertions, 0 deletions
diff --git a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake index d5ed136..e11a24a 100644 --- a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake +++ b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake @@ -41,6 +41,7 @@ run_cmake(VsDeployEnabled) run_cmake(VsSettings) run_cmake(VsSourceSettingsTool) run_cmake(VsPlatformToolset) +run_cmake(VsControlFlowGuardLinkSetting) run_cmake(VsWinRTByDefault) diff --git a/Tests/RunCMake/VS10Project/VsControlFlowGuardLinkSetting-check.cmake b/Tests/RunCMake/VS10Project/VsControlFlowGuardLinkSetting-check.cmake new file mode 100644 index 0000000..c13858b --- /dev/null +++ b/Tests/RunCMake/VS10Project/VsControlFlowGuardLinkSetting-check.cmake @@ -0,0 +1,40 @@ +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() diff --git a/Tests/RunCMake/VS10Project/VsControlFlowGuardLinkSetting.cmake b/Tests/RunCMake/VS10Project/VsControlFlowGuardLinkSetting.cmake new file mode 100644 index 0000000..31e69ac --- /dev/null +++ b/Tests/RunCMake/VS10Project/VsControlFlowGuardLinkSetting.cmake @@ -0,0 +1,7 @@ +enable_language(CXX) + +# Add the Control Flow Guard compiler and linker option +add_compile_options("/guard:cf") +string(APPEND CMAKE_SHARED_LINKER_FLAGS " /guard:cf") + +add_library(ControlFlowGuardProject SHARED foo.cpp) |