IF(NOT TARGET ${_target})
# only add the target once
- ADD_EXECUTABLE(${_target} EXCLUDE_FROM_ALL ${_test_name}.cc)
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}/timeout_guard.cc
+ COMMAND touch ${CMAKE_CURRENT_BINARY_DIR}/${_target}/timeout_guard.cc
+ )
+
+ ADD_EXECUTABLE(${_target} EXCLUDE_FROM_ALL ${_test_name}.cc
+ ${CMAKE_CURRENT_BINARY_DIR}/${_target}/timeout_guard.cc
+ )
SET_TARGET_PROPERTIES(${_target} PROPERTIES
LINK_FLAGS "${DEAL_II_LINKER_FLAGS} ${DEAL_II_LINKER_FLAGS_${_build}}"
-DEXPECT=${_expect}
-DADDITIONAL_OUTPUT=${ARGN}
-DDEAL_II_BINARY_DIR=${CMAKE_BINARY_DIR}
+ -DGUARD_FILE=${CMAKE_CURRENT_BINARY_DIR}/${_target}/timeout_guard.cc
-P ${DEAL_II_SOURCE_DIR}/cmake/scripts/run_test.cmake
WORKING_DIRECTORY ${_test_directory}
)
#
# ADDITIONAL_OUTPUT - A list of additional output lines that should be printed
#
+# GUARD_FILE - used to detect a forced interruption of this script: On
+# startup the backed up file ${GUARD_FILE}_back is put back
+# in place as ${GUARD_FILE} and on exit ${GUARD_FILE} is
+# backed up as ${GUARD_FILE}_back. If on startup a stale
+# ${GUARD_FILE} is found, it is deleted.
+#
+
+IF(NOT "${GUARD_FILE}" STREQUAL "" AND EXISTS ${GUARD_FILE})
+ #
+ # Guard file still exists, so this script must have been interrupted.
+ # Remove guard file to force a complete rerun:
+ #
+ EXECUTE_PROCESS(COMMAND rm -f ${GUARD_FILE})
+ELSEIF(NOT "${GUARD_FILE}" STREQUAL "" AND EXISTS ${GUARD_FILE}_bck)
+ #
+ # A backed up guard file exists. Put it back in place:
+ #
+ EXECUTE_PROCESS(COMMAND mv ${GUARD_FILE}_bck ${GUARD_FILE})
+ENDIF()
+
IF("${EXPECT}" STREQUAL "")
SET(EXPECT "PASSED")
MESSAGE("=============================== OUTPUT BEGIN ===============================")
IF("${_stage}" STREQUAL "PASSED")
- MESSAGE("${TEST}: PASSED.")
+ #MESSAGE("${TEST}: PASSED.")
+ MESSAGE(${_output})
ELSE()
MESSAGE("=============================== OUTPUT END ===============================")
+#
+# Back up guard file:
+#
+
+IF(NOT "${GUARD_FILE}" STREQUAL "" AND EXISTS ${GUARD_FILE})
+ EXECUTE_PROCESS(COMMAND mv ${GUARD_FILE} ${GUARD_FILE}_bck)
+ENDIF()
+
#
# Bail out:
#
STRING(TOLOWER ${_build} _build_lowercase)
SET(_test ${_category}/${_path}/${_file}.${_build_lowercase})
- STRING(REGEX REPLACE "\\/" "-" _target ${_test})
+ STRING(REGEX REPLACE "\\/" "-" _target ${_path}/${_file}.${_build_lowercase})
# Respect TEST_PICKUP_REGEX:
IF( "${TEST_PICKUP_REGEX}" STREQUAL "" OR
_test MATCHES "${TEST_PICKUP_REGEX}" )
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}_timeout_guard.cc
+ COMMAND touch ${CMAKE_CURRENT_BINARY_DIR}/${_target}_timeout_guard.cc
+ )
+
# Add an object library for each header file and build configuration:
- ADD_LIBRARY(${_target} OBJECT EXCLUDE_FROM_ALL test_header.cc)
+ ADD_LIBRARY(${_target} OBJECT EXCLUDE_FROM_ALL test_header.cc
+ ${CMAKE_CURRENT_BINARY_DIR}/${_target}_timeout_guard.cc
+ )
SET_TARGET_PROPERTIES(${_target} PROPERTIES
LINK_FLAGS "${DEAL_II_LINKER_FLAGS} ${DEAL_II_LINKER_FLAGS_${_build}}"
ADD_TEST(NAME ${_test}
COMMAND ${CMAKE_COMMAND} -DTRGT=${_target}.build -DTEST=${_test}
-DDEAL_II_BINARY_DIR=${CMAKE_BINARY_DIR}
+ -DGUARD_FILE=${CMAKE_CURRENT_BINARY_DIR}/${_target}_timeout_guard.cc
-P ${DEAL_II_SOURCE_DIR}/cmake/scripts/run_test.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
IF( "${TEST_PICKUP_REGEX}" STREQUAL "" OR
_test MATCHES "${TEST_PICKUP_REGEX}" )
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${_step_dir}/timeout_guard
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${_step_dir}
+ COMMAND touch ${_step_dir}/timeout_guard
+ )
+
SET(_step_dir ${CMAKE_CURRENT_BINARY_DIR}/${_step}.${_build_lowercase})
FILE(GLOB _files ${_step_full}/*)
# A rule how to copy the example step to the current directory:
ADD_CUSTOM_COMMAND(OUTPUT ${_step_dir}/CMakeLists.txt
- COMMAND ${CMAKE_COMMAND} -E make_directory ${_step_dir}
${_command}
DEPENDS
${_files}
${DEAL_II_TARGET_DEBUG}
${DEAL_II_TARGET_RELEASE}
+ ${_step_dir}/timeout_guard
)
# And a rule on how to configure the example step:
ITEM_MATCHES(_match ${_step} ${_${_build_lowercase}_steps})
IF(_match)
# Add a full test (CONFIGURE, BUILD, RUN):
- SET(_target ${_category}-${_step}.${_build_lowercase}.run)
+ SET(_target ${_step}.${_build_lowercase}.run)
ADD_CUSTOM_TARGET(${_target}
COMMAND
echo "${_test}: CONFIGURE successful."
)
ELSE()
# Add a minimal test (CONFIGURE, BUILD):
- SET(_target ${_category}-${_step}.${_build_lowercase}.build)
+ SET(_target ${_step}.${_build_lowercase}.build)
ADD_CUSTOM_TARGET(${_target}
COMMAND
echo "${_test}: CONFIGURE successful."
ADD_TEST(NAME ${_test}
COMMAND ${CMAKE_COMMAND} -DTRGT=${_target} -DTEST=${_test}
-DDEAL_II_BINARY_DIR=${CMAKE_BINARY_DIR}
+ -DGUARD_FILE=${_step_dir}/timeout_guard
-P ${DEAL_II_SOURCE_DIR}/cmake/scripts/run_test.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)