Skip to content

Meson Build

Meson Build #634

Workflow file for this run

name: CI
on: [push, pull_request]
jobs:
build-test-linux:
runs-on: ubuntu-latest
container:
image: ${{ matrix.os == 'alpine' && 'alpine:latest' || matrix.os == 'ubuntu-20.04' && 'ubuntu:20.04' || 'ubuntu:latest' }}
strategy:
matrix:
os: [ubuntu, ubuntu-20.04, alpine]
build-system: [autotools, meson]
compiler: [gcc, clang]
tls: [openssl, mbedtls, none]
html-tests: [true, false]
exclude:
- os: ubuntu
html-tests: false
- os: ubuntu-20.04
html-tests: true
- os: alpine
html-tests: true
- os: alpine
tls: none
- os: ubuntu-20.04
tls: none
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install dependencies
run: |
if [ "${{ matrix.os }}" = "ubuntu" ] || [ "${{ matrix.os }}" = "ubuntu-20.04" ]; then
apt-get update
export DEBIAN_FRONTEND=noninteractive
apt-get install -y autotools-dev autoconf automake clang git imagemagick libfltk1.3-dev libmbedtls-dev libpng-dev libssl-dev libturbojpeg0-dev lld meson ninja-build pkg-config x11-apps x11-utils xvfb zlib1g-dev
else
apk add build-base autoconf automake clang fltk-dev git libpng-dev libjpeg-turbo-dev lld mbedtls-dev meson ninja-build openssl-dev
fi
- name: Set git safe directory
run: git config --global --add safe.directory ${GITHUB_WORKSPACE}
- name: Prepare Autotools
run: |
if [ ${{ matrix.build-system }} = "autotools" ]; then
./autogen.sh
mkdir install build
fi
- name: Configure Build
run: |
HTML_TESTS_OPT=""
if [ "${{matrix.compiler}}" = "clang" ]; then
export CC=clang CXX=clang++ LDFLAGS="-fuse-ld=lld -Wl,--as-needed"
fi
if [ "${{ matrix.build-system }}" = "autotools" ]; then
if [ "${{ matrix.tls }}" = "none" ]; then
export TLS_OPT="--disable-tls"
elif [ "${{ matrix.tls }}" = "mbedtls" ]; then
export TLS_OPT="--disable-openssl"
else
export TLS_OPT="--disable-mbedtls"
fi
if [ "${{ matrix.html-tests }}" = "true" ]; then
export HTML_TESTS_OPT="--enable-html-tests"
fi
else
if [ "${{ matrix.tls }}" = "none" ]; then
export TLS_OPT="-Dtls=disabled -Dopenssl=false -Dmbedtls=false"
elif [ "${{ matrix.tls }}" = "mbedtls" ]; then
export TLS_OPT="-Dmbedtls=true -Dopenssl=false"
else
export TLS_OPT="-Dopenssl=true -Dmbedtls=false"
fi
if [ "${{ matrix.html-tests }}" = "true" ]; then
export HTML_TESTS_OPT="-Dhtml-tests=enabled"
fi
fi
if [ "${{ matrix.build-system }}" = "autotools" ]; then
cd build
../configure --prefix=$(readlink -f ../install) ${TLS_OPT} ${HTML_TESTS_OPT}
else
meson setup build --prefix="$(pwd)/install" ${TLS_OPT} ${HTML_TESTS_OPT}
fi
- name: Build Dillo for ${{ matrix.os }} with ${{ matrix.build-system }} and ${{ matrix.compiler }}
run: |
if [ "${{ matrix.build-system }}" = "autotools" ]; then
cd build
make && make install
mkdir -p ~/.dillo/
cp ../install/etc/dillo/* ~/.dillo/
else
ninja -C build
fi
- name: Run tests
run: |
if [ "${{ matrix.build-system }}" = "autotools" ]; then
cd build
export DILLOBIN=$(readlink -f bin/dillo)
make check || (cat test/html/test-suite.log; false)
export DILLOBIN=
else
meson test -C build
fi
- name: Check release fits in a floppy disk of 1.44 MB
run: |
if [ "${{ matrix.build-system }}" = "autotools" ]; then
cd build
make dist-gzip
size=$(stat -c %s dillo-*.tar.gz)
floppy=$((1474560 - 32*1024)) # Leave room for FAT table
echo "Floppy occupation: $(($size * 100 / $floppy)) %"
if [ $size -lt $floppy ]; then
echo 'OK: Fits in floopy disk'
else
echo "FAIL: Release size too big: $size / $floppy"
exit 1
fi
else
echo "Skipping floppy disk check for Meson build; not yet implemented"
fi
- name: Run distcheck
run: |
HTML_TESTS_OPT=""
if [ "${{ matrix.html-tests }}" = "true" ]; then
HTML_TESTS_OPT="--enable-html-tests"
fi
if [ "${{ matrix.os}}" = "ubuntu" ]; then
if [ "${{ matrix.build-system }}" = "autotools" ]; then
mkdir build-distcheck install-distcheck
cd build-distcheck && ../configure --prefix=$(readlink -f ../install-distcheck) ${HTML_TESTS_OPT}
make distcheck DISTCHECK_CONFIGURE_FLAGS="${HTML_TESTS_OPT}"
else
echo "TODO: run \`meson dist -C build\`; currently errors out"
fi
else
echo "Skipping distcheck for OS ${{ matrix.os }}"
fi
macOS-13:
runs-on: macos-13
strategy:
matrix:
build-system: [autotools, meson]
compiler: [gcc, clang]
tls: [openssl-1.1, openssl-3, mbedtls]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Install dependencies
run: |
tls_lib=""
if [ "${{ matrix.tls }}" = "mbedtls" ]; then
tls_lib="mbedtls"
elif [ "${{ matrix.tls }}" = "openssl-3" ]; then
brew uninstall [email protected]
tls_lib="openssl@3"
fi
brew install autoconf automake clang lld fltk meson ${tls_lib}
- if: matrix.build-system == 'autotools'
name: Prepare Build
run: ./autogen.sh
- name: Configure Build
run: |
if [ "${{ matrix.compiler }}" = "clang" ]; then
export CC=clang CXX=clang++ LDFLAGS="-fuse-ld=lld -Wl,--as-needed"
fi
if [ "${{ matrix.build-system }}" = "autotools" ]; then
if [ "${{ matrix.tls }}" = "mbedtls" ]; then
./configure --disable-openssl
else
./configure --disable-mbedtls
fi
else
if [ "${{ matrix.tls }}" = "mbedtls" ]; then
meson setup build --buildtype=release --prefix=$(pwd)/install -Dmbedtls=true -Dopenssl=false
else
meson setup build --buildtype=release --prefix=$(pwd)/install -Dmbedtls=false -Dopenssl=true
fi
fi
- name: Build Dillo for macOS-13 with ${{ matrix.build-system }} and ${{ matrix.compiler }}
run: |
if [ "${{ matrix.build-system }}" = "autotools" ]; then
make
else
ninja -C build
fi
- name: Run tests
run: |
if [ "${{ matrix.build-system }}" = "autotools" ]; then
make check
else
meson test -C build
fi
- name: Run distcheck
run: |
if [ "${{ matrix.build-system }}" = "autotools" ]; then
make distcheck
else
echo "TODO: run \`meson dist -C build\`; currently errors out"
fi
freebsd-14:
runs-on: ubuntu-latest
strategy:
matrix:
build-system: [autotools, meson]
steps:
- uses: actions/checkout@v4
- name: FreeBSD VM build
id: test
uses: vmactions/freebsd-vm@v1
with:
release: "14.0"
usesh: true
prepare: |
set -x
pkg install -y automake fltk meson ninja
run: |
set -x
pwd
freebsd-version
if [ "${{ matrix.build-system }}" = "autotools" ]; then
./autogen.sh
./configure CPPFLAGS='-I/usr/local/include' LDFLAGS='-L/usr/local/lib'
cat config.log
make
make check
ldd src/dillo
else
CPPFLAGS='-I/usr/local/include' LDFLAGS='-L/usr/local/lib' meson setup build
ninja -C build
ninja -C build test
ldd build/src/dillo
fi
windows-mbedtls:
runs-on: windows-latest
strategy:
matrix:
build-system: [autotools, meson]
steps:
- run: git config --global core.autocrlf input
- uses: actions/checkout@v4
with:
fetch-depth: 1
- uses: cygwin/cygwin-install-action@master
with:
packages: autoconf automake gcc-core gcc-g++ libfltk-devel libgif-devel libiconv-devel libjpeg-devel libpng-devel make mbedtls-devel meson ninja zlib-devel
- shell: C:\cygwin\bin\bash.exe --login --norc -eo pipefail -o igncr '{0}'
run: |
set -x
cd ${GITHUB_WORKSPACE}
pwd
ls -l
if [ "${{ matrix.build-system }}" = "autotools" ]; then
./autogen.sh
./configure
make
make check
ls -l src/dillo
else
meson setup build
ninja -C build
ninja -C build test
ls -l build/src/dillo
fi