ci: test Valgrind

Using `--trace-children=yes` has a trade-off here, as it makes
`test_scripts.sh` pretty slow when calling various non-xz utilities.

But I also feel like it's not useless to have Valgrind used there and it's
not easy to exclude Valgrind just for that one test...

I did consider using AX_VALGRIND_CHECK [0][1] but I couldn't get it working
immediately with some conditionally-built tests and I wondered if it was
worth spending time on at least while we're debating xz's future build
system situation.

[0] https://www.gnu.org/software/autoconf-archive/ax_valgrind_check.html
[1] https://tecnocode.co.uk/2014/12/23/automatically-valgrinding-code-with-ax_valgrind_check/

(cherry picked from commit 6c095a98fb)
This commit is contained in:
Sam James 2024-04-10 11:43:10 +01:00 committed by Lasse Collin
parent 5d20a61205
commit 2d2d5f14b3
2 changed files with 15 additions and 4 deletions

View File

@ -37,7 +37,7 @@ jobs:
if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }} if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }}
run: | run: |
sudo apt-get update sudo apt-get update
sudo apt-get install -y autoconf automake build-essential po4a autopoint gcc-multilib doxygen musl-tools sudo apt-get install -y autoconf automake build-essential po4a autopoint gcc-multilib doxygen musl-tools valgrind
# Install Autotools on Mac # Install Autotools on Mac
- name: Install Dependencies - name: Install Dependencies
@ -89,6 +89,15 @@ jobs:
./build-aux/ci_build.sh -b autotools -p test -f "-fsanitize=address,undefined" -d sandbox ./build-aux/ci_build.sh -b autotools -p test -f "-fsanitize=address,undefined" -d sandbox
cd ../xz_build && make distclean cd ../xz_build && make distclean
- name: Build with Valgrind
if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }}
run: ./build-aux/ci_build.sh -b autotools -p build -d sandbox
- name: Test with Valgrind
if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }}
run: |
./build-aux/ci_build.sh -b autotools -p test -d sandbox -w "valgrind --quiet --trace-children=yes --exit-on-first-error=yes --error-exitcode=1"
cd ../xz_build && make distclean
- name: Build with musl libc - name: Build with musl libc
if: ${{ matrix.os == 'ubuntu-latest'}} if: ${{ matrix.os == 'ubuntu-latest'}}
run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -p build -m "/usr/bin/musl-gcc" run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -p build -m "/usr/bin/musl-gcc"

View File

@ -53,7 +53,7 @@ ARTIFACTS_DIR_NAME="output"
# Parse arguments # # Parse arguments #
################### ###################
while getopts a:b:c:d:l:m:n:s:p:f:h opt; do while getopts a:b:c:d:l:m:n:s:p:f:w:h opt; do
# b option can have either value "autotools" OR "cmake" # b option can have either value "autotools" OR "cmake"
case ${opt} in case ${opt} in
h) h)
@ -108,6 +108,8 @@ while getopts a:b:c:d:l:m:n:s:p:f:h opt; do
CFLAGS="$OPTARG" CFLAGS="$OPTARG"
export CFLAGS export CFLAGS
;; ;;
w) WRAPPER="$OPTARG"
;;
esac esac
done done
@ -260,7 +262,7 @@ then
autotools) autotools)
cd "$DEST_DIR" cd "$DEST_DIR"
# If the tests fail, copy the test logs into the artifacts folder # If the tests fail, copy the test logs into the artifacts folder
if make check if make check LOG_COMPILER="$WRAPPER"
then then
: :
else else
@ -271,7 +273,7 @@ then
;; ;;
cmake) cmake)
cd "$DEST_DIR" cd "$DEST_DIR"
if make test if ${WRAPPER} make test
then then
: :
else else