From: Martin Quinson Date: Sat, 3 Sep 2016 14:51:56 +0000 (+0200) Subject: test memcheck builds with valgrind X-Git-Tag: v3_14~419^2~14 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/ec0aa62eff5bf853def947a010e09d2eff06682d?ds=sidebyside test memcheck builds with valgrind - Add a --wrapper option to valgrind - Setup this option with TESH_WRAPPER in cmake - Setup TESH_WRAPPER to the right content when valgrind is detected --- diff --git a/tools/cmake/Modules/FindValgrind.cmake b/tools/cmake/Modules/FindValgrind.cmake index fbe10d77b7..4afd05bf88 100644 --- a/tools/cmake/Modules/FindValgrind.cmake +++ b/tools/cmake/Modules/FindValgrind.cmake @@ -8,30 +8,24 @@ find_program(VALGRIND_EXE /sw /usr ) +mark_as_advanced(VALGRIND_EXE) -if(VALGRIND_EXE) - message(STATUS "Found valgrind: ${VALGRIND_EXE}") - set (TESH_OPTION ${TESH_OPTION} --setenv VALGRIND_COMMAND=${CMAKE_HOME_DIRECTORY}/tools/cmake/scripts/my_valgrind.pl) -endif() +if(enable_memcheck) + if (NOT VALGRIND_EXE MATCHES "NOTFOUND") + execute_process(COMMAND ${VALGRIND_EXE} --version OUTPUT_VARIABLE "VALGRIND_VERSION") + message(STATUS "Valgrind version: ${VALGRIND_VERSION}") -if(enable_memcheck_xml) - SET(VALGRIND_EXTRA_COMMAND_OPTIONS "--xml=yes\ --xml-file=memcheck_test_%p.memcheck\ --child-silent-after-fork=yes") -endif() + set(TESH_WRAPPER ${CMAKE_HOME_DIRECTORY}/tools/cmake/scripts/my_valgrind.pl) + set(TESH_WRAPPER ${TESH_WRAPPER}\ --trace-children=yes\ --trace-children-skip=/usr/bin/*,/bin/*\ --leak-check=full\ --show-reachable=yes\ --track-origins=no\ --read-var-info=no\ --num-callers=20\ --suppressions=${CMAKE_HOME_DIRECTORY}/tools/simgrid.supp\ ) + if(enable_memcheck_xml) + SET(TESH_WRAPPER ${TESH_WRAPPER}\ --xml=yes\ --xml-file=memcheck_test_%p.memcheck\ --child-silent-after-fork=yes\ ) + endif() -if(VALGRIND_EXE) - execute_process(COMMAND ${VALGRIND_EXE} --version OUTPUT_VARIABLE "VALGRIND_VERSION") - string(REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" NEW_VALGRIND_VERSION "${VALGRIND_VERSION}") - if(NEW_VALGRIND_VERSION) - message(STATUS "Valgrind version: ${NEW_VALGRIND_VERSION}") - set (TESH_OPTION ${TESH_OPTION} --setenv "VALGRIND_OPTIONS=--trace-children=yes\ --trace-children-skip=/usr/bin/*,/bin/*\ --leak-check=full\ --show-reachable=yes\ --track-origins=no\ --read-var-info=no\ --num-callers=20\ --suppressions=${CMAKE_HOME_DIRECTORY}/tools/simgrid.supp\ ${VALGRIND_EXTRA_COMMAND_OPTIONS}" ) - message(STATUS "Valgrind options: ${TESH_OPTION}") +# message(STATUS "tesh wrapper: ${TESH_WRAPPER}") + + mark_as_advanced(TESH_WRAPPER) else() set(enable_memcheck false) message(STATUS "Error: Command valgrind not found --> enable_memcheck autoset to false.") endif() -else() - set(enable_memcheck false) - message(FATAL_ERROR "Command valgrind not found --> enable_memcheck autoset to false.") endif() - -mark_as_advanced(VALGRIND_EXE) diff --git a/tools/cmake/Tests.cmake b/tools/cmake/Tests.cmake index f15edfd240..a85ee3deb8 100644 --- a/tools/cmake/Tests.cmake +++ b/tools/cmake/Tests.cmake @@ -27,7 +27,11 @@ MACRO(ADD_TESH NAME) IF(WIN32) STRING(REPLACE "§" "\;" ARGT "${ARGT}") ENDIF() - ADD_TEST(${NAME} ${TESH_COMMAND} ${TESH_OPTION} ${ARGT}) + if(TESH_WRAPPER) + ADD_TEST(${NAME} ${TESH_COMMAND} --wrapper "${TESH_WRAPPER}" ${TESH_OPTION} ${ARGT}) + else() + ADD_TEST(${NAME} ${TESH_COMMAND} ${TESH_OPTION} ${ARGT}) + endif() ENDMACRO() MACRO(ADD_TESH_FACTORIES NAME FACTORIES) diff --git a/tools/cmake/scripts/my_valgrind.pl b/tools/cmake/scripts/my_valgrind.pl index 1b9067c7bd..6892b52ae6 100755 --- a/tools/cmake/scripts/my_valgrind.pl +++ b/tools/cmake/scripts/my_valgrind.pl @@ -1,7 +1,6 @@ #!/usr/bin/env perl -# Copyright (c) 2012-2014. The SimGrid Team. -# All rights reserved. +# Copyright (c) 2012-2016. The SimGrid Team. All rights reserved. # This program is free software; you can redistribute it and/or modify it # under the terms of the license (GNU LGPL) which comes with this package. @@ -13,7 +12,7 @@ my @argv = ("valgrind"); my $count = 0; while (defined(my $arg = shift)) { - #print "arg($count)$arg\n"; +# print "arg($count)$arg\n"; if ($arg =~ m!/smpirun$!) { @argv = ( $arg, "-wrapper", "@argv" ); } elsif ($arg eq "--cd") { @@ -27,8 +26,8 @@ while (defined(my $arg = shift)) { $count++; } -#print "COMMAND : $bin $option $cd $path\n"; -#print "cd $path\n"; -#print "valgrind --trace-children=yes --leak-check=full --show-reachable=yes --track-origins=yes --read-var-info=no $bin $option\n"; -#print "@argv\n\n"; +# print "COMMAND:"; +# map { print "$_ " } @argv; +# print "\n"; + system @argv; diff --git a/tools/tesh/tesh.py b/tools/tesh/tesh.py index 5f011b40f0..840130595f 100755 --- a/tools/tesh/tesh.py +++ b/tools/tesh/tesh.py @@ -48,11 +48,8 @@ import argparse if sys.version_info[0] == 3: import subprocess import _thread -elif sys.version_info[0] < 3: - import subprocess32 as subprocess - import thread as _thread else: - raise "This program has not been made to exist this long" + raise "This program is expected to run with Python3 only" @@ -174,9 +171,6 @@ class TeshState(Singleton): t.acquire() t.release() - - - #Command line object class Cmd(object): def __init__(self): @@ -289,7 +283,7 @@ class Cmd(object): if lock is not None: lock.release() return - self.args += TeshState().args_suffix + self.args = TeshState().wrapper + self.args + TeshState().args_suffix print("["+FileReader().filename+":"+str(self.linenumber)+"] "+self.args) @@ -365,12 +359,6 @@ class Cmd(object): - - - - - - ############## # # Main @@ -389,6 +377,7 @@ if __name__ == '__main__': group1.add_argument('--cfg', metavar='arg', help='add parameter --cfg=arg to each command line') group1.add_argument('--log', metavar='arg', help='add parameter --log=arg to each command line') group1.add_argument('--enable-coverage', action='store_true', help='ignore output lines starting with "profiling:"') + group1.add_argument('--wrapper', metavar='arg', help='Run each command in the provided wrapper (eg valgrind)') try: options = parser.parse_args() @@ -417,7 +406,9 @@ if __name__ == '__main__': TeshState().args_suffix += " --cfg="+options.cfg if options.log is not None: TeshState().args_suffix += " --log="+options.log - + + if options.wrapper is not None: + TeshState().wrapper = options.wrapper #cmd holds the current command line # tech commands will add some parameters to it @@ -508,8 +499,3 @@ if __name__ == '__main__': print("Test suite from stdin OK") else: print("Test suite `"+f.filename+"' OK") - - - - -