From 1e784d7ed0fbe26f65015af2f6dcacdaecdd2d1f Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Wed, 7 May 2014 09:32:08 -0400 Subject: [PATCH] valgrind and gcov commands are searched for in PATH --- tests/run_tests.py | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/tests/run_tests.py b/tests/run_tests.py index 381e491f80..837ae2ff63 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -74,12 +74,12 @@ set (CTEST_BUILD_OPTIONS "{build_opts}") set(CTEST_UPDATE_COMMAND "git") set(CTEST_CONFIGURE_COMMAND "${{CMAKE_COMMAND}} -H${{CTEST_SOURCE_DIRECTORY}} -B${{CTEST_BINARY_DIRECTORY}} ${{CTEST_BUILD_OPTIONS}}") -set(CTEST_MEMORYCHECK_COMMAND "valgrind") +set(CTEST_MEMORYCHECK_COMMAND "{valgrind_cmd}") set(CTEST_MEMORYCHECK_COMMAND_OPTIONS "--tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes") set(MEM_CHECK {mem_check}) set(ENV{{MEM_CHECK}} ${{MEM_CHECK}}) -set(CTEST_COVERAGE_COMMAND "gcov") +set(CTEST_COVERAGE_COMMAND "{gcov_cmd}") set(COVERAGE {coverage}) set(ENV{{COVERAGE}} ${{COVERAGE}}) @@ -116,6 +116,8 @@ class Test(object): self.success = True self.msg = None self.skipped = False + self.valgrind_cmd = "" + self.gcov_cmd = "" self.cmake = ['cmake', '-H../src', '-Bbuild'] # Check for MPI/HDF5 @@ -233,6 +235,30 @@ class Test(object): format((os.path.join(path, self.fc))) self.success = False + # Get valgrind command from user's environment + def find_valgrind(self): + result = False + for path in os.environ["PATH"].split(":"): + if os.path.isfile(os.path.join(path, 'valgrind')): + self.valgrind_cmd = os.path.join(path, 'valgrind') + result = True + break + if not result: + self.msg = 'valgrind not found.' + self.success = False + + # Get coverage command from user's environment + def find_coverage(self): + result = False + for path in os.environ["PATH"].split(":"): + if os.path.isfile(os.path.join(path, 'gcov')): + self.gcov_cmd = os.path.join(path, 'gcov') + result = True + break + if not result: + self.msg = 'gcov not found.' + self.success = False + # Simple function to add a test to the global tests dictionary def add_test(name, debug=False, optimize=False, mpi=False, openmp=False,\ hdf5=False, petsc=False, valgrind=False, coverage=False): @@ -389,11 +415,25 @@ for key in iter(tests): if not test.success: continue + # Get valgrind command + if test.valgrind: + test.find_valgrind() + if not test.success: + continue + + # Get coverage command + if test.coverage: + test.find_coverage() + if not test.success: + continue + # Set test specific CTest script vars. Not used in non-script mode ctest_vars.update({'build_name' : test.get_build_name()}) ctest_vars.update({'build_opts' : test.get_build_opts()}) ctest_vars.update({'mem_check' : test.valgrind}) ctest_vars.update({'coverage' : test.coverage}) + ctest_vars.update({'valgrind_cmd' : test.valgrind_cmd}) + ctest_vars.update({'gcov_cmd' : test.gcov_cmd}) # Check for user custom tests # INCLUDE is a CTest command that allows for a subset