fontconfig: Branch 'main' - 3 commits

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 .gitlab-ci.yml               |  840 +++++++++++++++++++++++++++++--------------
 .gitlab-ci/.gitignore        |    1 
 .gitlab-ci/build.sh          |  132 ++++++
 .gitlab-ci/ci.template       |  200 ++++++++++
 .gitlab-ci/config.yml        |   86 ++++
 .gitlab-ci/fedora-cross.sh   |    3 
 .gitlab-ci/fedora-install.sh |    3 
 .gitlab-ci/other.yml         |  142 +++++++
 8 files changed, 1142 insertions(+), 265 deletions(-)

New commits:
commit b1d149347a48b2484e93ffbbb2bc4c39462a46cf
Author: Akira TAGOH <akira@xxxxxxxxx>
Date:   Thu Apr 6 16:46:54 2023 +0900

    Rework CI implementation v2

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f495fe5..9387806 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -20,6 +20,7 @@ include:
   - project: 'freedesktop/ci-templates'
     ref: *template_sha
     file: '/templates/ci-fairy.yml'
+  - local: '.gitlab-ci/other.yml'
 
 stages:
   - prep
@@ -34,7 +35,7 @@ variables:
 # changing these will force rebuilding the associated image
 # Note: these tags have no meaning and are not tied to a particular
 # fontconfig version
-  FEDORA_TAG:  '2023-03-31.0-b6a9c5563c63'
+  FEDORA_TAG:  '2023-03-31.0-e8249e0940af'
 
   FEDORA_EXEC: 'bash .gitlab-ci/fedora-install.sh'
 
@@ -48,46 +49,32 @@ variables:
 # will re-use the containers if the tag doesn't change.
 
 fedora:rawhide@container-prep:
-  extends:
-    - .fdo.container-build@fedora
+  extends: .fdo.container-build@fedora
   stage: prep
   variables:
     GIT_STRATEGY: none
     FDO_DISTRIBUTION_VERSION: 'rawhide'
-    FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip'
+    FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip mingw64-gettext mingw64-freetype mingw64-libxml2 wine'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
     FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
 
 fedora:38@container-prep:
-  extends:
-    - .fdo.container-build@fedora
+  extends: .fdo.container-build@fedora
   stage: prep
   variables:
     GIT_STRATEGY: none
     FDO_DISTRIBUTION_VERSION: '38'
-    FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip'
+    FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip mingw64-gettext mingw64-freetype mingw64-libxml2 wine'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
     FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
 
 fedora:37@container-prep:
-  extends:
-    - .fdo.container-build@fedora
+  extends: .fdo.container-build@fedora
   stage: prep
   variables:
     GIT_STRATEGY: none
     FDO_DISTRIBUTION_VERSION: '37'
-    FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip'
-    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
-    FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
-
-fedora:36@container-prep:
-  extends:
-    - .fdo.container-build@fedora
-  stage: prep
-  variables:
-    GIT_STRATEGY: none
-    FDO_DISTRIBUTION_VERSION: '36'
-    FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip'
+    FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip mingw64-gettext mingw64-freetype mingw64-libxml2 wine'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
     FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
 
@@ -151,15 +138,6 @@ fedora:37@container-clean:
     FDO_DISTRIBUTION_VERSION: '37'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
 
-fedora:36@container-clean:
-  extends:
-    - .container-clean
-  variables:
-    GIT_STRATEGY: none
-    CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
-    FDO_DISTRIBUTION_VERSION: '36'
-    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
-
 
 #######################################
 #                                     #
@@ -167,72 +145,7 @@ fedora:36@container-clean:
 #                                     #
 #######################################
 
-.build autotools shared expat:
-  stage: test
-  script:
-    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
-    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
-    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
-    - export MAKEFLAGS="-j4"
-    - mkdir "$BUILDDIR" "$PREFIX"
-    - cd "$BUILDDIR"
-    - env
-    - r=0
-    - ../autogen.sh --prefix="$PREFIX" --enable-shared --disable-static --disable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
-    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - make distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - mv /tmp/fc-build.log .
-    - exit $r
-.build autotools shared libxml2:
-  stage: test
-  script:
-    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
-    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
-    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
-    - export MAKEFLAGS="-j4"
-    - mkdir "$BUILDDIR" "$PREFIX"
-    - cd "$BUILDDIR"
-    - env
-    - r=0
-    - ../autogen.sh --prefix="$PREFIX" --enable-shared --disable-static --enable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
-    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - make distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - mv /tmp/fc-build.log .
-    - exit $r
-.build autotools static expat:
-  stage: test
-  script:
-    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
-    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
-    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
-    - export MAKEFLAGS="-j4"
-    - mkdir "$BUILDDIR" "$PREFIX"
-    - cd "$BUILDDIR"
-    - env
-    - r=0
-    - ../autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --disable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
-    - make check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - mv /tmp/fc-build.log .
-    - exit $r
-.build autotools static libxml2:
-  stage: test
-  script:
-    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
-    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
-    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
-    - export MAKEFLAGS="-j4"
-    - mkdir "$BUILDDIR" "$PREFIX"
-    - cd "$BUILDDIR"
-    - env
-    - r=0
-    - ../autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --enable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
-    - make check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - mv /tmp/fc-build.log .
-    - exit $r
-.build meson shared:
-  stage: test
+.build@template:
   before_script:
     - pip install meson
   script:
@@ -240,32 +153,28 @@ fedora:36@container-clean:
     - export PREFIX="$(pwd)/prefix-$BUILD_ID"
     - export BUILDDIR="$(pwd)/build-$BUILD_ID"
     - export MAKEFLAGS="-j4"
-    - env
-    - r=0
-    - meson --prefix="$PREFIX" --default-library=shared "$BUILDDIR" 2>&1 | tee /tmp/fc-build.log || r=$?
-    - meson compile -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
-    - meson test -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
-    - meson install -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
-    - meson dist -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
-    - mv /tmp/fc-build.log .
-    - exit $r
-.build meson static:
-  stage: test
-  before_script:
-    - pip install meson
-  script:
-    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
-    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
-    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
-    - export MAKEFLAGS="-j4"
-    - env
-    - r=0
-    - meson --prefix="$PREFIX" --default-library=static "$BUILDDIR" 2>&1 | tee /tmp/fc-build.log || r=$?
-    - meson compile -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
-    - meson test -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
-    - meson install -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
-    - mv /tmp/fc-build.log .
-    - exit $r
+    - |
+      buildopt=()
+      for bo in $FC_BUILD_ENABLED; do
+        buildopt+=(-e $bo)
+      done
+      for bo in $FC_BUILD_DISABLED; do
+        buildopt+=(-d $bo)
+      done
+      [ -n "$FC_BUILD_ARCH" ] && buildopt+=(-a $FC_BUILD_ARCH)
+      [ $FC_BUILD_DISTCHECK -eq 1 ] && buildopt+=(-c)
+      [ $FC_BUILD_NO_INSTALL -eq 1 ] && buildopt+=(-I)
+      buildopt+=(-s $FC_BUILDSYS)
+      buildopt+=(-t $FC_BUILD_TYPE)
+      buildopt+=(-X $FC_XML_BACKEND)
+      sh .gitlab-ci/build.sh ${buildopt[*]}
+  variables:
+    FC_BUILDSYS: autotools
+    FC_XML_BACKEND: expat
+    FC_BUILD_TYPE: both
+    FC_BUILD_DISTCHECK: 0
+    FC_BUILD_NO_INSTALL: 0
+
 .fc_artifacts:
   artifacts:
     name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
@@ -285,288 +194,403 @@ fedora:36@container-clean:
 
 t_fedora:rawhide:autotools shared expat:
   extends:
-    - .build autotools shared expat
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
+    FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: 'rawhide'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: shared
+    FC_XML_BACKEND: expat
   needs:
     - 'fedora:rawhide@container-prep'
 
 
 t_fedora:rawhide:autotools shared libxml2:
   extends:
-    - .build autotools shared libxml2
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
+    FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: 'rawhide'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: shared
+    FC_XML_BACKEND: libxml2
+    FC_BUILD_DISTCHECK: 1
   needs:
     - 'fedora:rawhide@container-prep'
 
 
 t_fedora:rawhide:autotools static expat:
   extends:
-    - .build autotools static expat
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
+    FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: 'rawhide'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: static
+    FC_XML_BACKEND: expat
   needs:
     - 'fedora:rawhide@container-prep'
 
 
 t_fedora:rawhide:autotools static libxml2:
   extends:
-    - .build autotools static libxml2
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
+    FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: 'rawhide'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: static
+    FC_XML_BACKEND: libxml2
   needs:
     - 'fedora:rawhide@container-prep'
 
 
-t_fedora:rawhide:meson shared:
+t_fedora:rawhide:mingw autotools static libxml2:
   extends:
-    - .build meson shared
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
+    FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: 'rawhide'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: static
+    FC_XML_BACKEND: libxml2
+    FC_BUILD_PLATFORM: mingw
+    FC_BUILD_ARCH: x86_64-mingw32
   needs:
     - 'fedora:rawhide@container-prep'
 
 
-t_fedora:rawhide:meson static:
+t_fedora:rawhide:meson shared expat:
   extends:
-    - .build meson static
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
+    FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: 'rawhide'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: meson
+    FC_BUILD_TYPE: shared
+    FC_XML_BACKEND: expat
   needs:
     - 'fedora:rawhide@container-prep'
 
 
-t_fedora:38:autotools shared expat:
+t_fedora:rawhide:meson static expat:
   extends:
-    - .build autotools shared expat
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
-    FDO_DISTRIBUTION_VERSION: '38'
+    FC_DISTRO_NAME: fedora
+    FDO_DISTRIBUTION_VERSION: 'rawhide'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: meson
+    FC_BUILD_TYPE: static
+    FC_XML_BACKEND: expat
   needs:
-    - 'fedora:38@container-prep'
+    - 'fedora:rawhide@container-prep'
 
 
-t_fedora:38:autotools shared libxml2:
+t_fedora:rawhide:mingw meson static expat:
   extends:
-    - .build autotools shared libxml2
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
-    FDO_DISTRIBUTION_VERSION: '38'
+    FC_DISTRO_NAME: fedora
+    FDO_DISTRIBUTION_VERSION: 'rawhide'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: meson
+    FC_BUILD_TYPE: static
+    FC_XML_BACKEND: expat
+    FC_BUILD_PLATFORM: mingw
+    FC_BUILD_ARCH: linux-mingw-w64-64bit
+    FC_BUILD_NO_INSTALL: 1
   needs:
-    - 'fedora:38@container-prep'
+    - 'fedora:rawhide@container-prep'
 
 
-t_fedora:38:autotools static expat:
+t_fedora:38:autotools shared expat:
   extends:
-    - .build autotools static expat
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
+    FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: '38'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: shared
+    FC_XML_BACKEND: expat
   needs:
     - 'fedora:38@container-prep'
 
 
-t_fedora:38:autotools static libxml2:
+t_fedora:38:autotools shared libxml2:
   extends:
-    - .build autotools static libxml2
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
+    FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: '38'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: shared
+    FC_XML_BACKEND: libxml2
+    FC_BUILD_DISTCHECK: 1
   needs:
     - 'fedora:38@container-prep'
 
 
-t_fedora:38:meson shared:
+t_fedora:38:autotools static expat:
   extends:
-    - .build meson shared
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
+    FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: '38'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: static
+    FC_XML_BACKEND: expat
   needs:
     - 'fedora:38@container-prep'
 
 
-t_fedora:38:meson static:
+t_fedora:38:autotools static libxml2:
   extends:
-    - .build meson static
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
+    FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: '38'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: static
+    FC_XML_BACKEND: libxml2
   needs:
     - 'fedora:38@container-prep'
 
 
-t_fedora:37:autotools shared expat:
+t_fedora:38:mingw autotools static libxml2:
   extends:
-    - .build autotools shared expat
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
-    FDO_DISTRIBUTION_VERSION: '37'
+    FC_DISTRO_NAME: fedora
+    FDO_DISTRIBUTION_VERSION: '38'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: static
+    FC_XML_BACKEND: libxml2
+    FC_BUILD_PLATFORM: mingw
+    FC_BUILD_ARCH: x86_64-mingw32
   needs:
-    - 'fedora:37@container-prep'
+    - 'fedora:38@container-prep'
 
 
-t_fedora:37:autotools shared libxml2:
+t_fedora:38:meson shared expat:
   extends:
-    - .build autotools shared libxml2
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
-    FDO_DISTRIBUTION_VERSION: '37'
+    FC_DISTRO_NAME: fedora
+    FDO_DISTRIBUTION_VERSION: '38'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: meson
+    FC_BUILD_TYPE: shared
+    FC_XML_BACKEND: expat
   needs:
-    - 'fedora:37@container-prep'
+    - 'fedora:38@container-prep'
 
 
-t_fedora:37:autotools static expat:
+t_fedora:38:meson static expat:
   extends:
-    - .build autotools static expat
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
-    FDO_DISTRIBUTION_VERSION: '37'
+    FC_DISTRO_NAME: fedora
+    FDO_DISTRIBUTION_VERSION: '38'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: meson
+    FC_BUILD_TYPE: static
+    FC_XML_BACKEND: expat
   needs:
-    - 'fedora:37@container-prep'
+    - 'fedora:38@container-prep'
 
 
-t_fedora:37:autotools static libxml2:
+t_fedora:38:mingw meson static expat:
   extends:
-    - .build autotools static libxml2
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
-    FDO_DISTRIBUTION_VERSION: '37'
+    FC_DISTRO_NAME: fedora
+    FDO_DISTRIBUTION_VERSION: '38'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: meson
+    FC_BUILD_TYPE: static
+    FC_XML_BACKEND: expat
+    FC_BUILD_PLATFORM: mingw
+    FC_BUILD_ARCH: linux-mingw-w64-64bit
+    FC_BUILD_NO_INSTALL: 1
   needs:
-    - 'fedora:37@container-prep'
+    - 'fedora:38@container-prep'
 
 
-t_fedora:37:meson shared:
+t_fedora:37:autotools shared expat:
   extends:
-    - .build meson shared
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
+    FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: '37'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: shared
+    FC_XML_BACKEND: expat
   needs:
     - 'fedora:37@container-prep'
 
 
-t_fedora:37:meson static:
+t_fedora:37:autotools shared libxml2:
   extends:
-    - .build meson static
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
+    FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: '37'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: shared
+    FC_XML_BACKEND: libxml2
+    FC_BUILD_DISTCHECK: 1
   needs:
     - 'fedora:37@container-prep'
 
 
-t_fedora:36:autotools shared expat:
+t_fedora:37:autotools static expat:
   extends:
-    - .build autotools shared expat
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
-    FDO_DISTRIBUTION_VERSION: '36'
+    FC_DISTRO_NAME: fedora
+    FDO_DISTRIBUTION_VERSION: '37'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: static
+    FC_XML_BACKEND: expat
   needs:
-    - 'fedora:36@container-prep'
+    - 'fedora:37@container-prep'
 
 
-t_fedora:36:autotools shared libxml2:
+t_fedora:37:autotools static libxml2:
   extends:
-    - .build autotools shared libxml2
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
-    FDO_DISTRIBUTION_VERSION: '36'
+    FC_DISTRO_NAME: fedora
+    FDO_DISTRIBUTION_VERSION: '37'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: static
+    FC_XML_BACKEND: libxml2
   needs:
-    - 'fedora:36@container-prep'
+    - 'fedora:37@container-prep'
 
 
-t_fedora:36:autotools static expat:
+t_fedora:37:mingw autotools static libxml2:
   extends:
-    - .build autotools static expat
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
-    FDO_DISTRIBUTION_VERSION: '36'
+    FC_DISTRO_NAME: fedora
+    FDO_DISTRIBUTION_VERSION: '37'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: static
+    FC_XML_BACKEND: libxml2
+    FC_BUILD_PLATFORM: mingw
+    FC_BUILD_ARCH: x86_64-mingw32
   needs:
-    - 'fedora:36@container-prep'
+    - 'fedora:37@container-prep'
 
 
-t_fedora:36:autotools static libxml2:
+t_fedora:37:meson shared expat:
   extends:
-    - .build autotools static libxml2
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
-    FDO_DISTRIBUTION_VERSION: '36'
+    FC_DISTRO_NAME: fedora
+    FDO_DISTRIBUTION_VERSION: '37'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: meson
+    FC_BUILD_TYPE: shared
+    FC_XML_BACKEND: expat
   needs:
-    - 'fedora:36@container-prep'
+    - 'fedora:37@container-prep'
 
 
-t_fedora:36:meson shared:
+t_fedora:37:meson static expat:
   extends:
-    - .build meson shared
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
-    FDO_DISTRIBUTION_VERSION: '36'
+    FC_DISTRO_NAME: fedora
+    FDO_DISTRIBUTION_VERSION: '37'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: meson
+    FC_BUILD_TYPE: static
+    FC_XML_BACKEND: expat
   needs:
-    - 'fedora:36@container-prep'
+    - 'fedora:37@container-prep'
 
 
-t_fedora:36:meson static:
+t_fedora:37:mingw meson static expat:
   extends:
-    - .build meson static
+    - .build@template
     - .fdo.distribution-image@fedora
     - .fc_artifacts
   variables:
-    FDO_DISTRIBUTION_VERSION: '36'
+    FC_DISTRO_NAME: fedora
+    FDO_DISTRIBUTION_VERSION: '37'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FC_BUILDSYS: meson
+    FC_BUILD_TYPE: static
+    FC_XML_BACKEND: expat
+    FC_BUILD_PLATFORM: mingw
+    FC_BUILD_ARCH: linux-mingw-w64-64bit
+    FC_BUILD_NO_INSTALL: 1
   needs:
-    - 'fedora:36@container-prep'
+    - 'fedora:37@container-prep'
+
 
diff --git a/.gitlab-ci/.gitignore b/.gitlab-ci/.gitignore
new file mode 100644
index 0000000..aeaec0f
--- /dev/null
+++ b/.gitlab-ci/.gitignore
@@ -0,0 +1 @@
+/*~
diff --git a/.gitlab-ci/build.sh b/.gitlab-ci/build.sh
new file mode 100755
index 0000000..7c3c47b
--- /dev/null
+++ b/.gitlab-ci/build.sh
@@ -0,0 +1,132 @@
+#! /bin/bash
+
+set -ex
+set -o pipefail
+
+case "$OSTYPE" in
+    msys) MyPWD=$(pwd -W) ;;
+    *) MyPWD=$(pwd) ;;
+esac
+enable=()
+disable=()
+distcheck=0
+enable_install=1
+cross=0
+buildsys="autotools"
+type="both"
+arch=""
+buildopt=()
+SRCDIR=$MyPWD
+export BUILD_ID=${BUILD_ID:-fontconfig-$$}
+export PREFIX=${PREFIX:-$MyPWD/prefix}
+export BUILDDIR=${BUILDDIR:-$MyPWD/build}
+
+while getopts a:ce:d:hIs:t:X: OPT
+do
+    case $OPT in
+        'a') arch=$OPTARG ;;
+        'c') distcheck=1 ;;
+        'e') enable+=($OPTARG) ;;
+        'd') disable+=($OPTARG) ;;
+        'I') enable_install=0 ;;
+        's') buildsys=$OPTARG ;;
+        't') type=$OPTARG ;;
+        'X') backend=$OPTARG ;;
+        'h')
+            echo "Usage: $0 [-a ARCH] [-c] [-e OPT] [-d OPT] [-I] [-s BUILDSYS] [-t BUILDTYPE] [-X XMLBACKEND]"
+            exit 1
+            ;;
+    esac
+done
+case x"$FC_BUILD_PLATFORM" in
+    'xmingw') cross=1 ;;
+    *) cross=0 ;;
+esac
+
+env
+r=0
+
+if [ x"$buildsys" == "xautotools" ]; then
+    for i in "${enable[@]}"; do
+        buildopt+=(--enable-$i)
+    done
+    for i in "${disable[@]}"; do
+        buildopt+=(--disable-$i)
+    done
+    case x"$backend" in
+        'xexpat')
+            buildopt+=(--disable-libxml2)
+            ;;
+        'xlibxml2')
+            buildopt+=(--enable-libxml2)
+            ;;
+    esac
+    case x"$type" in
+        'xshared')
+            buildopt+=(--enable-shared)
+            buildopt+=(--disable-static)
+            ;;
+        'xstatic')
+            buildopt+=(--disable-shared)
+            buildopt+=(--enable-static)
+            ;;
+        'both')
+            buildopt+=(--enable-shared)
+            buildopt+=(--enable-static)
+            ;;
+    esac
+    if [ $cross -eq 1 -a -z "$arch" ]; then
+        buildopt+=(--host=$arch)
+        if [ -f .gitlab-ci/${FC_DISTRO_NAME}-cross.sh ]; then
+            echo "No ${FC_DISTRO_NAME}-cross.sh available"
+            exit 1
+        fi
+        . .gitlab-ci/${FC_DISTRO_NAME}-cross.sh
+    fi
+    rm -rf "$BUILDDIR" "$PREFIX" || :
+    mkdir "$BUILDDIR" "$PREFIX"
+    cd "$BUILDDIR"
+    ../autogen.sh --prefix="$PREFIX" ${buildopt[*]} 2>&1 | tee /tmp/fc-build.log || r=$?
+    make V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    make check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    if [ $enable_install -eq 1 ]; then
+        make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    fi
+    if [ $distcheck -eq 1 ]; then
+        make distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    fi
+elif [ x"$buildsys" == "xmeson" ]; then
+    for i in "${enable[@]}"; do
+        buildopt+=(-D$i=true)
+    done
+    for i in "${disable[@]}"; do
+        buildopt+=(-D$i=false)
+    done
+    case x"$backend" in
+        'xexpat')
+        ;;
+        'xlibxml2')
+        ;;
+    esac
+    if [ $cross -eq 1 -a -z "$arch" ]; then
+        buildopt+=(--cross-file)
+        buildopt+=(.gitlab-ci/$arch.txt)
+        if [ -f .gitlab-ci/cross-$FC_DISTRO_NAME.sh ]; then
+            echo "No cross-$FC_DISTRO_NAME.sh available"
+            exit 1
+        fi
+        . .gitlab-ci/cross-$FC_DISTRO_NAME.sh
+    fi
+    buildopt+=(--default-library=$type)
+    meson setup --prefix="$PREFIX" ${buildopt[*]} "$BUILDDIR" 2>&1 | tee /tmp/fc-build.log || r=$?
+    meson compile -v -C "$BUILDDIR" 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    meson test -v -C "$BUILDDIR" 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    if [ $enable_install -eq 1 ]; then
+        meson install -C "$BUILDDIR" 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    fi
+    if [ $distcheck -eq 1 ]; then
+        meson dist -C "$BUILDDIR" 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    fi
+fi
+mv /tmp/fc-build.log . || :
+exit $r
diff --git a/.gitlab-ci/ci.template b/.gitlab-ci/ci.template
index 2166175..43572db 100644
--- a/.gitlab-ci/ci.template
+++ b/.gitlab-ci/ci.template
@@ -24,6 +24,7 @@ include:
   - project: 'freedesktop/ci-templates'
     ref: *template_sha
     file: '/templates/ci-fairy.yml'
+  - local: '.gitlab-ci/other.yml'
 
 stages:
   - prep
@@ -61,8 +62,7 @@ variables:
 {% for version in distro.versions %}
 
 {{distro.name}}:{{version}}@container-prep:
-  extends:
-    - .fdo.container-build@{{distro.name}}
+  extends: .fdo.container-build@{{distro.name}}
   stage: prep
   variables:
     GIT_STRATEGY: none
@@ -126,72 +126,7 @@ variables:
 #                                     #
 #######################################
 
-.build autotools shared expat:
-  stage: test
-  script:
-    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
-    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
-    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
-    - export MAKEFLAGS="-j4"
-    - mkdir "$BUILDDIR" "$PREFIX"
-    - cd "$BUILDDIR"
-    - env
-    - r=0
-    - ../autogen.sh --prefix="$PREFIX" --enable-shared --disable-static --disable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
-    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - make distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - mv /tmp/fc-build.log .
-    - exit $r
-.build autotools shared libxml2:
-  stage: test
-  script:
-    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
-    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
-    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
-    - export MAKEFLAGS="-j4"
-    - mkdir "$BUILDDIR" "$PREFIX"
-    - cd "$BUILDDIR"
-    - env
-    - r=0
-    - ../autogen.sh --prefix="$PREFIX" --enable-shared --disable-static --enable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
-    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - make distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - mv /tmp/fc-build.log .
-    - exit $r
-.build autotools static expat:
-  stage: test
-  script:
-    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
-    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
-    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
-    - export MAKEFLAGS="-j4"
-    - mkdir "$BUILDDIR" "$PREFIX"
-    - cd "$BUILDDIR"
-    - env
-    - r=0
-    - ../autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --disable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
-    - make check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - mv /tmp/fc-build.log .
-    - exit $r
-.build autotools static libxml2:
-  stage: test
-  script:
-    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
-    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
-    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
-    - export MAKEFLAGS="-j4"
-    - mkdir "$BUILDDIR" "$PREFIX"
-    - cd "$BUILDDIR"
-    - env
-    - r=0
-    - ../autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --enable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
-    - make check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
-    - mv /tmp/fc-build.log .
-    - exit $r
-.build meson shared:
-  stage: test
+.build@template:
   before_script:
     - pip install meson
   script:
@@ -199,32 +134,28 @@ variables:
     - export PREFIX="$(pwd)/prefix-$BUILD_ID"
     - export BUILDDIR="$(pwd)/build-$BUILD_ID"
     - export MAKEFLAGS="-j4"
-    - env
-    - r=0
-    - meson --prefix="$PREFIX" --default-library=shared "$BUILDDIR" 2>&1 | tee /tmp/fc-build.log || r=$?
-    - meson compile -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
-    - meson test -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
-    - meson install -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
-    - meson dist -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
-    - mv /tmp/fc-build.log .
-    - exit $r
-.build meson static:
-  stage: test
-  before_script:
-    - pip install meson
-  script:
-    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
-    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
-    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
-    - export MAKEFLAGS="-j4"
-    - env
-    - r=0
-    - meson --prefix="$PREFIX" --default-library=static "$BUILDDIR" 2>&1 | tee /tmp/fc-build.log || r=$?
-    - meson compile -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
-    - meson test -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
-    - meson install -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
-    - mv /tmp/fc-build.log .
-    - exit $r
+    - |
+      buildopt=()
+      for bo in $FC_BUILD_ENABLED; do
+        buildopt+=(-e $bo)
+      done
+      for bo in $FC_BUILD_DISABLED; do
+        buildopt+=(-d $bo)
+      done
+      [ -n "$FC_BUILD_ARCH" ] && buildopt+=(-a $FC_BUILD_ARCH)
+      [ $FC_BUILD_DISTCHECK -eq 1 ] && buildopt+=(-c)
+      [ $FC_BUILD_NO_INSTALL -eq 1 ] && buildopt+=(-I)
+      buildopt+=(-s $FC_BUILDSYS)
+      buildopt+=(-t $FC_BUILD_TYPE)
+      buildopt+=(-X $FC_XML_BACKEND)
+      sh .gitlab-ci/build.sh ${buildopt[*]}
+  variables:
+    FC_BUILDSYS: autotools
+    FC_XML_BACKEND: expat
+    FC_BUILD_TYPE: both
+    FC_BUILD_DISTCHECK: 0
+    FC_BUILD_NO_INSTALL: 0
+
 .fc_artifacts:
   artifacts:
     name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
@@ -243,20 +174,21 @@ variables:
 
 {% for distro in distributions %}
 {% for version in distro.versions %}
-{% for bs in distro.buildsys %}
+{% for build in distro.builds %}
 
-t_{{distro.name}}:{{version}}:{{bs}}:
+t_{{distro.name}}:{{version}}:{{build.name}}:
   extends:
-    - .build {{bs}}
+    - .build@template
     - .fdo.distribution-image@{{distro.name}}
     - .fc_artifacts
   variables:
+    FC_DISTRO_NAME: {{distro.name}}
     FDO_DISTRIBUTION_VERSION: '{{version}}'
     FDO_DISTRIBUTION_TAG: ${{distro.name.upper()}}_TAG
     {# Where we have extra_variables defined, add them to the list #}
-    {% if distro.build is defined and distro.build.extra_variables is defined %}
-    {% for var in distro.build.extra_variables %}
-    {{var}}
+    {% if build.variables is defined %}
+    {% for key, value in build.variables.items() %}
+    {{key}}: {{value}}
     {% endfor %}
     {% endif %}
   needs:
@@ -265,3 +197,4 @@ t_{{distro.name}}:{{version}}:{{bs}}:
 {% endfor %}
 {% endfor %}
 {% endfor %}
+
diff --git a/.gitlab-ci/config.yml b/.gitlab-ci/config.yml
index cf1ae0f..6ddd5bf 100644
--- a/.gitlab-ci/config.yml
+++ b/.gitlab-ci/config.yml
@@ -8,14 +8,53 @@ distributions:
       - "rawhide"
       - "38"
       - "37"
-      - "36"
-    buildsys:
-      - "autotools shared expat"
-      - "autotools shared libxml2"
-      - "autotools static expat"
-      - "autotools static libxml2"
-      - "meson shared"
-      - "meson static"
+    builds:
+      - name: "autotools shared expat"
+        variables:
+          FC_BUILDSYS: autotools
+          FC_BUILD_TYPE: shared
+          FC_XML_BACKEND: expat
+      - name: "autotools shared libxml2"
+        variables:
+          FC_BUILDSYS: autotools
+          FC_BUILD_TYPE: shared
+          FC_XML_BACKEND: libxml2
+          FC_BUILD_DISTCHECK: 1
+      - name: "autotools static expat"
+        variables:
+          FC_BUILDSYS: autotools
+          FC_BUILD_TYPE: static
+          FC_XML_BACKEND: expat
+      - name: "autotools static libxml2"
+        variables:
+          FC_BUILDSYS: autotools
+          FC_BUILD_TYPE: static
+          FC_XML_BACKEND: libxml2
+      - name: "mingw autotools static libxml2"
+        variables:
+          FC_BUILDSYS: autotools
+          FC_BUILD_TYPE: static
+          FC_XML_BACKEND: libxml2
+          FC_BUILD_PLATFORM: mingw
+          FC_BUILD_ARCH: x86_64-mingw32
+      - name: "meson shared expat"
+        variables:
+          FC_BUILDSYS: meson
+          FC_BUILD_TYPE: shared
+          FC_XML_BACKEND: expat
+      - name: "meson static expat"
+        variables:
+          FC_BUILDSYS: meson
+          FC_BUILD_TYPE: static
+          FC_XML_BACKEND: expat
+      - name: "mingw meson static expat"
+        variables:
+          FC_BUILDSYS: meson
+          FC_BUILD_TYPE: static
+          FC_XML_BACKEND: expat
+          FC_BUILD_PLATFORM: mingw
+          FC_BUILD_ARCH: linux-mingw-w64-64bit
+          FC_BUILD_NO_INSTALL: 1
 
 packages:
   fedora:
@@ -39,5 +78,9 @@ packages:
         "ninja-build",
         "wget",
         "python3-pip",
+        "mingw64-gettext",
+        "mingw64-freetype",
+        "mingw64-libxml2",
+        "wine",
       ]
     use_qemu: false
diff --git a/.gitlab-ci/fedora-cross.sh b/.gitlab-ci/fedora-cross.sh
new file mode 100644
index 0000000..27cd003
--- /dev/null
+++ b/.gitlab-ci/fedora-cross.sh
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+eval `rpm --eval %{mingw64_env}`
diff --git a/.gitlab-ci/other.yml b/.gitlab-ci/other.yml
new file mode 100644
index 0000000..42caf1c
--- /dev/null
+++ b/.gitlab-ci/other.yml
@@ -0,0 +1,142 @@
+# FIXME: fontconfig should probably get its own image
+# In the meantime, the latest GStreamer image tag can be found here:
+# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/.gitlab-image-tags.yml#L10
+.build meson windows:
+  image: "registry.freedesktop.org/gstreamer/gstreamer/amd64/windows:2022-09-23.0-main"
+  stage: "test"
+  tags:
+    - "docker"
+    - "windows"
+    - "2022"
+  variables:
+    # Make sure any failure in PowerShell scripts is fatal
+    ErrorActionPreference: "Stop"
+    WarningPreference: "Stop"
+    # Uncomment the following key if need to pass custom args, as well with the
+    # $env:MESON_ARGS line in the `script:` blocks
+    # MESON_ARGS: >-
+    #   -Dfoo=enabled
+    #   -Dbar=disabled
+  before_script:
+    # Make sure meson is up to date, so we don't need to rebuild the image with each release
+    - pip3 install -U meson certifi
+  script:
+    # 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 &&
+      SET CERT_PATH=$(python -m certifi) &&
+      SET SSL_CERT_FILE=$(python -m certifi) &&
+      SET REQUESTS_CA_BUNDLE=$(python -m certifi) &&
+      meson build $env:MESON_ARGS &&
+      ninja -C build &&
+      ninja -C build test"
+  artifacts:
+    name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
+    when: always
+    paths:
+      - build-*/meson-logs/*txt
+      - prefix-*
+
+meson vs2019 amd64:
+  extends: ".build meson windows"
+  variables:
+    ARCH: "amd64"
+
+meson vs2019 x86:
+  extends: ".build meson windows"
+  variables:
+    ARCH: "x86"
+
+meson macos:
+  stage: "test"
+  tags:
+    - gst-macos-11.1
+  artifacts:
+    name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}"
+    expire_in: "5 days"
+    when: "always"
+    paths:
+      - "build/meson-logs/*txt"
+  before_script:
+    - 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 t install certificates
+    - open /Applications/Python\ 3.8/Install\ Certificates.command
+    # Get ninja
+    - curl -L -o ninja-mac.zip https://github.com/ninja-build/ninja/releases/download/v1.10.0/ninja-mac.zip
+    - unzip ninja-mac.zip
+    - sudo cp ninja /usr/local/bin
+  script:
+    - CERT_PATH=$(python3 -m certifi) && export SSL_CERT_FILE=${CERT_PATH} && export REQUESTS_CA_BUNDLE=${CERT_PATH} && meson build
+    - ninja -C build
+    - ninja -C build test
+
+# msys infrastructure is a bit broken, disable for now
+meson msys2:
+  extends: ".build meson windows"
+  when: "manual"
+  allow_failure: true
+  script:
+    # 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"," ")
+
+    - $env:PATH += ";C:\msys64\usr\bin;C:\msys64\mingw64/bin;C:\msys64\mingw32/bin"
+    # XXX: Copied from https://gitlab.freedesktop.org/gstreamer/gst-ci/blob/master/gitlab/ci_template.yml#L487
+    # For some reason docker build hangs if this is included in the image, needs more troubleshooting
+    - C:\msys64\usr\bin\bash -c "pacman-key --init && pacman-key --populate msys2 && pacman-key --refresh-keys || true"
+    - C:\msys64\usr\bin\bash -c "pacman -Syuu --noconfirm"
+    - C:\msys64\usr\bin\bash -c "pacman -Sy --noconfirm --needed mingw-w64-x86_64-toolchain ninja"
+    - C:\msys64\usr\bin\bash -c "meson build $env:MESON_ARGS &&
+      ninja -C build &&
+      ninja -C build test"
+
+meson android arm64 fedora:
+  # See https://gitlab.freedesktop.org/gstreamer/gst-ci/container_registry/164 for current images
+  image: "registry.freedesktop.org/gstreamer/gst-ci/amd64/android-fedora:2020-10-22.0-master"
+  stage: "test"
+  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_args          = ['-Wno-pointer-bool-conversion']
+      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 --werror --cross-file android-cross-file.txt build
+    - meson compile --verbose -C build
commit 3c16ea284903ca9870d22835437f5640d50b49a6
Author: Akira TAGOH <akira@xxxxxxxxx>
Date:   Fri Mar 31 23:27:21 2023 +0900

    Fix a typo

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 7881432..f495fe5 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -34,7 +34,7 @@ variables:
 # changing these will force rebuilding the associated image
 # Note: these tags have no meaning and are not tied to a particular
 # fontconfig version
-  FEDORA_TAG:  '2023-03-31.0-b3f8fc5f8b0d'
+  FEDORA_TAG:  '2023-03-31.0-b6a9c5563c63'
 
   FEDORA_EXEC: 'bash .gitlab-ci/fedora-install.sh'
 
@@ -118,7 +118,7 @@ fedora:36@container-prep:
   script:
     - ci-fairy -v --authfile $AUTHFILE delete-image
             --repository $FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION
-	    --exclude-tag $FDO_DISTRIBUTION_TAG
+            --exclude-tag $FDO_DISTRIBUTION_TAG
   dependencies: []
   allow_failure: true
   only:
diff --git a/.gitlab-ci/ci.template b/.gitlab-ci/ci.template
index 477b491..2166175 100644
--- a/.gitlab-ci/ci.template
+++ b/.gitlab-ci/ci.template
@@ -100,7 +100,7 @@ variables:
   script:
     - ci-fairy -v --authfile $AUTHFILE delete-image
             --repository $FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION
-	    --exclude-tag $FDO_DISTRIBUTION_TAG
+            --exclude-tag $FDO_DISTRIBUTION_TAG
   dependencies: []
   allow_failure: true
   only:
commit 428515daaed85ba37eee6d21fc99a53976f6d05c
Author: Akira TAGOH <akira@xxxxxxxxx>
Date:   Fri Mar 31 23:21:45 2023 +0900

    Rework CI implementation
    
    Use ci-templates.

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9aefae4..7881432 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,17 +1,174 @@
-image: fedora:rawhide
+# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0 filetype=yaml:
+
+#######################################
+#                                     #
+# THIS FILE IS GENERATED, DO NOT EDIT #
+#                                     #
+#######################################
+
+# To change the gitlab CI, edit .gitlab-ci/ci.template and/or .gitlab-ci/config.yml
+# and run ci-fairy generate-template. For details, see
+# https://freedesktop.pages.freedesktop.org/ci-templates/ci-fairy.html#templating-gitlab-ci-yml
+
+.templates_sha: &template_sha dd90ac0d7a03b574eb4f18d7358083f0c97825f3
+
+include:
+  # Fedora container builder template
+  - project: 'freedesktop/ci-templates'
+    ref: *template_sha
+    file: '/templates/fedora.yml'
+  - project: 'freedesktop/ci-templates'
+    ref: *template_sha
+    file: '/templates/ci-fairy.yml'
 
 stages:
-  - build
+  - prep
+  - test
+  - container_clean
+
+variables:
+  FDO_UPSTREAM_REPO: fontconfig/fontconfig
+  GIT_DEPTH: 1
 
-before_script:
-  - dnf -y upgrade --disablerepo=rawhide-modular --nogpgcheck fedora-repos fedora-repos-rawhide
-  - dnf -y upgrade --disablerepo=rawhide-modular
-  - dnf -y install --disablerepo=rawhide-modular --allowerasing --skip-broken @buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap
-  - dnf -y install --disablerepo=rawhide-modular --allowerasing --skip-broken ninja-build wget python3-pip
-  - pip install meson
+# these tags should be updated each time the list of packages is updated
+# changing these will force rebuilding the associated image
+# Note: these tags have no meaning and are not tied to a particular
+# fontconfig version
+  FEDORA_TAG:  '2023-03-31.0-b3f8fc5f8b0d'
+
+  FEDORA_EXEC: 'bash .gitlab-ci/fedora-install.sh'
+
+#######################################
+#                                     #
+#          containers stage           #
+#                                     #
+#######################################
+
+# Build a container for each distribution + version. The ci-templates
+# will re-use the containers if the tag doesn't change.
+
+fedora:rawhide@container-prep:
+  extends:
+    - .fdo.container-build@fedora
+  stage: prep
+  variables:
+    GIT_STRATEGY: none
+    FDO_DISTRIBUTION_VERSION: 'rawhide'
+    FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
 
-shared-build:
-  stage: build
+fedora:38@container-prep:
+  extends:
+    - .fdo.container-build@fedora
+  stage: prep
+  variables:
+    GIT_STRATEGY: none
+    FDO_DISTRIBUTION_VERSION: '38'
+    FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
+
+fedora:37@container-prep:
+  extends:
+    - .fdo.container-build@fedora
+  stage: prep
+  variables:
+    GIT_STRATEGY: none
+    FDO_DISTRIBUTION_VERSION: '37'
+    FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
+
+fedora:36@container-prep:
+  extends:
+    - .fdo.container-build@fedora
+  stage: prep
+  variables:
+    GIT_STRATEGY: none
+    FDO_DISTRIBUTION_VERSION: '36'
+    FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+    FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
+
+#######################################
+#                                     #
+#        container clean stage        #
+#                                     #
+#######################################
+
+#
+# This stage will look for the container images e currently have in
+# the registry and will remove any that are not tagged with the provided
+# $container_image:$tag
+#
+# This job only runs for a scheduled pipeline.
+#
+# Go to your Profile, Settings, Access Tokens
+# Create a personal token with `api' scope, copy the value.
+# Go to CI/CD, Schedules, schedule a monthly job.
+# Define a variable of type File named AUTHFILE. Content is that token
+# value.
+.container-clean:
+  stage: container_clean
+  image: golang:alpine
+  before_script:
+    - apk add python3 py-pip git
+    - pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
+  script:
+    - ci-fairy -v --authfile $AUTHFILE delete-image
+            --repository $FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION
+	    --exclude-tag $FDO_DISTRIBUTION_TAG
+  dependencies: []
+  allow_failure: true
+  only:
+    - schedules
+
+fedora:rawhide@container-clean:
+  extends:
+    - .container-clean
+  variables:
+    GIT_STRATEGY: none
+    CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
+    FDO_DISTRIBUTION_VERSION: 'rawhide'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+
+fedora:38@container-clean:
+  extends:
+    - .container-clean
+  variables:
+    GIT_STRATEGY: none
+    CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
+    FDO_DISTRIBUTION_VERSION: '38'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+
+fedora:37@container-clean:
+  extends:
+    - .container-clean
+  variables:
+    GIT_STRATEGY: none
+    CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
+    FDO_DISTRIBUTION_VERSION: '37'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+
+fedora:36@container-clean:
+  extends:
+    - .container-clean
+  variables:
+    GIT_STRATEGY: none
+    CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
+    FDO_DISTRIBUTION_VERSION: '36'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+
+
+#######################################
+#                                     #
+#             build stage             #
+#                                     #
+#######################################
+
+.build autotools shared expat:
+  stage: test
   script:
     - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
     - export PREFIX="$(pwd)/prefix-$BUILD_ID"
@@ -19,268 +176,397 @@ shared-build:
     - export MAKEFLAGS="-j4"
     - mkdir "$BUILDDIR" "$PREFIX"
     - cd "$BUILDDIR"
-    - ../autogen.sh --prefix="$PREFIX" --enable-shared --disable-static --enable-libxml2
-    - make
-    - make check
-    - make install
-    - make distcheck
-  artifacts:
-    name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
-    when: always
-    paths:
-      - build-*/fontconfig-*.tar.*
-      - build-*/fontconfig*/_build/sub/*.log
-      - build-*/fontconfig*/_build/sub/test/*.log
-      - build-*/fontconfig*/_build/sub/test/*.trs
-      - build-*/fontconfig*/_build/sub/test/out*
-      - build-*/*.log
-      - build-*/test/*.log
-      - build-*/test/*.trs
-      - build-*/test/out*
-      - prefix-*
-static-build:
-  stage: build
+    - env
+    - r=0
+    - ../autogen.sh --prefix="$PREFIX" --enable-shared --disable-static --disable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
+    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - make distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - mv /tmp/fc-build.log .
+    - exit $r
+.build autotools shared libxml2:
+  stage: test
   script:
     - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
     - export PREFIX="$(pwd)/prefix-$BUILD_ID"
     - export BUILDDIR="$(pwd)/build-$BUILD_ID"
     - export MAKEFLAGS="-j4"
-    - mkdir "$BUILDDIR"
+    - mkdir "$BUILDDIR" "$PREFIX"
     - cd "$BUILDDIR"
-    - ../autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --enable-libxml2
-    - make
-    - make check
-  artifacts:
-    name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
-    when: always
-    paths:
-      - build-*/*.log
-      - build-*/test/*.log
-      - build-*/test/*.trs
-      - build-*/test/out*
-mingw-build:
-  image: fedora:35
-  stage: build
-  before_script:
-    - dnf -y upgrade --disablerepo=rawhide-modular
-    - dnf -y install --disablerepo=rawhide-modular --allowerasing --skip-broken @buildsys-build autoconf automake libtool gettext gettext-devel gperf libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf wget
-    - dnf -y install --disablerepo=rawhide-modular --allowerasing --skip-broken mingw64-gettext mingw64-freetype mingw64-libxml2 wine
+    - env
+    - r=0
+    - ../autogen.sh --prefix="$PREFIX" --enable-shared --disable-static --enable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
+    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - make distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - mv /tmp/fc-build.log .
+    - exit $r
+.build autotools static expat:
+  stage: test
   script:
     - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
     - export PREFIX="$(pwd)/prefix-$BUILD_ID"
     - export BUILDDIR="$(pwd)/build-$BUILD_ID"
     - export MAKEFLAGS="-j4"
-    - mkdir "$BUILDDIR"
+    - mkdir "$BUILDDIR" "$PREFIX"
     - cd "$BUILDDIR"
-    - eval `rpm --eval %{mingw64_env}`
-    - ../autogen.sh --prefix="$PREFIX" --host=x86_64-mingw32 --disable-shared --enable-static --enable-libxml2
-    - make
-    - make check
-  artifacts:
-    name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
-    when: always
-    paths:
-      - build-*/*.log
-      - build-*/test/*.log
-      - build-*/test/*.trs
-      - build-*/test/out*
-meson-shared-build:
-  image: fedora:latest
-  stage: build
+    - env
+    - r=0
+    - ../autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --disable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
+    - make check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - mv /tmp/fc-build.log .
+    - exit $r
+.build autotools static libxml2:
+  stage: test
   script:
     - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
     - export PREFIX="$(pwd)/prefix-$BUILD_ID"
     - export BUILDDIR="$(pwd)/build-$BUILD_ID"
     - export MAKEFLAGS="-j4"
-    - meson --prefix="$PREFIX" --default-library=shared "$BUILDDIR"
-    - ninja -C "$BUILDDIR"
-    - ninja -C "$BUILDDIR" test
-    - ninja -C "$BUILDDIR" install
-  artifacts:
-    name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
-    when: always
-    paths:
-      - build-*/meson-logs/*txt
-      - prefix-*
-meson-static-build:
-  image: fedora:latest
-  stage: build
+    - mkdir "$BUILDDIR" "$PREFIX"
+    - cd "$BUILDDIR"
+    - env
+    - r=0
+    - ../autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --enable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
+    - make check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - mv /tmp/fc-build.log .
+    - exit $r
+.build meson shared:
+  stage: test
+  before_script:
+    - pip install meson
   script:
     - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
     - export PREFIX="$(pwd)/prefix-$BUILD_ID"
     - export BUILDDIR="$(pwd)/build-$BUILD_ID"
     - export MAKEFLAGS="-j4"
-    - meson --prefix="$PREFIX" --default-library=static "$BUILDDIR"
-    - ninja -C "$BUILDDIR"
-    - ninja -C "$BUILDDIR" test
-    - ninja -C "$BUILDDIR" install
-  artifacts:
-    name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
-    when: always
-    paths:
-      - build-*/meson-logs/*txt
-      - prefix-*
-meson-mingw-w64-build:
-  image: fedora:latest
-  stage: build
-  # allow failure until https://gitlab.freedesktop.org/fontconfig/fontconfig/-/issues/263 is resolved
-  allow_failure: true
+    - env
+    - r=0
+    - meson --prefix="$PREFIX" --default-library=shared "$BUILDDIR" 2>&1 | tee /tmp/fc-build.log || r=$?
+    - meson compile -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
+    - meson test -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
+    - meson install -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
+    - meson dist -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
+    - mv /tmp/fc-build.log .
+    - exit $r
+.build meson static:
+  stage: test
+  before_script:
+    - pip install meson
   script:
     - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
     - export PREFIX="$(pwd)/prefix-$BUILD_ID"
     - export BUILDDIR="$(pwd)/build-$BUILD_ID"
-    - eval `rpm --eval %{mingw64_env}`
-    - meson --prefix="$PREFIX" "$BUILDDIR" --cross-file .gitlab-ci/linux-mingw-w64-64bit.txt
-    - ninja -C "$BUILDDIR"
-    - ninja -C "$BUILDDIR" test
-    # install doesn't work, fccache problems, but autotools ci doesn't do that either
-    # - ninja -C "$BUILDDIR" install
-  artifacts:
-    name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
-    when: always
-    paths:
-      - build-*/meson-logs/*txt
-      - prefix-*
-
-# FIXME: fontconfig should probably get its own image
-# In the meantime, the latest GStreamer image tag can be found here:
-# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/.gitlab-image-tags.yml#L10
-.build meson windows:
-  image: 'registry.freedesktop.org/gstreamer/gstreamer/amd64/windows:2022-09-23.0-main'
-  stage: 'build'
-  tags:
-    - 'docker'
-    - 'windows'
-    - '2022'
-  variables:
-    # Make sure any failure in PowerShell scripts is fatal
-    ErrorActionPreference: 'Stop'
-    WarningPreference: 'Stop'
-    # Uncomment the following key if need to pass custom args, as well with the
-    # $env:MESON_ARGS line in the `script:` blocks
-    # MESON_ARGS: >-
-    #   -Dfoo=enabled
-    #   -Dbar=disabled
-  before_script:
-    # Make sure meson is up to date, so we don't need to rebuild the image with each release
-    - pip3 install -U meson certifi
-  script:
-    # 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 &&
-        SET CERT_PATH=$(python -m certifi) &&
-        SET SSL_CERT_FILE=$(python -m certifi) &&
-        SET REQUESTS_CA_BUNDLE=$(python -m certifi) &&
-        meson build $env:MESON_ARGS &&
-        ninja -C build &&
-        ninja -C build test"
+    - export MAKEFLAGS="-j4"
+    - env
+    - r=0
+    - meson --prefix="$PREFIX" --default-library=static "$BUILDDIR" 2>&1 | tee /tmp/fc-build.log || r=$?
+    - meson compile -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
+    - meson test -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
+    - meson install -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
+    - mv /tmp/fc-build.log .
+    - exit $r
+.fc_artifacts:
   artifacts:
     name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
     when: always
+    expire_in: 5 days
     paths:
-      - build-*/meson-logs/*txt
-      - prefix-*
+      - fc-build.log
+      - build-*/fontconfig-*.tar.*
+      - build-*/fontconfig*/_build
+
+#######################################
+#                                     #
+#              test stage             #
+#                                     #
+#######################################
+
 
-meson vs2019 amd64:
-  extends: '.build meson windows'
+t_fedora:rawhide:autotools shared expat:
+  extends:
+    - .build autotools shared expat
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
   variables:
-    ARCH: 'amd64'
+    FDO_DISTRIBUTION_VERSION: 'rawhide'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:rawhide@container-prep'
 
-meson vs2019 x86:
-  extends: '.build meson windows'
+
+t_fedora:rawhide:autotools shared libxml2:
+  extends:
+    - .build autotools shared libxml2
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
   variables:
-    ARCH: 'x86'
+    FDO_DISTRIBUTION_VERSION: 'rawhide'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:rawhide@container-prep'
+
+
+t_fedora:rawhide:autotools static expat:
+  extends:
+    - .build autotools static expat
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: 'rawhide'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:rawhide@container-prep'
+
+
+t_fedora:rawhide:autotools static libxml2:
+  extends:
+    - .build autotools static libxml2
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: 'rawhide'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:rawhide@container-prep'
+
+
+t_fedora:rawhide:meson shared:
+  extends:
+    - .build meson shared
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: 'rawhide'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:rawhide@container-prep'
+
+
+t_fedora:rawhide:meson static:
+  extends:
+    - .build meson static
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: 'rawhide'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:rawhide@container-prep'
+
+
+t_fedora:38:autotools shared expat:
+  extends:
+    - .build autotools shared expat
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '38'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:38@container-prep'
+
+
+t_fedora:38:autotools shared libxml2:
+  extends:
+    - .build autotools shared libxml2
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '38'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:38@container-prep'
+
+
+t_fedora:38:autotools static expat:
+  extends:
+    - .build autotools static expat
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '38'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:38@container-prep'
+
+
+t_fedora:38:autotools static libxml2:
+  extends:
+    - .build autotools static libxml2
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '38'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:38@container-prep'
+
+
+t_fedora:38:meson shared:
+  extends:
+    - .build meson shared
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '38'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:38@container-prep'
+
+
+t_fedora:38:meson static:
+  extends:
+    - .build meson static
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '38'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:38@container-prep'
+
+
+t_fedora:37:autotools shared expat:
+  extends:
+    - .build autotools shared expat
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '37'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:37@container-prep'
+
+
+t_fedora:37:autotools shared libxml2:
+  extends:
+    - .build autotools shared libxml2
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '37'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:37@container-prep'
+
+
+t_fedora:37:autotools static expat:
+  extends:
+    - .build autotools static expat
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '37'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:37@container-prep'
+
+
+t_fedora:37:autotools static libxml2:
+  extends:
+    - .build autotools static libxml2
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '37'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:37@container-prep'
+
+
+t_fedora:37:meson shared:
+  extends:
+    - .build meson shared
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '37'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:37@container-prep'
+
+
+t_fedora:37:meson static:
+  extends:
+    - .build meson static
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '37'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:37@container-prep'
+
+
+t_fedora:36:autotools shared expat:
+  extends:
+    - .build autotools shared expat
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '36'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:36@container-prep'
+
+
+t_fedora:36:autotools shared libxml2:
+  extends:
+    - .build autotools shared libxml2
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '36'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:36@container-prep'
+
+
+t_fedora:36:autotools static expat:
+  extends:
+    - .build autotools static expat
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '36'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:36@container-prep'
+
+
+t_fedora:36:autotools static libxml2:
+  extends:
+    - .build autotools static libxml2
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '36'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:36@container-prep'
+
+
+t_fedora:36:meson shared:
+  extends:
+    - .build meson shared
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '36'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:36@container-prep'
+
+
+t_fedora:36:meson static:
+  extends:
+    - .build meson static
+    - .fdo.distribution-image@fedora
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '36'
+    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
+  needs:
+    - 'fedora:36@container-prep'
 
-meson macos:
-  stage: 'build'
-  tags:
-    - gst-macos-11.1
-  artifacts:
-    name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}"
-    expire_in: '5 days'
-    when: 'always'
-    paths:
-      - "build/meson-logs/*txt"
-  before_script:
-    - 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 t install certificates
-    - open /Applications/Python\ 3.8/Install\ Certificates.command
-    # Get ninja
-    - curl -L -o ninja-mac.zip https://github.com/ninja-build/ninja/releases/download/v1.10.0/ninja-mac.zip
-    - unzip ninja-mac.zip
-    - sudo cp ninja /usr/local/bin
-  script:
-    - CERT_PATH=$(python3 -m certifi) && export SSL_CERT_FILE=${CERT_PATH} && export REQUESTS_CA_BUNDLE=${CERT_PATH} && meson build
-    - ninja -C build
-    - ninja -C build test
-
-# msys infrastructure is a bit broken, disable for now
-meson msys2:
-  extends: '.build meson windows'
-  when: 'manual'
-  allow_failure: true
-  script:
-    # 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"," ")
-
-    - $env:PATH += ";C:\msys64\usr\bin;C:\msys64\mingw64/bin;C:\msys64\mingw32/bin"
-    # XXX: Copied from https://gitlab.freedesktop.org/gstreamer/gst-ci/blob/master/gitlab/ci_template.yml#L487
-    # For some reason docker build hangs if this is included in the image, needs more troubleshooting
-    - C:\msys64\usr\bin\bash -c "pacman-key --init && pacman-key --populate msys2 && pacman-key --refresh-keys || true"
-    - C:\msys64\usr\bin\bash -c "pacman -Syuu --noconfirm"
-    - C:\msys64\usr\bin\bash -c "pacman -Sy --noconfirm --needed mingw-w64-x86_64-toolchain ninja"
-    - C:\msys64\usr\bin\bash -c "meson build $env:MESON_ARGS &&
-        ninja -C build &&
-        ninja -C build test"
-
-meson android arm64 fedora:
-  # See https://gitlab.freedesktop.org/gstreamer/gst-ci/container_registry/164 for current images
-  image: 'registry.freedesktop.org/gstreamer/gst-ci/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_args          = ['-Wno-pointer-bool-conversion']
-      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 --werror --cross-file android-cross-file.txt build
-    - meson compile --verbose -C build
diff --git a/.gitlab-ci/ci.template b/.gitlab-ci/ci.template
new file mode 100644
index 0000000..477b491
--- /dev/null
+++ b/.gitlab-ci/ci.template
@@ -0,0 +1,267 @@
+# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0 filetype=yaml:
+
+{# You're looking at the template here, so you can ignore the below
+   warning. This is the right file to edit #}
+#######################################
+#                                     #
+# THIS FILE IS GENERATED, DO NOT EDIT #
+#                                     #
+#######################################
+
+# To change the gitlab CI, edit .gitlab-ci/ci.template and/or .gitlab-ci/config.yml
+# and run ci-fairy generate-template. For details, see
+# https://freedesktop.pages.freedesktop.org/ci-templates/ci-fairy.html#templating-gitlab-ci-yml
+
+.templates_sha: &template_sha dd90ac0d7a03b574eb4f18d7358083f0c97825f3
+
+include:
+  {% for distro in distributions|sort(attribute="name") %}
+  # {{ distro.name.capitalize() }} container builder template
+  - project: 'freedesktop/ci-templates'
+    ref: *template_sha
+    file: '/templates/{{distro.name}}.yml'
+  {% endfor %}
+  - project: 'freedesktop/ci-templates'
+    ref: *template_sha
+    file: '/templates/ci-fairy.yml'
+
+stages:
+  - prep
+  - test
+  - container_clean
+
+variables:
+  FDO_UPSTREAM_REPO: fontconfig/fontconfig
+  GIT_DEPTH: 1
+
+# these tags should be updated each time the list of packages is updated
+# changing these will force rebuilding the associated image
+# Note: these tags have no meaning and are not tied to a particular
+# fontconfig version
+{% for distro in distributions %}
+  {{"%-13s"| format(distro.name.upper() + '_TAG:')}}'{{distro.tag}}-{{
+    (ci_fairy.hashfiles('.gitlab-ci/config.yml',
+                        '.gitlab-ci/' + distro.name + '-install.sh'))[0:12]
+  }}'
+{% endfor %}
+
+{% for distro in distributions %}
+  {{"%-13s"| format(distro.name.upper() + '_EXEC:')}}'bash .gitlab-ci/{{distro.name}}-install.sh'
+{% endfor %}
+
+#######################################
+#                                     #
+#          containers stage           #
+#                                     #
+#######################################
+
+# Build a container for each distribution + version. The ci-templates
+# will re-use the containers if the tag doesn't change.
+{% for distro in distributions %}
+{% for version in distro.versions %}
+
+{{distro.name}}:{{version}}@container-prep:
+  extends:
+    - .fdo.container-build@{{distro.name}}
+  stage: prep
+  variables:
+    GIT_STRATEGY: none
+    FDO_DISTRIBUTION_VERSION: '{{version}}'
+    FDO_DISTRIBUTION_PACKAGES: '{{' '.join(packages[distro.name].needed)}}'
+    FDO_DISTRIBUTION_TAG: ${{distro.name.upper()}}_TAG
+    FDO_DISTRIBUTION_EXEC: ${{distro.name.upper()}}_EXEC
+{% endfor %}
+{% endfor %}
+
+#######################################
+#                                     #
+#        container clean stage        #
+#                                     #
+#######################################
+
+#
+# This stage will look for the container images e currently have in
+# the registry and will remove any that are not tagged with the provided
+# $container_image:$tag
+#
+# This job only runs for a scheduled pipeline.
+#
+# Go to your Profile, Settings, Access Tokens
+# Create a personal token with `api' scope, copy the value.
+# Go to CI/CD, Schedules, schedule a monthly job.
+# Define a variable of type File named AUTHFILE. Content is that token
+# value.
+.container-clean:
+  stage: container_clean
+  image: golang:alpine
+  before_script:
+    - apk add python3 py-pip git
+    - pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
+  script:
+    - ci-fairy -v --authfile $AUTHFILE delete-image
+            --repository $FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION
+	    --exclude-tag $FDO_DISTRIBUTION_TAG
+  dependencies: []
+  allow_failure: true
+  only:
+    - schedules
+
+{% for distro in distributions %}
+{% for version in distro.versions %}
+{{distro.name}}:{{version}}@container-clean:
+  extends:
+    - .container-clean
+  variables:
+    GIT_STRATEGY: none
+    CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/{{distro.name}}/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
+    FDO_DISTRIBUTION_VERSION: '{{version}}'
+    FDO_DISTRIBUTION_TAG: ${{distro.name.upper()}}_TAG
+
+{% endfor %}
+{% endfor %}
+
+#######################################
+#                                     #
+#             build stage             #
+#                                     #
+#######################################
+
+.build autotools shared expat:
+  stage: test
+  script:
+    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
+    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
+    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
+    - export MAKEFLAGS="-j4"
+    - mkdir "$BUILDDIR" "$PREFIX"
+    - cd "$BUILDDIR"
+    - env
+    - r=0
+    - ../autogen.sh --prefix="$PREFIX" --enable-shared --disable-static --disable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
+    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - make distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - mv /tmp/fc-build.log .
+    - exit $r
+.build autotools shared libxml2:
+  stage: test
+  script:
+    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
+    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
+    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
+    - export MAKEFLAGS="-j4"
+    - mkdir "$BUILDDIR" "$PREFIX"
+    - cd "$BUILDDIR"
+    - env
+    - r=0
+    - ../autogen.sh --prefix="$PREFIX" --enable-shared --disable-static --enable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
+    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - make distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - mv /tmp/fc-build.log .
+    - exit $r
+.build autotools static expat:
+  stage: test
+  script:
+    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
+    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
+    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
+    - export MAKEFLAGS="-j4"
+    - mkdir "$BUILDDIR" "$PREFIX"
+    - cd "$BUILDDIR"
+    - env
+    - r=0
+    - ../autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --disable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
+    - make check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - mv /tmp/fc-build.log .
+    - exit $r
+.build autotools static libxml2:
+  stage: test
+  script:
+    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
+    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
+    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
+    - export MAKEFLAGS="-j4"
+    - mkdir "$BUILDDIR" "$PREFIX"
+    - cd "$BUILDDIR"
+    - env
+    - r=0
+    - ../autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --enable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
+    - make check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    - mv /tmp/fc-build.log .
+    - exit $r
+.build meson shared:
+  stage: test
+  before_script:
+    - pip install meson
+  script:
+    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
+    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
+    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
+    - export MAKEFLAGS="-j4"
+    - env
+    - r=0
+    - meson --prefix="$PREFIX" --default-library=shared "$BUILDDIR" 2>&1 | tee /tmp/fc-build.log || r=$?
+    - meson compile -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
+    - meson test -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
+    - meson install -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
+    - meson dist -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
+    - mv /tmp/fc-build.log .
+    - exit $r
+.build meson static:
+  stage: test
+  before_script:
+    - pip install meson
+  script:
+    - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
+    - export PREFIX="$(pwd)/prefix-$BUILD_ID"
+    - export BUILDDIR="$(pwd)/build-$BUILD_ID"
+    - export MAKEFLAGS="-j4"
+    - env
+    - r=0
+    - meson --prefix="$PREFIX" --default-library=static "$BUILDDIR" 2>&1 | tee /tmp/fc-build.log || r=$?
+    - meson compile -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
+    - meson test -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
+    - meson install -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
+    - mv /tmp/fc-build.log .
+    - exit $r
+.fc_artifacts:
+  artifacts:
+    name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
+    when: always
+    expire_in: 5 days
+    paths:
+      - fc-build.log
+      - build-*/fontconfig-*.tar.*
+      - build-*/fontconfig*/_build
+
+#######################################
+#                                     #
+#              test stage             #
+#                                     #
+#######################################
+
+{% for distro in distributions %}
+{% for version in distro.versions %}
+{% for bs in distro.buildsys %}
+
+t_{{distro.name}}:{{version}}:{{bs}}:
+  extends:
+    - .build {{bs}}
+    - .fdo.distribution-image@{{distro.name}}
+    - .fc_artifacts
+  variables:
+    FDO_DISTRIBUTION_VERSION: '{{version}}'
+    FDO_DISTRIBUTION_TAG: ${{distro.name.upper()}}_TAG
+    {# Where we have extra_variables defined, add them to the list #}
+    {% if distro.build is defined and distro.build.extra_variables is defined %}
+    {% for var in distro.build.extra_variables %}
+    {{var}}
+    {% endfor %}
+    {% endif %}
+  needs:
+    - '{{distro.name}}:{{version}}@container-prep'
+
+{% endfor %}
+{% endfor %}
+{% endfor %}
diff --git a/.gitlab-ci/config.yml b/.gitlab-ci/config.yml
new file mode 100644
index 0000000..cf1ae0f
--- /dev/null
+++ b/.gitlab-ci/config.yml
@@ -0,0 +1,43 @@
+.default_tag: &default_tag "2023-03-31.0"
+
+distributions:
+  - name: fedora
+    tag: *default_tag
+    base_type: fedora
+    versions:
+      - "rawhide"
+      - "38"
+      - "37"
+      - "36"
+    buildsys:
+      - "autotools shared expat"
+      - "autotools shared libxml2"
+      - "autotools static expat"
+      - "autotools static libxml2"
+      - "meson shared"
+      - "meson static"
+
+packages:
+  fedora:
+    needed:
+      [
+        "@buildsys-build",
+        "autoconf",
+        "automake",
+        "libtool",
+        "gettext",
+        "gettext-devel",
+        "gperf",
+        "expat-devel",
+        "libxml2-devel",
+        "freetype-devel",
+        "json-c-devel",
+        "git",
+        "docbook-utils",
+        "docbook-utils-pdf",
+        "bubblewrap",
+        "ninja-build",
+        "wget",
+        "python3-pip",
+      ]
+    use_qemu: false
diff --git a/.gitlab-ci/fedora-install.sh b/.gitlab-ci/fedora-install.sh
new file mode 100644
index 0000000..4a21923
--- /dev/null
+++ b/.gitlab-ci/fedora-install.sh
@@ -0,0 +1,3 @@
+#! /bin/bash
+
+set -ex



[Index of Archives]     [Fedora Fonts]     [Fedora Users]     [Fedora Cloud]     [Kernel]     [Fedora Packaging]     [Fedora Desktop]     [PAM]     [Gimp Graphics Editor]     [Yosemite News]

  Powered by Linux