tools/ccanlint: add global .valgrind_suppressions file.
authorRusty Russell <rusty@rustcorp.com.au>
Fri, 1 Aug 2014 07:06:39 +0000 (16:36 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Fri, 1 Aug 2014 07:06:39 +0000 (16:36 +0930)
Seems like my local Ubuntu install is giving bogus warnings.  Allow
local valgrind overrides.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
.gitignore
tools/ccanlint/tests/tests_pass.c
tools/ccanlint/tests/tests_pass.h
tools/ccanlint/tests/tests_pass_valgrind.c

index 061c08d017f0604b154b091af03c37d88ab70e23..60886efd9b3c33e7068b82844cb764d25e81d001 100644 (file)
@@ -1,5 +1,6 @@
 TAGS
 .depends
+.valgrind_suppressions
 *.d
 *.o
 libccan.a
index cb093264c74ba7d2a3500c49fe6b2151f6518395..af71dbe4c9f58cce4cc5da90a8e58da2c84b129b 100644 (file)
@@ -3,6 +3,7 @@
 #include <ccan/take/take.h>
 #include <ccan/str/str.h>
 #include <ccan/foreach/foreach.h>
+#include <ccan/tal/path/path.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -17,6 +18,7 @@
 #include "tests_pass.h"
 
 bool do_valgrind = false;
+const char *valgrind_suppress = "";
 
 static const char *can_run(struct manifest *m)
 {
@@ -27,9 +29,18 @@ static const char *can_run(struct manifest *m)
 
        if (!is_excluded("tests_pass_valgrind")
            && run_command(m, &timeleft, &output,
-                          "valgrind -q true"))
+                          "valgrind -q true")) {
+               const char *sfile;
+
                do_valgrind = true;
 
+               /* Check for suppressions file for all of CCAN. */
+               sfile = path_join(m, ccan_dir, ".valgrind_suppressions");
+               if (path_is_file(sfile))
+                       valgrind_suppress = tal_fmt(m, "--suppressions=%s",
+                                                   sfile);
+       }
+
        return NULL;
 }
 
@@ -67,9 +78,9 @@ static void run_test(void *ctx,
                        run_command_async(i, *timeleft,
                                          "valgrind -q"
                                          " --leak-check=full"
-                                         " --log-fd=3 %s %s"
+                                         " --log-fd=3 %s %s %s"
                                          " 3> %s",
-                                         options,
+                                         valgrind_suppress, options,
                                          i->compiled[COMPILE_NORMAL],
                                          i->valgrind_log);
                        return;
index bbf2b36fabaa40a221b153d3fb25fa3af423be51..19a692a02a2183e396386cefe4e66b5e3ab35f5d 100644 (file)
@@ -1,4 +1,5 @@
 /* Set in tests_pass. */
 extern bool do_valgrind;
+extern const char *valgrind_suppress;
 
 extern struct ccanlint tests_pass_valgrind;
index 5b4250bc1c0596537b7fc80bcea9964eafb728bf..2f4df18b47e4382a3ea8d7032f78411fece3b536 100644 (file)
@@ -251,10 +251,10 @@ static void run_under_debugger_vg(struct manifest *m, struct score *score)
                return;
 
        first = list_top(&score->per_file_errors, struct file_error, list);
-       command = tal_fmt(m, "valgrind --leak-check=full --db-attach=yes%s %s",
+       command = tal_fmt(m, "valgrind --leak-check=full --db-attach=yes%s %s %s",
                          concat(score, per_file_options(&tests_pass_valgrind,
                                                         first->file)),
-                         first->file->compiled[COMPILE_NORMAL]);
+                         valgrind_suppress, first->file->compiled[COMPILE_NORMAL]);
        if (system(command))
                doesnt_matter();
 }