build: link tests and benches against shared library, not static library #972
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: linux | |
on: | |
push: | |
branches: [ master ] | |
pull_request: | |
branches: [ master ] | |
# Set permissions at the job level. | |
permissions: {} | |
jobs: | |
linux: | |
runs-on: ubuntu-22.04 | |
permissions: | |
contents: read | |
strategy: | |
matrix: | |
compiler: [clang, gcc] | |
sanitizers: ['sanitizers', 'no sanitizer'] | |
exclude: | |
- compiler: clang | |
sanitizers: sanitizers | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
persist-credentials: false | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade meson PyYAML ruff | |
sudo apt update | |
sudo apt install -y \ | |
doxygen libxcb-xkb-dev valgrind ninja-build \ | |
libwayland-dev wayland-protocols bison graphviz libicu-dev \ | |
${{ matrix.sanitizers == 'sanitizers' && 'libasan8 libubsan1' || '' }} | |
- name: Install xkeyboard-config | |
run: | | |
# Install master version of xkeyboard-config, in order to ensure | |
# its latest version works well with xkbcommon. | |
# HACK: We use meson to install, while it would be cleaner | |
# to create a proper package to install or use some PPA. | |
pushd ~ | |
git clone --depth=1 https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config.git | |
cd "xkeyboard-config" | |
BUILDDIR=build | |
meson setup $BUILDDIR -Dprefix=/usr | |
meson install -C $BUILDDIR | |
popd | |
- name: Setup | |
run: | | |
# -gdwarf-4 - see https://github.com/llvm/llvm-project/issues/56550. | |
CFLAGS='-gdwarf-4 -fno-omit-frame-pointer' \ | |
meson setup -Denable-docs=true -Denable-cool-uris=true \ | |
$MESON_EXTRA_FLAGS \ | |
build | |
env: | |
CC: ${{ matrix.compiler }} | |
# Use sanitizers only if not using Valgrind | |
MESON_EXTRA_FLAGS: ${{ matrix.sanitizers == 'sanitizers' && '-Db_sanitize=address,undefined' || '' }} | |
- name: Build | |
run: | | |
meson compile -C build | |
- name: Test | |
run: | |
meson test -C build --print-errorlogs --no-suite python-tests | |
- name: Test with valgrind | |
if: matrix.sanitizers != 'sanitizers' | |
run: | |
meson test -C build --print-errorlogs --setup=valgrind --no-suite python-tests | |
- name: Upload test logs | |
uses: actions/upload-artifact@v4 | |
if: failure() | |
with: | |
name: test logs | |
path: | | |
build/meson-logs/ | |
- name: Ensure doxygen version is correct | |
run: | | |
doxygen --version > version.txt | |
echo "1.9.6" >> version.txt | |
if [ $(sort -V version.txt | tail -n1) != "1.9.6" ]; then | |
echo "Doxygen version 1.9.6 or earlier expected, see #347" | |
exit 1 | |
fi | |
- name: Store doxygen docs for use by the pages workflow | |
uses: actions/upload-artifact@v4 | |
if: success() && matrix.compiler == 'gcc' && matrix.sanitizers == 'sanitizers' | |
with: | |
name: doxygen-docs | |
path: | | |
build/html/ | |
- name: Ruff format | |
run: | |
ruff format --line-length=88 --check --diff . |