From 174648e110055e5287c70a83b2ea7c4021f82bda Mon Sep 17 00:00:00 2001 From: viciious Date: Wed, 26 Jun 2019 16:05:51 +0300 Subject: [PATCH] Automatically test samples for memory leaks in Travis --- .travis.valgrind.supp | 15 +++++++++++++++ .travis.yml | 25 ++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 .travis.valgrind.supp diff --git a/.travis.valgrind.supp b/.travis.valgrind.supp new file mode 100644 index 000000000..92ffa8927 --- /dev/null +++ b/.travis.valgrind.supp @@ -0,0 +1,15 @@ +{ + Driver_leaks_1 + Memcheck:Leak + obj:/usr/lib/x86_64-linux-gnu/dri/swrast_dri.so +} +{ + Driver_cond_1 + Memcheck:Cond + obj:/usr/lib/x86_64-linux-gnu/dri/swrast_dri.so +} +{ + Driver_leaks_2 + Memcheck:Leak + obj:/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so +} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 0cfa6816e..4f9ca079b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,7 +31,7 @@ matrix: - os: linux language: c++ compiler: gcc - env: MATRIX_EVAL="CC=gcc-7 CXX=g++-7" + env: MATRIX_EVAL="CC=gcc-7 CXX=g++-7" VALGRIND_SAMPLES="1" addons: apt: sources: @@ -46,6 +46,8 @@ matrix: - libglew-dev - liblua5.2-dev - libsfml-dev + - mesa-utils + - valgrind before_install: - if [[ -n "${MATRIX_EVAL}" ]]; then eval "${MATRIX_EVAL}" ; fi @@ -55,6 +57,27 @@ install: - if [[ "$TRAVIS_OS_NAME" != "osx" ]]; then cmake -DBUILD_LUA_BINDINGS=ON -DBUILD_SAMPLES=ON .; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then cmake -G Xcode .; fi +before_script: + - if [[ "$VALGRIND_SAMPLES" == "1" ]] && [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export DISPLAY=:99.0 && sh -e /etc/init.d/xvfb start && sleep 3; fi + script: - if [[ "$TRAVIS_OS_NAME" != "osx" ]]; then make -j4; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then xcodebuild -project rmlui.xcodeproj/ -jobs 4 -configuration Release -target ALL_BUILD; fi + - if [[ "$VALGRIND_SAMPLES" == "1" ]]; then mkdir build && make DESTDIR=build install; fi + - | + if [[ "$VALGRIND_SAMPLES" == "1" ]]; then + cnt=0 + vout=$(mktemp) + for f in $(find $TRAVIS_BUILD_DIR/build/usr/local/opt/RmlUi/Samples/ -executable -type f); do + cd `dirname $f` + sample=$(basename $f) + printf "\033[0;36m$sample\033[0m\n" + LD_LIBRARY_PATH=$TRAVIS_BUILD_DIR/build/usr/local/lib timeout --preserve-status --signal=TERM --kill-after=15 10 valgrind --leak-check=full --suppressions=$TRAVIS_BUILD_DIR/.travis.valgrind.supp --error-exitcode=1 --log-fd=1 ./$sample >>$vout + cnt=$((cnt+1)) + done; + + cat $vout + okcnt=$(grep 'ERROR SUMMARY: 0 errors' $vout | wc -l) + + if [[ "$okcnt" != "$cnt" ]]; then exit 1; fi + fi