cairo/.gitlab-ci.yml
Adrian Johnson f1b781e99d Build mingw-32 in CI with fontconfig disabled
This gives us one build in CI that has FreeType enabled and Fontconfig
disabled in order to ensure this combination builds.

Building the Fontconfig backend with Mingw is still checked in the
mingw-64 build.
2024-06-10 13:18:56 +09:30

450 lines
14 KiB
YAML

# -*- indent-tabs-mode: nil -*-
include:
- template: 'Workflows/Branch-Pipelines.gitlab-ci.yml'
- project: 'freedesktop/ci-templates'
ref: '98b1218f146a1ec96d65e3ce0041f9a6ec5cb5e6'
file: '/templates/fedora.yml'
# From https://gitlab.freedesktop.org/freedesktop/ci-templates/-/blob/master/src/gitlab-ci.tmpl
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
when: never
- if: $CI_COMMIT_BRANCH
variables:
FDO_UPSTREAM_REPO: 'cairo/cairo'
FDO_DISTRIBUTION_VERSION: '40'
FDO_DISTRIBUTION_TAG: '2024-05-25.0'
# TODO: should probably get its own image at some point instead of reusing the GStreamer one
# See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/.gitlab-image-tags.yml for latest
# (This one is from the lastest stable branch since it's likely to stay around unchanged for longer)
WINDOWS_IMAGE: "registry.freedesktop.org/gstreamer/gstreamer/amd64/windows:2024-03-05.0-1.24"
DEFAULT_MESON_ARGS: >
--default-library=both
stages:
- prep
- build
- test
# Global CI policy: This can be used to configure global behaviour our our jobs
default:
retry:
max: 2
when:
- 'runner_system_failure'
- 'stuck_or_timeout_failure'
- 'scheduler_failure'
- 'api_failure'
interruptible: true
.ccache_setup:
variables:
CCACHE_BASEDIR: "$CI_PROJECT_DIR"
CCACHE_DIR: "$CI_PROJECT_DIR/ccache"
CC: "ccache gcc"
CXX: "ccache g++"
before_script:
- mkdir -p ccache
- ccache --show-stats
cache:
# Each job will have it's own cache
key: "$CI_JOB_NAME"
paths:
- ccache/
fedora image:
extends:
- '.fdo.container-build@fedora'
stage: 'prep'
variables:
FDO_DISTRIBUTION_PACKAGES: >
meson
ninja-build
ccache
gcc
g++
zlib-devel
expat-devel
libpng-devel
fontconfig-devel
freetype-devel
libX11-devel
libXrender-devel
glib2-devel
librsvg2-devel
gtk2-devel
poppler-glib-devel
libspectre-devel
ghostscript
pixman-devel
systemd-devel
systemd-udev
expat-devel
which
diffutils
xorg-x11-server-Xvfb
dejavu-sans-fonts
dejavu-sans-mono-fonts
dejavu-serif-fonts
google-noto-emoji-color-fonts
google-noto-sans-vf-fonts
fonttools
util-linux
poppler-utils
.build fedora:
extends:
- '.fdo.distribution-image@fedora'
- '.ccache_setup'
stage: 'build'
variables:
MESON_ARGS: >
${DEFAULT_MESON_ARGS}
${EXTRA_MESON_ARGS}
script:
- export CFLAGS="-Werror -Wno-error=deprecated-declarations"
- meson setup ${MESON_ARGS} builddir
- meson compile -C builddir
# Run test scripts
- mkdir builddir/src/.libs
- touch builddir/src/.libs/libfoo.so
# Run all the tests, except for the big test executable which
# gets run separately
- meson test -C builddir --no-suite=slow --print-errorlogs
- meson install -C builddir
artifacts:
expire_in: "7 days"
when: "always"
paths:
- "*"
fedora build shared:
extends:
- '.build fedora'
variables:
EXTRA_MESON_ARGS: '--default-library=shared'
fedora build static:
extends:
- '.build fedora'
variables:
EXTRA_MESON_ARGS: '--default-library=static'
.test fedora:
dependencies:
- 'fedora build shared'
needs:
- 'fedora build shared'
extends:
- '.fdo.distribution-image@fedora'
- '.ccache_setup'
stage: 'test'
artifacts:
when: 'always'
expire_in: "7 days"
paths:
- builddir/meson-logs/*
- builddir/test/*.log
- builddir/test/pdiff/*.log
- builddir/test/output
exclude:
- "builddir/test/**/*.cs"
- "builddir/test/**/*.trace"
fedora build check-refs.sh:
extends: '.test fedora'
script:
# Check for duplicate reference images
- ./test/check-refs.sh "$(pwd)/builddir/test/pdiff/perceptualdiff"
test fedora pdf:
extends: '.test fedora'
script:
- export CAIRO_TEST_IGNORE_pdf_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-pdf-argb32.txt)
- export CAIRO_TEST_IGNORE_pdf_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-pdf-rgb24.txt)
- export CAIRO_TEST_TARGET=pdf
- export srcdir=../../test
- (cd builddir/test && xvfb-run ./cairo-test-suite)
test fedora ps2:
extends: '.test fedora'
script:
- export CAIRO_TEST_IGNORE_ps2_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-ps2-argb32.txt)
- export CAIRO_TEST_IGNORE_ps2_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-ps2-rgb24.txt)
- export CAIRO_TEST_TARGET=ps2
- export CAIRO_TEST_UGLY_HACK_TO_IGNORE_PS_FAILURES=1
- export srcdir=../../test
- (cd builddir/test && xvfb-run ./cairo-test-suite)
test fedora ps3:
extends: '.test fedora'
script:
- export CAIRO_TEST_IGNORE_ps3_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-ps3-argb32.txt)
- export CAIRO_TEST_IGNORE_ps3_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-ps3-rgb24.txt)
- export CAIRO_TEST_TARGET=ps3
- export CAIRO_TEST_UGLY_HACK_TO_IGNORE_PS_FAILURES=1
- export srcdir=../../test
- (cd builddir/test && xvfb-run ./cairo-test-suite)
test fedora script:
extends: '.test fedora'
script:
- export CAIRO_TEST_UGLY_HACK_TO_SOMETIMES_IGNORE_SCRIPT_XCB_HUGE_IMAGE_SHM=1
- export CAIRO_TEST_IGNORE_script_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-script-argb32.txt)
- export CAIRO_TEST_TARGET=script
- export srcdir=../../test
- (cd builddir/test && xvfb-run ./cairo-test-suite)
test fedora image:
extends: '.test fedora'
script:
- export CAIRO_TEST_IGNORE_image_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-image-argb32.txt)
- export CAIRO_TEST_IGNORE_image_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-image-rgb24.txt)
- export CAIRO_TEST_IGNORE_image16_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-image16-rgb24.txt)
- export CAIRO_TEST_TARGET=image,image16
- export srcdir=../../test
- (cd builddir/test && xvfb-run ./cairo-test-suite)
test fedora recording:
extends: '.test fedora'
script:
- export CAIRO_TEST_IGNORE_recording_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-recording-argb32.txt)
- export CAIRO_TEST_IGNORE_recording_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-recording-rgb24.txt)
- export CAIRO_TEST_TARGET=recording
- export srcdir=../../test
- (cd builddir/test && xvfb-run ./cairo-test-suite)
test fedora svg:
extends: '.test fedora'
script:
- export CAIRO_TEST_IGNORE_svg11_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-svg11-argb32.txt)
- export CAIRO_TEST_IGNORE_svg11_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-svg11-rgb24.txt)
- export CAIRO_TEST_TARGET=svg11
- export CAIRO_BOILERPLATE_OPEN_NO_DAEMON=1
- export CAIRO_BOILERPLATE_DO_NOT_CRASH_ON_ANY2PPM_ERROR=1
- export ANY2PPM="timeout 3m ./any2ppm"
- ulimit -S -s 131072
- export srcdir=../../test
- (cd builddir/test && xvfb-run ./cairo-test-suite)
test fedora xcb:
extends: '.test fedora'
script:
- export CAIRO_TEST_IGNORE_xcb_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-xcb-argb32.txt)
- export CAIRO_TEST_IGNORE_xcb_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xcb-rgb24.txt)
- export CAIRO_TEST_IGNORE_xcb_window_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xcb-window-rgb24.txt)
- export CAIRO_TEST_IGNORE_xcb_window__rgb24=$(tr '\n' ',' < '.gitlab-ci/ignore-xcb-window&-rgb24.txt')
- export CAIRO_TEST_IGNORE_xcb_render_0_0_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-xcb-render-0-0-argb32.txt)
- export CAIRO_TEST_IGNORE_xcb_render_0_0_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xcb-render-0-0-rgb24.txt)
- export CAIRO_TEST_IGNORE_xcb_fallback_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xcb-fallback-rgb24.txt)
- export CAIRO_TEST_TARGET="xcb,xcb-window,xcb-window&,xcb-render-0_0,xcb-fallback"
- export srcdir=../../test
- (cd builddir/test && xvfb-run ./cairo-test-suite)
test fedora xlib:
extends: '.test fedora'
script:
- export CAIRO_TEST_IGNORE_xlib_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-xlib-argb32.txt)
- export CAIRO_TEST_IGNORE_xlib_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xlib-rgb24.txt)
- export CAIRO_TEST_IGNORE_xlib_window_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xlib-window-rgb24.txt)
- export CAIRO_TEST_IGNORE_xlib_render_0_0_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xlib-render-0-0-rgb24.txt)
- export CAIRO_TEST_IGNORE_xlib_fallback_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-xlib-fallback-rgb24.txt)
- export CAIRO_TEST_TARGET="xlib,xlib-window,xlib-render-0_0,xlib-fallback"
- export srcdir=../../test
- (cd builddir/test && xvfb-run ./cairo-test-suite)
mingw-32 build:
extends:
- '.fdo.distribution-image@fedora'
stage: 'build'
before_script:
- dnf install -y 'dnf-command(builddep)'
- dnf builddep -y mingw32-cairo
- dnf install -y mingw32-gcc-c++
script:
- mkdir builddir
- cd builddir
# Test building with FreeType enabled and Fontconfig disabled
- mingw32-meson --default-library=both -Dfontconfig=disabled
- ninja install
artifacts:
expire_in: "7 days"
when: "always"
paths:
- 'builddir/meson-logs/'
mingw-64 build:
extends:
- '.fdo.distribution-image@fedora'
stage: 'build'
before_script:
- dnf install -y 'dnf-command(builddep)'
- dnf builddep -y mingw64-cairo
- dnf install -y mingw64-gcc-c++
script:
- mkdir builddir
- cd builddir
- mingw64-meson --default-library=both
- ninja install
artifacts:
expire_in: "7 days"
when: "always"
paths:
- 'builddir/meson-logs/'
# Based on https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/.gitlab-ci.yml (.build windows)
.build windows:
image: $WINDOWS_IMAGE
stage: 'build'
tags:
- 'docker'
- 'windows'
- '2022'
timeout: '30min'
variables:
MESON_ARGS: >
${DEFAULT_MESON_ARGS}
-Dfontconfig=enabled
-Dfreetype=enabled
-Dglib=enabled
-Dzlib=enabled
${EXTRA_MESON_ARGS}
before_script:
# Make sure meson is up to date, latest fontconfig requires a newer Meson than what's on the image
- pip3 install -U meson
script:
# Make sure powershell exists on errors
# https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_preference_variables?view=powershell-6
- $ErrorActionPreference = "Stop"
# Copy GLib from existing subproject cache to avoid downloading it
# FIXME: no longer cached in GStreamer image, using tarball for now
#- cd $env:CI_PROJECT_DIR
#- cp -r C:/subprojects/glib subprojects/
# For some reason, options are separated by newline instead of space, so we
# have to replace them first.
- $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ")
# Gitlab executes PowerShell in docker, but VsDevCmd.bat is a batch script.
# Environment variables substitutions is done by PowerShell before calling
# cmd.exe, that's why we use $env:FOO instead of %FOO%
- cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH &&
meson subprojects update --reset &&
meson build $env:MESON_ARGS &&
ninja -C build"
artifacts:
expire_in: "7 days"
when: "always"
paths:
- 'build/meson-logs/'
vs2019 shared amd64:
extends: '.build windows'
variables:
ARCH: 'amd64'
EXTRA_MESON_ARGS: '--default-library=shared'
vs2019 static amd64:
extends: '.build windows'
variables:
ARCH: 'amd64'
EXTRA_MESON_ARGS: '--default-library=static'
vs2019 shared x86:
extends: '.build windows'
variables:
ARCH: 'x86'
EXTRA_MESON_ARGS: '--default-library=shared'
android arm64 fedora:
# TODO: should probably build our own image here some day
# See https://gitlab.freedesktop.org/gstreamer/gstreamer/container_registry/7689 for current images
image: 'registry.freedesktop.org/gstreamer/gstreamer/amd64/android-fedora:2020-10-22.0-master'
stage: 'build'
artifacts:
name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}"
expire_in: '5 days'
when: 'always'
paths:
- "build/meson-logs/*.txt"
before_script:
- dnf install -y python3-pip gcc ninja-build gperf
- pip3 install --user meson
script:
- export PATH="$HOME/.local/bin:$PATH"
- |
cat > android-cross-file.txt <<EOF
[constants]
ndk_path = '/android/ndk'
toolchain = ndk_path + '/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android'
api = '28'
[host_machine]
system = 'android'
cpu_family = 'aarch64'
cpu = 'aarch64'
endian = 'little'
[properties]
sys_root = ndk_path + '/sysroot'
c_link_args = ['-fuse-ld=gold']
cpp_link_args = ['-fuse-ld=gold']
[binaries]
c = toolchain + api + '-clang'
cpp = toolchain + api + '-clang++'
ar = toolchain + '-ar'
strip = toolchain + '-strip'
EOF
- meson setup --cross-file android-cross-file.txt -Dpixman:a64-neon=disabled build
- meson compile --verbose -C build
macOS x86 host:
tags:
- gst-macos-12.3
stage: 'build'
artifacts:
when: 'always'
expire_in: "7 days"
paths:
- build/meson-logs/*.txt
- build/meson-private/*.pc
- build/test/*.log
- build/test/pdiff/*.log
- build/test/output
exclude:
- "build/test/**/*.cs"
- "build/test/**/*.trace"
before_script:
# Install the DejaVu fonts
- curl -LO https://downloads.sourceforge.net/dejavu/dejavu-fonts-ttf-2.37.zip
- unzip dejavu-fonts-ttf-2.37.zip
- cp dejavu-fonts-ttf-2.37/ttf/*.ttf /Library/Fonts
# Update pip
- pip3 install --upgrade pip
# Make sure meson is up to date
- pip3 install -U meson
# Need to install certificates for Python
- pip3 install --upgrade certifi
# Anther way to install certificates
- open /Applications/Python\ 3.8/Install\ Certificates.command
# Get ninja
- pip3 install -U ninja
script:
- CERT_PATH=$(python3 -m certifi) && export SSL_CERT_FILE=${CERT_PATH} && export REQUESTS_CA_BUNDLE=${CERT_PATH}
# pixman region-test fails to link on macOS
- meson setup -Dpixman:tests=disabled build
- meson compile --verbose -C build
# Test cairo-quartz. Other backends should be covered by other jobs
- export CAIRO_TEST_IGNORE_quartz_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-quartz-argb32.txt)
- export CAIRO_TEST_IGNORE_quartz_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-quartz-rgb24.txt)
- export CAIRO_TEST_TARGET=quartz
- (cd build/test && srcdir=../../test ./cairo-test-suite)