From f5baecdb362efb6afc3f2cfa6baad3cd324267f8 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 16 Jun 2022 11:01:04 +0100 Subject: [PATCH] build: Use add_test_setup() to allow tests to be run under valgrind This means we can specify the standard options for testing GLib under valgrind consistently, so that developers can use `meson test --setup=valgrind` to run them. Port the existing valgrind CI to use them (this will not change its functional behaviour). Suggested by Marco Trevisan at https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2717#note_1478891. Signed-off-by: Philip Withnall --- .gitlab-ci.yml | 3 +-- meson.build | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6673c237b..7e7f6cbdc 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -225,8 +225,7 @@ valgrind: # See https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2710 - ulimit -Sn 1024 - bash -x ./.gitlab-ci/run-tests.sh - --wrap "valgrind --tool=memcheck --error-exitcode=1 --track-origins=yes --leak-check=full --leak-resolution=high --num-callers=50 --show-leak-kinds=definite,possible --show-error-list=yes --suppressions=${CI_PROJECT_DIR}/tools/glib.supp" - --no-suite no-valgrind + --setup valgrind --no-suite slow # FIXME: Remove this when we have zero valgrind leaks. # https://gitlab.gnome.org/GNOME/glib/issues/333 diff --git a/meson.build b/meson.build index ee0a6234c..7f4bae4a0 100644 --- a/meson.build +++ b/meson.build @@ -102,6 +102,30 @@ installed_tests_template_tap = files('tests/template-tap.test.in') # Don’t build the tests unless we can run them (either natively, in an exe wrapper, or by installing them for later use) build_tests = get_option('tests') and (meson.can_run_host_binaries() or installed_tests_enabled) +# Allow the tests to be easily run under valgrind using --setup=valgrind +valgrind = find_program('valgrind', required: false) +if valgrind.found() + suppression_file = files('tools' / 'glib.supp') + + add_test_setup('valgrind', + exclude_suites: [ 'no-valgrind' ], + exe_wrapper: [ + valgrind, + '--tool=memcheck', + '--error-exitcode=1', + '--track-origins=yes', + '--leak-check=full', + '--leak-resolution=high', + '--num-callers=50', + '--show-leak-kinds=definite,possible', + '--show-error-list=yes', + '--suppressions=@0@'.format(meson.project_source_root() / + '@0@'.format(suppression_file[0])), + ], + timeout_multiplier: 10, + ) +endif + add_project_arguments('-D_GNU_SOURCE', language: 'c') if host_system == 'qnx'