When I attempt to execute my CTest script it complains that "Memory checker (MemoryCheckCommand) not set, or cannot find the specified program" but DartConfiguration.tcl
has been created and MemoryCheckCommand
is correctly set to /usr/bin/valgrind
.
This is simplified layout of my project:
.
├── SOURCES
│ ├── build
│ │ ├── CMakeCache.txt
│ │ [...]
│ ├── CMakeLists.txt
│ └── src
│ ├── CMakeLists.txt
│ [..]
├── gcc.cmake
└── TESTS
├── build
│ ├── x86
│ │ ├── CMakeCache.txt
│ │ ├── DartConfiguration.tcl
│ │ [...]
│ └── x86_64
│ ├── CMakeCache.txt
│ ├── DartConfiguration.tcl
│ [...]
├── CMakeLists.txt
├── CTestConfig.cmake
├── ctest_scripts
│ ├── TestValgrindJob64.cmake
│ └── TestValgrindJob.cmake
├── fakes
│ ├── CMakeLists.txt
│ [..]
├── libs
│ ├── googletest
│ │ ├── CMakeLists.txt
│ │ [..]
│ └── linux-9.3.0
│ ├── gmock
│ │ │
│ │ [..]
│ ├── gtest
│ │ │
│ │ [..]
│ ├── x86
│ │ ├── libgmock.a
│ │ └── libgtest.a
│ └── x86_64
│ ├── libgmock.a
│ └── libgtest.a
├── mocks
│ ├── CMakeLists.txt
│ [..]
├── stubs
│ ├── CMakeLists.txt
│ [..]
├── unittests
│ ├── CMakeLists.txt
│ [..]
├── x86_64.cmake
└── x86.cmake
Relevant bits of TESTS/CMakeLists.txt
:
include(CTestConfig.cmake)
include(CTest)
#include(CTestUseLaunchers)
#enable_testing()
add_test(NAME Test1 COMMAND ${PROJECT_NAME})
CTestConfig.cmake
:
set(CTEST_PROJECT_NAME "ProjectTest1")
set(CTEST_USE_LAUNCHERS YES)
CTest script TestValgrindJob64.cmake
-- note 4 messages printing out MEMORYCHECK_COMMAND
, CTEST_SCRIPT_DIRECTORY
, CTEST_SOURCE_DIRECTORY
and CTEST_BINARY_DIRECTORY
:
include(${CTEST_SCRIPT_DIRECTORY}/../CTestConfig.cmake)
message("MEMORYCHECK_COMMAND ${MEMORYCHECK_COMMAND}")
message("CTEST_SCRIPT_DIRECTORY ${CTEST_SCRIPT_DIRECTORY}")
site_name(CTEST_SITE)
set(CTEST_BUILD_CONFIGURATION "Valgrind64")
set(CTEST_BUILD_NAME "${CMAKE_HOST_SYSTEM_NAME}-Val64")
set(CTEST_SOURCE_DIRECTORY "${CTEST_SCRIPT_DIRECTORY}/..")
message("CTEST_SOURCE_DIRECTORY ${CTEST_SOURCE_DIRECTORY}")
set(CTEST_BINARY_DIRECTORY "${CTEST_SCRIPT_DIRECTORY}/../build/x86_64")
message("CTEST_BINARY_DIRECTORY ${CTEST_BINARY_DIRECTORY}")
set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
set(CTEST_CONFIGURATION_TYPE RelWithDebInfo)
#set(CTEST_MEMORYCHECK_COMMAND "/usr/bin/valgrind")
set(CTEST_MEMORYCHECK_COMMAND_OPTIONS "--tool=memcheck --leak-check=full --show-reachable=yes --num-callers=20 --track-fds=yes --track-origins=yes --error-exitcode=1")
set(configureOpts "-DCXXFLAGS=-m64")
ctest_empty_binary_directory(${CTEST_BINARY_DIRECTORY})
ctest_start(Experimental)
ctest_configure(OPTIONS "${configureOpts}")
ctest_build()
ctest_memcheck()
If I attempt to execute script from TESTS/ctest_scripts
with ctest -S TestValgrindJob64.cmake
I get the following output:
MEMORYCHECK_COMMAND
CTEST_SCRIPT_DIRECTORY /home/user1/project/TESTS/ctest_scripts
CTEST_SOURCE_DIRECTORY /home/user1/project/TESTS/ctest_scripts/..
CTEST_BINARY_DIRECTORY /home/user1/project/TESTS/ctest_scrips/../build/x86_64
Each . represents 1024 bytes of output
. Size of output: 0K
Each symbol represents 1024 bytes of output.
.. Size of output: 1K
Error(s) when building project
Memory checker (MemoryCheckCommand) not set, or cannot find the specified program.
DartConfiguration.tcl
file exists before and after script is executed and, as previously mentioned, MemoryCheckCommand
is set:
MemoryCheckCommand: /usr/bin/valgrind
whereis
finds valgrind
in /usr/bin/valgrind
.
Any idea what I'm doing wrong here? Is CMake still ignoring DartConfiguration.tcl
file?