include(RunCTest) if(NOT DEFINED TIMEOUT) # Give the process time to load and start running. set(TIMEOUT 4) endif() function(run_ctest_timeout CASE_NAME) configure_file(${RunCMake_SOURCE_DIR}/TestTimeout.c ${RunCMake_BINARY_DIR}/${CASE_NAME}/TestTimeout.c COPYONLY) run_ctest(${CASE_NAME} ${ARGN}) endfunction() run_ctest_timeout(Basic) if(WIN32) string(CONCAT CASE_CMAKELISTS_SUFFIX_CODE [[ set_tests_properties(TestTimeout PROPERTIES TIMEOUT_SIGNAL_NAME SIGUSR1 TIMEOUT_SIGNAL_GRACE_PERIOD 1.2 ) ]]) run_ctest_timeout(SignalWindows) unset(CASE_CMAKELISTS_SUFFIX_CODE) else() string(CONCAT CASE_CMAKELISTS_SUFFIX_CODE [[ target_compile_definitions(TestTimeout PRIVATE FORK) ]]) run_ctest_timeout(Fork) unset(CASE_CMAKELISTS_SUFFIX_CODE) string(CONCAT CASE_CMAKELISTS_SUFFIX_CODE [[ target_compile_definitions(TestTimeout PRIVATE SIGNAL) set_tests_properties(TestTimeout PROPERTIES TIMEOUT_SIGNAL_NAME SIGUSR1 TIMEOUT_SIGNAL_GRACE_PERIOD 1.2 ) ]]) run_ctest_timeout(Signal) unset(CASE_CMAKELISTS_SUFFIX_CODE) string(CONCAT CASE_CMAKELISTS_SUFFIX_CODE [[ target_compile_definitions(TestTimeout PRIVATE SIGNAL SIGNAL_IGNORE=1) set_tests_properties(TestTimeout PROPERTIES TIMEOUT_SIGNAL_NAME SIGUSR1 # Use default TIMEOUT_SIGNAL_GRACE_PERIOD of 1. ) ]]) run_ctest_timeout(SignalIgnore) unset(CASE_CMAKELISTS_SUFFIX_CODE) string(CONCAT CASE_CMAKELISTS_SUFFIX_CODE [[ set_tests_properties(TestTimeout PROPERTIES TIMEOUT_SIGNAL_NAME NOTASIG ) ]]) run_ctest_timeout(SignalUnknown) unset(CASE_CMAKELISTS_SUFFIX_CODE) string(CONCAT CASE_CMAKELISTS_SUFFIX_CODE [[ set_tests_properties(TestTimeout PROPERTIES TIMEOUT_SIGNAL_NAME SIGUSR1 TIMEOUT_SIGNAL_GRACE_PERIOD -1 ) ]]) run_ctest_timeout(SignalGraceLow) unset(CASE_CMAKELISTS_SUFFIX_CODE) string(CONCAT CASE_CMAKELISTS_SUFFIX_CODE [[ set_tests_properties(TestTimeout PROPERTIES TIMEOUT_SIGNAL_NAME SIGUSR1 TIMEOUT_SIGNAL_GRACE_PERIOD 1000 ) ]]) run_ctest_timeout(SignalGraceHigh) unset(CASE_CMAKELISTS_SUFFIX_CODE) endif() block() # An explicit zero TIMEOUT test property means "no timeout". set(TIMEOUT 0) # The test sleeps for 4 seconds longer than the TIMEOUT value. # Set a default timeout to less than that so that the test will # timeout if the zero TIMEOUT does not suppress it. run_ctest_timeout(ZeroOverridesFlag --timeout 2) set(CASE_TEST_PREFIX_CODE "set(CTEST_TEST_TIMEOUT 2)") run_ctest_timeout(ZeroOverridesVar) endblock() block() set(TIMEOUT 4) set(CASE_TEST_PREFIX_CODE "set(CTEST_TEST_TIMEOUT 2)") set(CASE_CMAKELISTS_SUFFIX_CODE "set_property(TEST TestTimeout PROPERTY TIMEOUT 10)\n") run_ctest_timeout(PropertyOverridesScript) endblock()