set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/exe.vcxproj")
if(NOT EXISTS "${vcProjectFile}")
set(RunCMake_TEST_FAILED "Project file ${vcProjectFile} does not exist.")
return()
endif()
set(inGroup FALSE)
set(inCommand FALSE)
set(expected_Debug
"cmd_1 cmd_1_arg"
"cmd_1_dbg cmd_1_dbg_arg"
"cmd_2_dbg cmd_2_dbg_arg"
"cmd_3_dbg cmd_3_dbg_arg")
set(expected_Release
"cmd_1 cmd_1_arg"
"cmd_3_rel cmd_3_rel_arg")
# extract build events
file(STRINGS "${vcProjectFile}" lines)
foreach(line IN LISTS lines)
if(line MATCHES "^ *<ItemDefinitionGroup Condition=.*Configuration.*Platform.*>$")
set(inGroup TRUE)
string(REGEX MATCH "=='(.*)\\|(.*)'" out ${line})
set(config ${CMAKE_MATCH_1})
elseif(line MATCHES "^ *</ItemDefinitionGroup>$")
set(inGroup FALSE)
elseif(inGroup)
if(line MATCHES "^ *<Command>.*$")
set(inCommand TRUE)
string(REGEX MATCH "<Command>(.*)" cmd ${line})
set(currentCommand ${CMAKE_MATCH_1})
elseif(line MATCHES "^(.*)</Command>$")
string(REGEX MATCH "(.*)</Command>" cmd ${line})
list(APPEND currentCommand ${CMAKE_MATCH_1})
set(command_${config} ${currentCommand})
set(inCommand FALSE)
elseif(inCommand)
list(APPEND currentCommand ${line})
endif()
endif()
endforeach()
foreach(config "Debug" "Release")
set(currentName command_${config})
set(expectedName expected_${config})
set(strippedCommand "")
if(DEFINED ${currentName})
foreach(v ${${currentName}})
if(${v} MATCHES "cmd_")
list(APPEND strippedCommand ${v})
endif()
endforeach()
if(NOT "${strippedCommand}" STREQUAL
"${${expectedName}}")
message(" - ${strippedCommand}")
message(" + ${${expectedName}}")
set(RunCMake_TEST_FAILED "build event command does not match")
return()
endif()
endif()
endforeach()