diff --git a/Modules/CTestTargets.cmake b/Modules/CTestTargets.cmake index 0a08b71781..5a7232facf 100644 --- a/Modules/CTestTargets.cmake +++ b/Modules/CTestTargets.cmake @@ -44,6 +44,9 @@ block() ${CMAKE_ROOT}/Modules/DartConfiguration.tcl.in ${PROJECT_BINARY_DIR}/DartConfiguration.tcl ) endif() + configure_file( + ${CMAKE_ROOT}/Templates/CTestScript.cmake.in + ${PROJECT_BINARY_DIR}/CMakeFiles/CTestScript.cmake @ONLY) endblock() # @@ -73,7 +76,9 @@ if(NOT _CTEST_TARGETS_ADDED) # For all generators add basic testing targets. foreach(mode Experimental Nightly Continuous NightlyMemoryCheck) add_custom_target(${mode} - ${CMAKE_CTEST_COMMAND} ${__conf_types} -D ${mode} + COMMAND + ${CMAKE_CTEST_COMMAND} ${__conf_types} + -DMODEL=${mode} -S CMakeFiles/CTestScript.cmake -V USES_TERMINAL ) set_property(TARGET ${mode} PROPERTY RULE_LAUNCH_CUSTOM "") @@ -89,7 +94,10 @@ if(NOT _CTEST_TARGETS_ADDED) # missing purify ) add_custom_target(${mode}${testtype} - ${CMAKE_CTEST_COMMAND} ${__conf_types} -D ${mode}${testtype} + COMMAND + ${CMAKE_CTEST_COMMAND} ${__conf_types} + -DMODEL=${mode} -DACTIONS=${testtype} + -S CMakeFiles/CTestScript.cmake -V USES_TERMINAL ) set_property(TARGET ${mode}${testtype} PROPERTY RULE_LAUNCH_CUSTOM "") diff --git a/Templates/CTestScript.cmake.in b/Templates/CTestScript.cmake.in new file mode 100644 index 0000000000..54bfda48ee --- /dev/null +++ b/Templates/CTestScript.cmake.in @@ -0,0 +1,167 @@ +# This file is configured by CMake automatically as CTestScript.cmake +# If you choose not to use CMake, this file may be hand configured, by +# filling in the required variables. + +cmake_minimum_required(VERSION @CMAKE_VERSION@) + +# CTest Start Step +set(CTEST_SOURCE_DIRECTORY "@PROJECT_SOURCE_DIR@") +set(CTEST_BINARY_DIRECTORY "@PROJECT_BINARY_DIR@") + +# CTest Update Step +set(CTEST_UPDATE_COMMAND "@UPDATE_COMMAND@") +set(CTEST_UPDATE_OPTIONS "@UPDATE_OPTIONS@") +set(CTEST_UPDATE_VERSION_ONLY "@CTEST_UPDATE_VERSION_ONLY@") +set(CTEST_NIGHTLY_START_TIME "@NIGHTLY_START_TIME@") + +# CVS options +set(CTEST_CVS_COMMAND "@CVSCOMMAND@") +set(CTEST_CVS_UPDATE_OPTIONS "@CVS_UPDATE_OPTIONS@") + +# Subversion options +set(CTEST_SVN_COMMAND "@SVNCOMMAND@") +set(CTEST_SVN_OPTIONS "@CTEST_SVN_OPTIONS@") +set(CTEST_SVN_UPDATE_OPTIONS "@SVN_UPDATE_OPTIONS@") + +# Git options +set(CTEST_GIT_COMMAND "@GITCOMMAND@") +set(CTEST_GIT_INIT_SUBMODULES "@CTEST_GIT_INIT_SUBMODULES@") +set(CTEST_GIT_UPDATE_CUSTOM "@CTEST_GIT_UPDATE_CUSTOM@") +set(CTEST_GIT_UPDATE_OPTIONS "@GIT_UPDATE_OPTIONS@") + +# Perforce options +set(CTEST_P4_COMMAND "@P4COMMAND@") +set(CTEST_P4_CLIENT "@CTEST_P4_CLIENT@") +set(CTEST_P4_OPTIONS "@CTEST_P4_OPTIONS@") +set(CTEST_P4_UPDATE_CUSTOM "@CTEST_P4_UPDATE_CUSTOM@") +set(CTEST_P4_UPDATE_OPTIONS "@CTEST_P4_UPDATE_OPTIONS@") + +# CTest Configure Step +set(CTEST_CMAKE_GENERATOR "@CMAKE_GENERATOR@") +set(CTEST_LABELS_FOR_SUBPROJECTS "@CTEST_LABELS_FOR_SUBPROJECTS@") + +# CTest Build Step +set(CTEST_CONFIGURATION_TYPE "@DEFAULT_CTEST_CONFIGURATION_TYPE@") +set(CTEST_USE_LAUNCHERS "@CTEST_USE_LAUNCHERS@") + +# CTest Test Step +set(CTEST_RESOURCE_SPEC_FILE "@CTEST_RESOURCE_SPEC_FILE@") +set(CTEST_TEST_LOAD "@CTEST_TEST_LOAD@") +set(CTEST_TEST_TIMEOUT "@DART_TESTING_TIMEOUT@") + +# CTest Coverage Step +set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@") +set(CTEST_COVERAGE_EXTRA_FLAGS "@COVERAGE_EXTRA_FLAGS@") + +# CTest MemCheck Step +set(CTEST_MEMORYCHECK_COMMAND "@MEMORYCHECK_COMMAND@") +set(CTEST_MEMORYCHECK_COMMAND_OPTIONS "@MEMORYCHECK_COMMAND_OPTIONS@") +set(CTEST_MEMORYCHECK_TYPE "@MEMORYCHECK_TYPE@") +set(CTEST_MEMORYCHECK_SANITIZER_OPTIONS "@MEMORYCHECK_SANITIZER_OPTIONS@") +set(CTEST_MEMORYCHECK_SUPPRESSIONS_FILE "@MEMORYCHECK_SUPPRESSIONS_FILE@") + +# CTest Submit Step +set(CTEST_SITE "@SITE@") +set(CTEST_BUILD_NAME "@BUILDNAME@") +set(CTEST_SUBMIT_URL "@SUBMIT_URL@") +set(CTEST_SUBMIT_INACTIVITY_TIMEOUT "@CTEST_SUBMIT_INACTIVITY_TIMEOUT@") +set(CTEST_TLS_VERIFY "@CTEST_TLS_VERIFY@") +set(CTEST_TLS_VERSION "@CTEST_TLS_VERSION@") + +################################################################################ + +if(NOT MODEL) + set(MODEL "Experimental") +endif() + +if(MODEL STREQUAL "NightlyMemoryCheck") + set(MODEL "Nightly") + set(ACTIONS "Start;Update;Configure;Build;MemCheck;Coverage;Submit") +endif() + +if(NOT ACTIONS) + if(MODEL STREQUAL "Experimental") + set(ACTIONS "Start;Configure;Build;Test;Coverage;Submit") + else() + set(ACTIONS "Start;Update;Configure;Build;Test;Coverage;Submit") + endif() +endif() + +################################################################################ + +set(_exit_code 0) + +if("Start" IN_LIST ACTIONS OR NOT EXISTS "${CTEST_BINARY_DIRECTORY}/Testing/TAG") + ctest_start("${MODEL}") +else() + ctest_start("${MODEL}" APPEND) +endif() + +if("Update" IN_LIST ACTIONS) + ctest_update(RETURN_VALUE update_count) + if(update_count LESS 0) + math(EXPR _exit_code "${_exit_code} | 0x01") + endif() + if(MODEL STREQUAL "Continuous" AND update_count EQUAL 0) + return() + endif() +endif() + +if("Configure" IN_LIST ACTIONS) + ctest_configure(RETURN_VALUE success) + if(success LESS 0) + math(EXPR _exit_code "${_exit_code} | 0x02") + endif() +endif() + +if("Build" IN_LIST ACTIONS) + ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}") + ctest_build(RETURN_VALUE success) + if(NOT success EQUAL 0) + math(EXPR _exit_code "${_exit_code} | 0x04") + endif() +endif() + +if("Test" IN_LIST ACTIONS) + ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}") + ctest_test(RETURN_VALUE success) + if(NOT success EQUAL 0) + math(EXPR _exit_code "${_exit_code} | 0x08") + endif() +endif() + +if("Coverage" IN_LIST ACTIONS) + ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}") + ctest_coverage(RETURN_VALUE success) + if(NOT success EQUAL 0) + math(EXPR _exit_code "${_exit_code} | 0x20") + endif() +endif() + +if("MemCheck" IN_LIST ACTIONS) + ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}") + ctest_memcheck(RETURN_VALUE success) + if(NOT success EQUAL 0) + math(EXPR _exit_code "${_exit_code} | 0x10") + endif() +endif() + +file(GLOB notes_files LIST_DIRECTORIES OFF + "${CTEST_BINARY_DIRECTORY}/Testing/Notes/*") +if(notes_files) + list(APPEND CTEST_NOTES_FILES "${notes_files}") +endif() + +if("Submit" IN_LIST ACTIONS) + ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}") + ctest_submit( + RETRY_COUNT "@CTEST_SUBMIT_RETRY_COUNT@" + RETRY_DELAY "@CTEST_SUBMIT_RETRY_DELAY@" + RETURN_VALUE success + ) + if(NOT success EQUAL 0) + math(EXPR _exit_code "${_exit_code} | 0x40") + endif() +endif() + +cmake_language(EXIT "${_exit_code}")