find_package (Valgrind)
find_package (LCOV)
# static flags for test harness
set (TEST_FLAGS --debug)
# valgrind stuff
if (Valgrind_FOUND)
# suppressions file
set (VALGRIND_SUPPRESSIONS ${CMAKE_CURRENT_SOURCE_DIR}/valgrind-suppressions)
# static flags
set (VALGRIND_FLAGS --leak-check=yes --num-callers=30 --suppressions=${VALGRIND_SUPPRESSIONS})
# command
set (TEST_COMMAND ${Valgrind_EXECUTABLE})
set (TEST_ARGS ${VALGRIND_FLAGS} ${TEST_EXECUTABLE} ${TEST_FLAGS})
else (Valgrind_FOUND)
# plain command
set (TEST_COMMAND ${TEST_EXECUTABLE})
set (TEST_ARGS ${TEST_FLAGS})
endif (Valgrind_FOUND)
# add LCOV coverage stuff
if (LCOV_FOUND)
# static flags
set (LCOV_FLAGS )
set (LCOV_GENHTML_FLAGS )
# path to the file generated by `lcov --capture`
set (LCOV_CAPTURE_PATH ${CMAKE_CURRENT_BINARY_DIR}/lcov-capture-info)
message (STATUS "test object files are located in ${TEST_OBJECT_DIR}")
# unless coverage is disabled
if (ENABLE_TEST_COVERAGE)
# create the test target with lcov instrumentation
add_custom_target (test
COMMAND ${CMAKE_COMMAND} -DTEST_OBJECT_DIR="${TEST_OBJECT_DIR}" -P "${CMAKE_CURRENT_SOURCE_DIR}/CleanProfileData.cmake"
COMMAND ${TEST_COMMAND} ${TEST_ARGS}
COMMAND ${LCOV_EXECUTABLE} ${LCOV_FLAGS} --directory ${TEST_OBJECT_DIR} --capture --output-file ${LCOV_CAPTURE_PATH}
COMMAND ${LCOV_GENHTML_EXECUTABLE} ${LCOV_GENHTML_FLAGS} --output-directory ${CMAKE_CURRENT_BINARY_DIR} ${LCOV_CAPTURE_PATH}
)
set (TEST_TARGET_DEFINED TRUE)
endif (ENABLE_TEST_COVERAGE)
endif (LCOV_FOUND)
if (NOT TEST_TARGET_DEFINED)
# add default `test` target
add_custom_target (test
COMMAND ${TEST_COMMAND} ${TEST_ARGS}
)
set (TEST_TARGET_DEFINED TRUE)
endif (NOT TEST_TARGET_DEFINED)
# add utility targets to run the test_harness executable
add_custom_target (test_list
COMMAND ${TEST_EXECUTABLE} --list
)