summaryrefslogtreecommitdiffstats
path: root/functions.cmake
diff options
context:
space:
mode:
authorArnstein Ressem <aressem@yahoo-inc.com>2016-08-23 13:46:55 +0200
committerArnstein Ressem <aressem@yahoo-inc.com>2016-08-23 13:46:55 +0200
commit4cfed2e622ddfd06975850f6f00e95d600602e64 (patch)
treec2a285807746c7b5e727810b5b3ce1064067c8a3 /functions.cmake
parent32e45e8676ab6129033b59bb8cb30549cfe4a090 (diff)
Make it possible to automatically run tests after linking.
Diffstat (limited to 'functions.cmake')
-rw-r--r--functions.cmake52
1 files changed, 42 insertions, 10 deletions
diff --git a/functions.cmake b/functions.cmake
index 7064a81e2f7..69cc455de65 100644
--- a/functions.cmake
+++ b/functions.cmake
@@ -328,28 +328,55 @@ function(__is_command_a_script COMMAND RESULT_VAR)
list(GET COMMAND 0 FIRST)
__is_script_extension(${FIRST} IS_SCRIPT_EXT)
+ if (IS_SCRIPT_EXT)
+ set(THE_SCRIPT ${FIRST})
+ endif()
list(LENGTH COMMAND COMMAND_LENGTH)
if(COMMAND_LENGTH GREATER 1 AND NOT IS_SCRIPT_EXT)
list(GET COMMAND 1 SECOND)
__is_script_extension(${SECOND} IS_SCRIPT_EXT)
+ if (IS_SCRIPT_EXT)
+ set(THE_SCRIPT ${SECOND})
+ endif()
endif()
set(${RESULT_VAR} ${IS_SCRIPT_EXT} PARENT_SCOPE)
+
+ if(THE_SCRIPT AND ARGV2)
+ set(${ARGV2} ${THE_SCRIPT} PARENT_SCOPE)
+ endif()
endfunction()
function(vespa_add_test)
- cmake_parse_arguments(ARG "NO_VALGRIND;RUN_SERIAL;BENCHMARK" "NAME;WORKING_DIRECTORY;ENVIRONMENT" "COMMAND" ${ARGN})
+ cmake_parse_arguments(ARG "NO_VALGRIND;RUN_SERIAL;BENCHMARK" "NAME;WORKING_DIRECTORY;ENVIRONMENT" "COMMAND;DEPENDS" ${ARGN})
if(NOT RUN_BENCHMARKS AND ARG_BENCHMARK)
return()
endif()
+ __is_command_a_script("${ARG_COMMAND}" IS_SCRIPT THE_SCRIPT)
+ if(IS_SCRIPT)
+ list(APPEND TEST_DEPENDENCIES ${THE_SCRIPT})
+ else()
+ list(GET ARG_COMMAND 0 COMMAND_FIRST)
+ if(TARGET ${COMMAND_FIRST})
+ list(APPEND TEST_DEPENDENCIES ${COMMAND_FIRST})
+ endif()
+ endif()
+ if(ARG_DEPENDS)
+ list(APPEND TEST_DEPENDENCIES ${ARG_DEPENDS})
+ endif()
+
+ list(LENGTH TEST_DEPENDENCIES TEST_DEPENDENCIES_LENGTH)
+ if(${TEST_DEPENDENCIES_LENGTH} EQUAL 0)
+ message(FATAL_ERROR "Test does not have any dependencies. This is not allowed.")
+ endif()
+
if(VALGRIND_UNIT_TESTS AND NOT ARG_NO_VALGRIND)
if(NOT VALGRIND_EXECUTABLE)
message(FATAL_ERROR "Requested valgrind tests, but could not find valgrind executable.")
endif()
- __is_command_a_script("${ARG_COMMAND}" IS_SCRIPT)
if(IS_SCRIPT)
# For shell scripts, export a VALGRIND environment variable
list(APPEND ARG_ENVIRONMENT "VALGRIND=${VALGRIND_COMMAND}")
@@ -365,21 +392,26 @@ function(vespa_add_test)
endif()
set(ARG_COMMAND "${VALGRIND_COMMAND} ${COMMAND_FIRST} ${COMMAND_REST}")
endif()
-
- separate_arguments(ARG_COMMAND)
endif()
+ separate_arguments(ARG_COMMAND)
add_test(NAME ${ARG_NAME} COMMAND ${ARG_COMMAND} WORKING_DIRECTORY ${ARG_WORKING_DIRECTORY})
- if(ARG_ENVIRONMENT)
- set_tests_properties(${ARG_NAME} PROPERTIES ENVIRONMENT "SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR};${ARG_ENVIRONMENT}")
- else()
- set_tests_properties(${ARG_NAME} PROPERTIES ENVIRONMENT "SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}")
- endif()
-
+ list(APPEND ARG_ENVIRONMENT "SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}")
+ set_tests_properties(${ARG_NAME} PROPERTIES ENVIRONMENT "${ARG_ENVIRONMENT}")
if(ARG_RUN_SERIAL)
set_tests_properties(${TEST_NAME} PROPERTIES RUN_SERIAL TRUE)
endif()
+
+ if (AUTORUN_UNIT_TESTS)
+ set(CONTROL_FILE "${ARG_NAME}.run")
+ add_custom_target("${CONTROL_FILE}_target" ALL DEPENDS ${CONTROL_FILE})
+ add_custom_command(OUTPUT ${CONTROL_FILE}
+ COMMAND ctest --output-on-failure -R ${ARG_NAME} || (rm -f ${CONTROL_FILE} && false)
+ COMMAND touch ${CONTROL_FILE}
+ DEPENDS ${TEST_DEPENDENCIES}
+ COMMENT "Executing ${ARG_COMMAND}")
+ endif()
endfunction()
function(vespa_install_script)