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(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()