blob: a20d2cdfa49ed2a206d8dabbb11acc66650b7481 [file] [log] [blame]
include(${CMAKE_CURRENT_LIST_DIR}/verify-snippet.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/json.cmake)
file(GLOB snippets ${v1}/data/*)
if (NOT snippets)
add_error("No snippet files generated")
endif()
set(FOUND_SNIPPETS "")
foreach(snippet IN LISTS snippets)
get_filename_component(filename "${snippet}" NAME)
read_json("${snippet}" contents)
# Verify snippet file is valid
verify_snippet("${snippet}" "${contents}")
# Append to list of collected snippet roles
if (NOT role IN_LIST FOUND_SNIPPETS)
list(APPEND FOUND_SNIPPETS ${role})
endif()
# Verify target
string(JSON target ERROR_VARIABLE noTarget GET "${contents}" target)
if (NOT target MATCHES NOTFOUND)
set(targets "main;lib;customTarget;TARGET_NAME")
if (NOT ${target} IN_LIST targets)
snippet_error("${snippet}" "Unexpected target: ${target}")
endif()
endif()
# Verify output
string(JSON result GET "${contents}" result)
if (NOT ${result} EQUAL 0)
snippet_error("${snippet}" "Compile command had non-0 result")
endif()
# Verify contents of compile-* Snippets
if (filename MATCHES "^compile-")
string(JSON target GET "${contents}" target)
string(JSON source GET "${contents}" source)
string(JSON language GET "${contents}" language)
if (NOT language MATCHES "C\\+\\+")
snippet_error("${snippet}" "Expected C++ compile language")
endif()
if (NOT source MATCHES "${target}.cxx$")
snippet_error("${snippet}" "Unexpected source file")
endif()
endif()
# Verify contents of link-* Snippets
if (filename MATCHES "^link-")
string(JSON target GET "${contents}" target)
string(JSON targetType GET "${contents}" targetType)
string(JSON targetLabels GET "${contents}" targetLabels)
if (target MATCHES "main")
if (NOT targetType MATCHES "EXECUTABLE")
snippet_error("${snippet}" "Expected EXECUTABLE, target type was ${targetType}")
endif()
string(JSON nlabels LENGTH "${targetLabels}")
if (NOT nlabels STREQUAL 2)
snippet_error("${snippet}" "Missing Target Labels for: ${target}")
else()
string(JSON label1 GET "${contents}" targetLabels 0)
string(JSON label2 GET "${contents}" targetLabels 1)
if (NOT label1 MATCHES "label1" OR NOT label2 MATCHES "label2")
snippet_error("${snippet}" "Missing Target Labels for: ${target}")
endif()
endif()
endif()
if (target MATCHES "lib")
if (NOT targetType MATCHES "STATIC_LIBRARY")
snippet_error("${snippet}" "Expected STATIC_LIBRARY, target type was ${targetType}")
endif()
string(JSON nlabels LENGTH "${targetLabels}")
if (NOT nlabels STREQUAL 1)
snippet_error("${snippet}" "Missing Target Labels for: ${target}")
else()
string(JSON label ERROR_VARIABLE noLabels GET "${contents}" targetLabels 0)
if (NOT label MATCHES "label3")
snippet_error("${snippet}" "Missing Target Labels for: ${target}")
endif()
endif()
endif()
endif()
# Verify contents of custom-* Snippets
if (filename MATCHES "^custom-")
string(JSON outputs GET "${contents}" outputs)
if (NOT output1 MATCHES "output1" OR NOT output2 MATCHES "output2")
snippet_error("${snippet}" "Custom command missing outputs")
endif()
endif()
# Verify contents of test-* Snippets
if (filename MATCHES "^test-")
string(JSON testName GET "${contents}" testName)
if (NOT testName STREQUAL "test")
snippet_error("${snippet}" "Unexpected testName: ${testName}")
endif()
endif()
# Verify that Config is Debug
if (filename MATCHES "^test|^compile|^link")
string(JSON config GET "${contents}" config)
if (NOT config STREQUAL "Debug")
snippet_error(${snippet} "Unexpected config: ${config}")
endif()
endif()
# Verify command args were passed
if (filename MATCHES "^cmakeBuild|^ctest")
string(JSON command GET "${contents}" command)
if (NOT command MATCHES "-.* Debug")
snippet_error(${snippet} "Command value missing passed arguments")
endif()
endif()
endforeach()
# Verify that listed snippets match expected roles
set(EXPECTED_SNIPPETS configure generate)
if (ARGS_BUILD)
list(APPEND EXPECTED_SNIPPETS compile link custom cmakeBuild)
endif()
if (ARGS_TEST)
list(APPEND EXPECTED_SNIPPETS ctest test)
endif()
if (ARGS_INSTALL)
list(APPEND EXPECTED_SNIPPETS cmakeInstall)
if (ARGS_INSTALL_PARALLEL)
list(APPEND EXPECTED_SNIPPETS install)
endif()
endif()
foreach(role IN LISTS EXPECTED_SNIPPETS)
list(FIND FOUND_SNIPPETS "${role}" found)
if (found EQUAL -1)
add_error("No snippet files of role \"${role}\" were found in ${v1}")
endif()
endforeach()
foreach(role IN LISTS FOUND_SNIPPETS)
list(FIND EXPECTED_SNIPPETS "${role}" found)
if (${found} EQUAL -1)
add_error("Found unexpected snippet file of role \"${role}\" in ${v1}")
endif()
endforeach()
# Verify test/install artifacts
if (ARGS_INSTALL AND NOT EXISTS ${RunCMake_TEST_BINARY_DIR}/install)
add_error("ctest --instrument launcher failed to install the project")
endif()
if (ARGS_TEST AND NOT EXISTS ${RunCMake_TEST_BINARY_DIR}/Testing)
add_error("ctest --instrument launcher failed to test the project")
endif()