From 4708e9720832071474b03528afc038b60bd5bea7 Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Mon, 17 Nov 2014 12:47:24 +0200 Subject: [PATCH] Added a 'testall-valgrind' target to CMake that runs the full test suite with Valgrind. --- CMakeLists.txt | 19 +++++++++++++++++++ FindValgrind.cmake | 13 +++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 FindValgrind.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index a9d8cbef1..2f2990397 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,10 @@ set_maxscale_version() set(CMAKE_INSTALL_PREFIX "${INSTALL_DIR}" CACHE INTERNAL "Prefix prepended to install directories." FORCE) +message(STATUS "$CMAKE_MODULE_PATH:${CMAKE_MODULE_PATH}") +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/") +message(STATUS "CMAKE_MODULE_PATH:${CMAKE_MODULE_PATH}") +find_package(Valgrind) project(MaxScale) check_deps() @@ -149,11 +153,13 @@ set(CPACK_RPM_USER_FILELIST "%ignore /etc/init.d") set(CPACK_RPM_USER_FILELIST "%ignore /etc/ld.so.conf.d") set(CPACK_RPM_USER_FILELIST "%ignore /etc") include(CPack) + add_custom_target(buildtests COMMAND ${CMAKE_COMMAND} -DDEPS_OK=Y -DBUILD_TESTS=Y -DBUILD_TYPE=Debug -DINSTALL_DIR=${CMAKE_BINARY_DIR} -DINSTALL_SYSTEM_FILES=N ${CMAKE_SOURCE_DIR} COMMAND make COMMENT "Building test suite..." VERBATIM ) + add_custom_target(testall COMMAND ${CMAKE_COMMAND} -DDEPS_OK=Y -DBUILD_TESTS=Y -DBUILD_TYPE=Debug -DINSTALL_DIR=${CMAKE_BINARY_DIR} -DINSTALL_SYSTEM_FILES=N ${CMAKE_SOURCE_DIR} COMMAND make install @@ -185,3 +191,16 @@ if(DOXYGEN_FOUND) COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygate) endif() + +# Testall target with Valgrind +if(VALGRIND_FOUND) +add_custom_target(testall-valgrind + COMMAND ${CMAKE_COMMAND} -DDEPS_OK=Y -DBUILD_TESTS=Y -DBUILD_TYPE=Debug -DINSTALL_DIR=${CMAKE_BINARY_DIR} -DINSTALL_SYSTEM_FILES=N ${CMAKE_SOURCE_DIR} + COMMAND make install + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/server/test/MaxScale_test.cnf ${CMAKE_BINARY_DIR}/etc/MaxScale.cnf + COMMAND /bin/sh -c "valgrind --track-fds=yes --leak-check=full --show-leak-kinds=all --log-file=${CMAKE_BINARY_DIR}/valgrind.log ${CMAKE_BINARY_DIR}/bin/maxscale -c ${CMAKE_BINARY_DIR} &>/dev/null" + COMMAND /bin/sh -c "make test || echo \"Test results written to: ${CMAKE_BINARY_DIR}/Testing/Temporary/\"" + COMMAND killall maxscale + COMMENT "Running full test suite with Valgrind..." VERBATIM) + +endif() \ No newline at end of file diff --git a/FindValgrind.cmake b/FindValgrind.cmake new file mode 100644 index 000000000..977d0028a --- /dev/null +++ b/FindValgrind.cmake @@ -0,0 +1,13 @@ +# This CMake file tries to find the Valgrind executable +# The following variables are set: +# VALGRIND_FOUND - System has Valgrind +# VALGRIND_EXECUTABLE - The Valgrind executable file +find_program(VALGRIND_EXECUTABLE valgrind) +if(VALGRIND_EXECUTABLE STREQUAL "VALGRIND_EXECUTABLE-NOTFOUND") + message(STATUS "Valgrind not found.") + set(VALGRIND_FOUND FALSE CACHE INTERNAL "") + unset(VALGRIND_EXECUTABLE) +else() + message(STATUS "Valgrind found: ${VALGRIND_EXECUTABLE}") + set(VALGRIND_FOUND TRUE CACHE INTERNAL "") +endif() \ No newline at end of file