From 9878ce05e75421820115b8eaaf3752ab4bd06e57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Blot?= Date: Mon, 6 Mar 2017 20:34:02 +0100 Subject: [PATCH] CI: Add memleak checking using valgrind (#5350) Add a new step to check memleaks on our current unit tests suite --- .travis.yml | 4 ++++ util/travis/before_install.sh | 3 +++ util/travis/script.sh | 9 ++++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 534479efb..3274aedaf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,10 @@ matrix: - env: PLATFORM=Unix COMPILER=clang compiler: clang os: linux + - env: PLATFORM=Unix COMPILER=clang VALGRIND=1 + compiler: clang + os: linux + dist: trusty - env: PLATFORM=Unix COMPILER=g++-6 compiler: gcc os: linux diff --git a/util/travis/before_install.sh b/util/travis/before_install.sh index 891371984..ea85b3db6 100755 --- a/util/travis/before_install.sh +++ b/util/travis/before_install.sh @@ -18,6 +18,9 @@ if [[ $PLATFORM == "Unix" ]]; then # Linking to LevelDB is broken, use a custom build wget http://minetest.kitsunemimi.pw/libleveldb-1.18-ubuntu12.04.7z sudo 7z x -o/usr libleveldb-1.18-ubuntu12.04.7z + if [[ "$VALGRIND" == "1" ]]; then + sudo apt-get install valgrind + fi else brew update brew install freetype gettext hiredis irrlicht jpeg leveldb libogg libvorbis luajit diff --git a/util/travis/script.sh b/util/travis/script.sh index 24a74d186..84ea578a5 100755 --- a/util/travis/script.sh +++ b/util/travis/script.sh @@ -24,8 +24,15 @@ if [[ $PLATFORM == "Unix" ]]; then -DBUILD_SERVER=TRUE \ $CMAKE_FLAGS .. make -j2 + echo "Running unit tests." - ../bin/minetest --run-unittests && exit 0 + CMD="../bin/minetest --run-unittests" + if [[ "$VALGRIND" == "1" ]]; then + valgrind --leak-check=full --leak-check-heuristics=all --undef-value-errors=no --error-exitcode=9 ${CMD} && exit 0 + else + ${CMD} && exit 0 + fi + elif [[ $PLATFORM == Win* ]]; then [[ $CC == "clang" ]] && exit 1 # Not supposed to happen # We need to have our build directory outside of the minetest directory because