|
|
@@ -0,0 +1,60 @@
|
|
|
+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()
|