76 lines
2.5 KiB
CMake
76 lines
2.5 KiB
CMake
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()
|