From 10fe5143f4c19fbea73158a4aecded1f9516ed52 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Tue, 19 Dec 2023 08:46:56 -0500 Subject: [PATCH] Add CI for testing with zlib-ng Add a CI job to test qpdf with other than the default zlib implementation. This incldues a check that the new zlib really is not the default, so the new test will fail if the default because zlib-ng. --- .github/workflows/main.yml | 1 + README-maintainer.md | 5 +++++ build-scripts/test-alt-zlib | 39 +++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100755 build-scripts/test-alt-zlib diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9b635718..b86f3a28 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -133,6 +133,7 @@ jobs: script: - build-fuzzer - build-linux32 + - test-alt-zlib - test-unsigned-char - test-c++-next steps: diff --git a/README-maintainer.md b/README-maintainer.md index c7ae7296..67cbe35a 100644 --- a/README-maintainer.md +++ b/README-maintainer.md @@ -7,6 +7,7 @@ * [CHECKING DOCS ON readthedocs](#checking-docs-on-readthedocs) * [GOOGLE OSS-FUZZ](#google-oss-fuzz) * [CODING RULES](#coding-rules) +* [ZLIB COMPATIBILITY](#zlib-compatibility) * [HOW TO ADD A COMMAND-LINE ARGUMENT](#how-to-add-a-command-line-argument) * [RELEASE PREPARATION](#release-preparation) * [CREATING A RELEASE](#creating-a-release) @@ -272,6 +273,10 @@ Building docs from pull requests is also enabled. * Avoid attaching too much metadata to objects and object handles since those have to get copied around a lot. +## ZLIB COMPATIBILITY + +XXX Write this + ## HOW TO ADD A COMMAND-LINE ARGUMENT Quick reminder: diff --git a/build-scripts/test-alt-zlib b/build-scripts/test-alt-zlib new file mode 100755 index 00000000..41b3bb31 --- /dev/null +++ b/build-scripts/test-alt-zlib @@ -0,0 +1,39 @@ +#!/bin/bash +set -eo pipefail +sudo apt-get update +sudo apt-get -y install \ + build-essential cmake \ + zlib1g-dev libjpeg-dev libgnutls28-dev libssl-dev + +# Build and install zlib-ng +rm -rf /tmp/zlib-ng +pushd /tmp +git clone https://github.com/zlib-ng/zlib-ng +cd zlib-ng +cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/tmp/inst -DZLIB_COMPAT=ON +cmake --build build -j$(nproc) +(cd build; ctest --verbose) +cmake --install build +popd + +cmake -S . -B build \ + -DCI_MODE=1 -DBUILD_STATIC_LIBS=0 -DCMAKE_BUILD_TYPE=Release \ + -DREQUIRE_CRYPTO_OPENSSL=1 -DREQUIRE_CRYPTO_GNUTLS=1 \ + -DENABLE_QTC=1 +cmake --build build --verbose -j$(nproc) -- -k + +# Make sure we can use zlib-ng +sum1="$(./build/zlib-flate/zlib-flate -compress < README-maintainer.md | sha256sum -)" +export LD_PRELOAD=/tmp/inst/lib/libz.so.1 +sum2="$(./build/zlib-flate/zlib-flate -compress < README-maintainer.md | sha256sum -)" +if [ "$sum1" = "$sum2" ]; then + # If this happens, see if zlib-ng has become the default. If + # that's the case, rework this test to use some other alternaive + # zlib, such as the old one or any other API-compatible + # implementation. + echo "Using zlib-ng didn't change compression output" + exit 2 +fi + +# If this fails, please see ZLIB COMPATIBILITY in README-maintainer.md. +(cd build; ctest --verbose)