macro(error text) set(RunCMake_TEST_FAILED "${text}") return() endmacro() macro(parseGlobalSections arg_out_pre arg_out_post testName) set(out_pre ${arg_out_pre}) set(out_post ${arg_out_post}) set(sln "${RunCMake_TEST_BINARY_DIR}/${testName}.sln") if(NOT EXISTS "${sln}") error("Expected solution file ${sln} does not exist") endif() file(STRINGS "${sln}" lines) set(sectionLines "") set(store FALSE) foreach(line IN LISTS lines) if(line MATCHES "^\t*Global\n?$") set(store TRUE) elseif(line MATCHES "^\t*EndGlobal\n?$") set(store FALSE) elseif(store) list(APPEND sectionLines "${line}") endif() endforeach() set(sectionName "") set(sectionType "") foreach(line IN LISTS sectionLines) if(line MATCHES "^\t*GlobalSection\\((.*)\\) *= *(pre|post)Solution\n?$") set(sectionName "${CMAKE_MATCH_1}") set(sectionType ${CMAKE_MATCH_2}) list(APPEND ${out_${sectionType}} "${sectionName}") if(DEFINED ${out_${sectionType}}_${sectionName}) error("Section ${sectionName} defined twice") endif() set(${out_${sectionType}}_${sectionName} "") elseif(line MATCHES "\t*EndGlobalSection\n?$") set(sectionName "") set(sectionType "") elseif(sectionName) string(REGEX MATCH "^\t*([^=]*)=([^\n]*)\n?$" matches "${line}") if(NOT matches) error("Bad syntax in solution file: '${line}'") endif() string(STRIP "${CMAKE_MATCH_1}" key) string(STRIP "${CMAKE_MATCH_2}" value) list(APPEND ${out_${sectionType}}_${sectionName} "${key}=${value}") endif() endforeach() endmacro() macro(getProjectNames arg_out_projects) set(${arg_out_projects} "") set(sln "${RunCMake_TEST_BINARY_DIR}/${test}.sln") if(NOT EXISTS "${sln}") error("Expected solution file ${sln} does not exist") endif() file(STRINGS "${sln}" project_lines REGEX "^Project\\(") foreach(project_line IN LISTS project_lines) string(REGEX REPLACE ".* = \"" "" project_line "${project_line}") string(REGEX REPLACE "\", .*" "" project_line "${project_line}") list(APPEND ${arg_out_projects} "${project_line}") endforeach() endmacro() macro(testGlobalSection prefix sectionName) if(NOT DEFINED ${prefix}_${sectionName}) error("Section ${sectionName} does not exist") endif() if(NOT "${${prefix}_${sectionName}}" STREQUAL "${ARGN}") error("Section ${sectionName} content mismatch\n expected: ${ARGN}\n actual: ${${prefix}_${sectionName}}") endif() endmacro()