fontconfig: Branch 'main' - 2 commits

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

 



 .gitlab-ci.yml                |  417 +++++++++++++++++++++++++++---------------
 .gitlab-ci/build.sh           |   24 +-
 .gitlab-ci/ci.template        |  147 ++++++++++++++
 .gitlab-ci/config.yml         |   78 ++++++-
 .gitlab-ci/freebsd-cross.sh   |    4 
 .gitlab-ci/freebsd-install.sh |    3 
 6 files changed, 499 insertions(+), 174 deletions(-)

New commits:
commit 51160281e3c8eec793099ad5d5f0d1ed762d8d9b
Author: Akira TAGOH <akira@xxxxxxxxx>
Date:   Wed Dec 6 19:21:38 2023 +0900

    CI: static build only for rawhide

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4899faf..c6434f3 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -41,8 +41,8 @@ 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-12-05.1-7b7a4d882550'
-  FREEBSD_TAG:   '2023-12-05.1-9e4cd5a85377'
+  FEDORA_TAG:    '2023-12-05.1-7c59f403cca5'
+  FREEBSD_TAG:   '2023-12-05.1-b3f6fd9ee634'
 
   FEDORA_EXEC:   'bash .gitlab-ci/fedora-install.sh'
   FREEBSD_EXEC:  'bash .gitlab-ci/freebsd-install.sh'
@@ -372,7 +372,7 @@ t_fedora:rawhide:autotools shared libxml2:
     - 'fedora:rawhide@container-prep'
 
 
-t_fedora:rawhide:autotools static expat:
+t_fedora:rawhide:meson shared expat:
   extends:
     - .build@template
     - .fdo.distribution-image@fedora
@@ -381,14 +381,14 @@ t_fedora:rawhide:autotools static expat:
     FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: 'rawhide'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
-    FC_BUILDSYS: autotools
-    FC_BUILD_TYPE: static
+    FC_BUILDSYS: meson
+    FC_BUILD_TYPE: shared
     FC_XML_BACKEND: expat
   needs:
     - 'fedora:rawhide@container-prep'
 
 
-t_fedora:rawhide:autotools static libxml2:
+t_fedora:rawhide:autotools static expat:
   extends:
     - .build@template
     - .fdo.distribution-image@fedora
@@ -399,12 +399,12 @@ t_fedora:rawhide:autotools static libxml2:
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
     FC_BUILDSYS: autotools
     FC_BUILD_TYPE: static
-    FC_XML_BACKEND: libxml2
+    FC_XML_BACKEND: expat
   needs:
     - 'fedora:rawhide@container-prep'
 
 
-t_fedora:rawhide:mingw autotools static libxml2:
+t_fedora:rawhide:autotools static libxml2:
   extends:
     - .build@template
     - .fdo.distribution-image@fedora
@@ -416,13 +416,11 @@ t_fedora:rawhide:mingw autotools static libxml2:
     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 shared expat:
+t_fedora:rawhide:meson static expat:
   extends:
     - .build@template
     - .fdo.distribution-image@fedora
@@ -432,13 +430,13 @@ t_fedora:rawhide:meson shared expat:
     FDO_DISTRIBUTION_VERSION: 'rawhide'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
     FC_BUILDSYS: meson
-    FC_BUILD_TYPE: shared
+    FC_BUILD_TYPE: static
     FC_XML_BACKEND: expat
   needs:
     - 'fedora:rawhide@container-prep'
 
 
-t_fedora:rawhide:meson static expat:
+t_fedora:rawhide:mingw autotools static libxml2:
   extends:
     - .build@template
     - .fdo.distribution-image@fedora
@@ -447,9 +445,11 @@ t_fedora:rawhide:meson static expat:
     FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: 'rawhide'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
-    FC_BUILDSYS: meson
+    FC_BUILDSYS: autotools
     FC_BUILD_TYPE: static
-    FC_XML_BACKEND: expat
+    FC_XML_BACKEND: libxml2
+    FC_BUILD_PLATFORM: mingw
+    FC_BUILD_ARCH: x86_64-mingw32
   needs:
     - 'fedora:rawhide@container-prep'
 
@@ -506,7 +506,7 @@ t_fedora:39:autotools shared libxml2:
     - 'fedora:39@container-prep'
 
 
-t_fedora:39:autotools static expat:
+t_fedora:39:meson shared expat:
   extends:
     - .build@template
     - .fdo.distribution-image@fedora
@@ -515,96 +515,21 @@ t_fedora:39:autotools static expat:
     FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: '39'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
-    FC_BUILDSYS: autotools
-    FC_BUILD_TYPE: static
+    FC_BUILDSYS: meson
+    FC_BUILD_TYPE: shared
     FC_XML_BACKEND: expat
   needs:
     - 'fedora:39@container-prep'
 
 
-t_fedora:39:autotools static libxml2:
-  extends:
-    - .build@template
-    - .fdo.distribution-image@fedora
-    - .fc_artifacts
-  variables:
-    FC_DISTRO_NAME: fedora
-    FDO_DISTRIBUTION_VERSION: '39'
-    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
-    FC_BUILDSYS: autotools
-    FC_BUILD_TYPE: static
-    FC_XML_BACKEND: libxml2
-  needs:
-    - 'fedora:39@container-prep'
 
 
-t_fedora:39:mingw autotools static libxml2:
-  extends:
-    - .build@template
-    - .fdo.distribution-image@fedora
-    - .fc_artifacts
-  variables:
-    FC_DISTRO_NAME: fedora
-    FDO_DISTRIBUTION_VERSION: '39'
-    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:39@container-prep'
 
 
-t_fedora:39:meson shared expat:
-  extends:
-    - .build@template
-    - .fdo.distribution-image@fedora
-    - .fc_artifacts
-  variables:
-    FC_DISTRO_NAME: fedora
-    FDO_DISTRIBUTION_VERSION: '39'
-    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
-    FC_BUILDSYS: meson
-    FC_BUILD_TYPE: shared
-    FC_XML_BACKEND: expat
-  needs:
-    - 'fedora:39@container-prep'
 
 
-t_fedora:39:meson static expat:
-  extends:
-    - .build@template
-    - .fdo.distribution-image@fedora
-    - .fc_artifacts
-  variables:
-    FC_DISTRO_NAME: fedora
-    FDO_DISTRIBUTION_VERSION: '39'
-    FDO_DISTRIBUTION_TAG: $FEDORA_TAG
-    FC_BUILDSYS: meson
-    FC_BUILD_TYPE: static
-    FC_XML_BACKEND: expat
-  needs:
-    - 'fedora:39@container-prep'
 
 
-t_fedora:39:mingw meson static expat:
-  extends:
-    - .build@template
-    - .fdo.distribution-image@fedora
-    - .fc_artifacts
-  variables:
-    FC_DISTRO_NAME: fedora
-    FDO_DISTRIBUTION_VERSION: '39'
-    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:39@container-prep'
 
 
 t_fedora:38:autotools shared expat:
@@ -640,7 +565,7 @@ t_fedora:38:autotools shared libxml2:
     - 'fedora:38@container-prep'
 
 
-t_fedora:38:autotools static expat:
+t_fedora:38:meson shared expat:
   extends:
     - .build@template
     - .fdo.distribution-image@fedora
@@ -649,96 +574,21 @@ t_fedora:38:autotools static expat:
     FC_DISTRO_NAME: fedora
     FDO_DISTRIBUTION_VERSION: '38'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
-    FC_BUILDSYS: autotools
-    FC_BUILD_TYPE: static
+    FC_BUILDSYS: meson
+    FC_BUILD_TYPE: shared
     FC_XML_BACKEND: expat
   needs:
     - 'fedora:38@container-prep'
 
 
-t_fedora:38:autotools static libxml2:
-  extends:
-    - .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:38:mingw autotools static libxml2:
-  extends:
-    - .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
-    FC_BUILD_PLATFORM: mingw
-    FC_BUILD_ARCH: x86_64-mingw32
-  needs:
-    - 'fedora:38@container-prep'
 
 
-t_fedora:38:meson shared expat:
-  extends:
-    - .build@template
-    - .fdo.distribution-image@fedora
-    - .fc_artifacts
-  variables:
-    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:38@container-prep'
 
 
-t_fedora:38:meson static expat:
-  extends:
-    - .build@template
-    - .fdo.distribution-image@fedora
-    - .fc_artifacts
-  variables:
-    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:38@container-prep'
 
 
-t_fedora:38:mingw meson static expat:
-  extends:
-    - .build@template
-    - .fdo.distribution-image@fedora
-    - .fc_artifacts
-  variables:
-    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:38@container-prep'
 
 
 t_freebsd:14.0:autotools shared expat:
diff --git a/.gitlab-ci/ci.template b/.gitlab-ci/ci.template
index c7fd321..3a1f662 100644
--- a/.gitlab-ci/ci.template
+++ b/.gitlab-ci/ci.template
@@ -283,6 +283,7 @@ check-ci-script:
 {% for version in distro.versions %}
 {% for build in distro.builds %}
 
+{% if not 'build_only' in build or build.build_only == version %}
 t_{{distro.name}}:{{version}}:{{build.name}}:
   extends:
 {% if distro.qemu_based %}
@@ -304,6 +305,7 @@ t_{{distro.name}}:{{version}}:{{build.name}}:
     {% endif %}
   needs:
     - '{{distro.name}}:{{version}}@container-prep'
+{% endif %}
 
 {% endfor %}
 {% endfor %}
diff --git a/.gitlab-ci/config.yml b/.gitlab-ci/config.yml
index 21ee147..d3547f0 100644
--- a/.gitlab-ci/config.yml
+++ b/.gitlab-ci/config.yml
@@ -21,34 +21,39 @@ distributions:
           FC_BUILD_TYPE: shared
           FC_XML_BACKEND: libxml2
           FC_BUILD_DISTCHECK: 1
+      - name: "meson shared expat"
+        variables:
+          FC_BUILDSYS: meson
+          FC_BUILD_TYPE: shared
+          FC_XML_BACKEND: expat
       - name: "autotools static expat"
+        build_only: "rawhide"
         variables:
           FC_BUILDSYS: autotools
           FC_BUILD_TYPE: static
           FC_XML_BACKEND: expat
       - name: "autotools static libxml2"
+        build_only: "rawhide"
         variables:
           FC_BUILDSYS: autotools
           FC_BUILD_TYPE: static
           FC_XML_BACKEND: libxml2
+      - name: "meson static expat"
+        build_only: "rawhide"
+        variables:
+          FC_BUILDSYS: meson
+          FC_BUILD_TYPE: static
+          FC_XML_BACKEND: expat
       - name: "mingw autotools static libxml2"
+        build_only: "rawhide"
         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"
+        build_only: "rawhide"
         variables:
           FC_BUILDSYS: meson
           FC_BUILD_TYPE: static
commit 966ab23a99b8f39631c59464c045c6d406145d5b
Author: Akira TAGOH <akira@xxxxxxxxx>
Date:   Tue Dec 5 14:39:00 2023 +0900

    CI: Update
    
    * Add FreeBSD
    * Add some sanity checks

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e66d15c..4899faf 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -17,14 +17,20 @@ include:
   - project: 'freedesktop/ci-templates'
     ref: *template_sha
     file: '/templates/fedora.yml'
+  # Freebsd container builder template
+  - project: 'freedesktop/ci-templates'
+    ref: *template_sha
+    file: '/templates/freebsd.yml'
   - project: 'freedesktop/ci-templates'
     ref: *template_sha
     file: '/templates/ci-fairy.yml'
   - local: '.gitlab-ci/other.yml'
 
 stages:
+  - sanity check
   - prep
   - test
+  - deploy
   - container_clean
 
 variables:
@@ -35,9 +41,45 @@ 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-12-05.0-e56dbdc02823'
+  FEDORA_TAG:    '2023-12-05.1-7b7a4d882550'
+  FREEBSD_TAG:   '2023-12-05.1-9e4cd5a85377'
+
+  FEDORA_EXEC:   'bash .gitlab-ci/fedora-install.sh'
+  FREEBSD_EXEC:  'bash .gitlab-ci/freebsd-install.sh'
+
+#######################################
+#                                     #
+#            sanity check             #
+#                                     #
+#######################################
 
-  FEDORA_EXEC: 'bash .gitlab-ci/fedora-install.sh'
+fail-if-fork-is-not-public:
+  stage: sanity check
+  script:
+    - |
+      if [ $CI_PROJECT_VISIBILITY != "public" ]; then
+          echo "*************************************************************************************"
+          echo "Project visibility must be set to 'public'."
+          echo "Change this in $CI_PROJECT_URL/edit under 'Visibility, project features, permissions'"
+          echo "*************************************************************************************"
+          exit 1
+      fi
+  except:
+    - main@fontconfig/fontconfig
+
+check-ci-script:
+  extends:
+    - .fdo.ci-fairy
+  stage: sanity check
+  script:
+    - ci-fairy generate-template --verify && exit 0 || true
+    - >
+      printf "%s\n" \
+        "Committed gitlab-ci.yml differs from generated gitlab-ci.yml." \
+        "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";
+    - exit 1
 
 #######################################
 #                                     #
@@ -78,6 +120,30 @@ fedora:38@container-prep:
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
     FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
 
+freebsd:14.0@container-prep:
+  extends: .fdo.qemu-build@freebsd
+  tags:
+    - kvm
+  stage: prep
+  variables:
+    GIT_STRATEGY: none
+    FDO_DISTRIBUTION_VERSION: '14.0'
+    FDO_DISTRIBUTION_PACKAGES: 'gcc autoconf automake libtool gettext gperf expat libxml2 freetype2 json-c git ninja wget python3 py39-pip pkgconf gmake'
+    FDO_DISTRIBUTION_TAG: $FREEBSD_TAG
+    FDO_DISTRIBUTION_EXEC: $FREEBSD_EXEC
+
+freebsd:13.2@container-prep:
+  extends: .fdo.qemu-build@freebsd
+  tags:
+    - kvm
+  stage: prep
+  variables:
+    GIT_STRATEGY: none
+    FDO_DISTRIBUTION_VERSION: '13.2'
+    FDO_DISTRIBUTION_PACKAGES: 'gcc autoconf automake libtool gettext gperf expat libxml2 freetype2 json-c git ninja wget python3 py39-pip pkgconf gmake'
+    FDO_DISTRIBUTION_TAG: $FREEBSD_TAG
+    FDO_DISTRIBUTION_EXEC: $FREEBSD_EXEC
+
 #######################################
 #                                     #
 #        container clean stage        #
@@ -138,6 +204,24 @@ fedora:38@container-clean:
     FDO_DISTRIBUTION_VERSION: '38'
     FDO_DISTRIBUTION_TAG: $FEDORA_TAG
 
+freebsd:14.0@container-clean:
+  extends:
+    - .container-clean
+  variables:
+    GIT_STRATEGY: none
+    CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/freebsd/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
+    FDO_DISTRIBUTION_VERSION: '14.0'
+    FDO_DISTRIBUTION_TAG: $FREEBSD_TAG
+
+freebsd:13.2@container-clean:
+  extends:
+    - .container-clean
+  variables:
+    GIT_STRATEGY: none
+    CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/freebsd/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
+    FDO_DISTRIBUTION_VERSION: '13.2'
+    FDO_DISTRIBUTION_TAG: $FREEBSD_TAG
+
 
 #######################################
 #                                     #
@@ -145,9 +229,68 @@ fedora:38@container-clean:
 #                                     #
 #######################################
 
+.check_tainted: &check_tainted |
+  # make sure the kernel is not tainted
+  if [[ "$(ssh localhost -p 5555 cat /proc/sys/kernel/tainted)" -gt 0 ]];
+  then
+    echo tainted kernel ;
+    exit 1 ;
+  fi
+
+.build-in-qemu@template:
+  tags:
+    - kvm
+  script:
+    - /app/vmctl start || (echo "Error - Failed to start the VM." && exit 1)
+
+    - *check_tainted
+
+    - 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"
+    - |
+      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)
+      [ $FC_BUILD_NO_CHECK -eq 1 ] && buildopt+=(-C)
+      buildopt+=(-s $FC_BUILDSYS)
+      buildopt+=(-t $FC_BUILD_TYPE)
+      buildopt+=(-X $FC_XML_BACKEND)
+      export buildopt
+    - "scp -r $(pwd) vm:"
+    - echo "CI_JOB_ID=\"$CI_JOB_ID\"" > fcenv
+    - echo "CI_JOB_NAME=\"$CI_JOB_NAME\"" >> fcenv
+    - echo "BUILD_ID=\"$BUILD_ID\"" >> fcenv
+    - echo "MAKEFLAGS=\"$MAKEFLAGS\"" >> fcenv
+    - echo "MAKE=\"$MAKE\"" >> fcenv
+    - "scp fcenv vm:~/$CI_PROJECT_NAME/.gitlab-ci/fcenv"
+    - /app/vmctl exec "cd $CI_PROJECT_NAME ; bash .gitlab-ci/build.sh ${buildopt[@]}" && touch .success || true
+    - scp -r vm:$CI_PROJECT_NAME/build $BUILDDIR
+
+    - *check_tainted
+
+    - /app/vmctl stop
+    - if [[ ! -e .success ]];
+      then
+        exit 1 ;
+      fi
+  variables:
+    FC_BUILDSYS: autotools
+    FC_XML_BACKEND: expat
+    FC_BUILD_TYPE: both
+    FC_BUILD_DISTCHECK: 0
+    FC_BUILD_NO_INSTALL: 0
+    FC_BUILD_NO_CHECK: 0
+
 .build@template:
-  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"
@@ -164,16 +307,18 @@ fedora:38@container-clean:
       [ -n "$FC_BUILD_ARCH" ] && buildopt+=(-a $FC_BUILD_ARCH)
       [ $FC_BUILD_DISTCHECK -eq 1 ] && buildopt+=(-c)
       [ $FC_BUILD_NO_INSTALL -eq 1 ] && buildopt+=(-I)
+      [ $FC_BUILD_NO_CHECK -eq 1 ] && buildopt+=(-C)
       buildopt+=(-s $FC_BUILDSYS)
       buildopt+=(-t $FC_BUILD_TYPE)
       buildopt+=(-X $FC_XML_BACKEND)
-      sh .gitlab-ci/build.sh ${buildopt[*]}
+      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_BUILD_NO_CHECK: 0
 
 .fc_artifacts:
   artifacts:
@@ -181,9 +326,11 @@ fedora:38@container-clean:
     when: always
     expire_in: 5 days
     paths:
-      - fc-build.log
-      - build-*/fontconfig-*.tar.*
-      - build-*/fontconfig*/_build
+      - build*/fc-build.log
+      - build*/fontconfig-*.tar.*
+      - build*/test/*log
+      - build*/fontconfig*/_build
+      - build*/meson-logs/*
 
 #######################################
 #                                     #
@@ -594,3 +741,127 @@ t_fedora:38:mingw meson static expat:
     - 'fedora:38@container-prep'
 
 
+t_freebsd:14.0:autotools shared expat:
+  extends:
+    - .build-in-qemu@template
+    - .fdo.distribution-image@freebsd
+    - .fc_artifacts
+  variables:
+    FC_DISTRO_NAME: freebsd
+    FDO_DISTRIBUTION_VERSION: '14.0'
+    FDO_DISTRIBUTION_TAG: $FREEBSD_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: shared
+    FC_XML_BACKEND: expat
+    MAKE: gmake
+    FC_BUILD_NO_CHECK: 1
+  needs:
+    - 'freebsd:14.0@container-prep'
+
+
+t_freebsd:14.0:autotools shared libxml2:
+  extends:
+    - .build-in-qemu@template
+    - .fdo.distribution-image@freebsd
+    - .fc_artifacts
+  variables:
+    FC_DISTRO_NAME: freebsd
+    FDO_DISTRIBUTION_VERSION: '14.0'
+    FDO_DISTRIBUTION_TAG: $FREEBSD_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: shared
+    FC_XML_BACKEND: libxml2
+    MAKE: gmake
+    FC_BUILD_NO_CHECK: 1
+  needs:
+    - 'freebsd:14.0@container-prep'
+
+
+t_freebsd:14.0:meson shared expat:
+  extends:
+    - .build-in-qemu@template
+    - .fdo.distribution-image@freebsd
+    - .fc_artifacts
+  variables:
+    FC_DISTRO_NAME: freebsd
+    FDO_DISTRIBUTION_VERSION: '14.0'
+    FDO_DISTRIBUTION_TAG: $FREEBSD_TAG
+    FC_BUILDSYS: meson
+    FC_BUILD_TYPE: shared
+    FC_XML_BACKEND: expat
+    FC_BUILD_NO_CHECK: 1
+  needs:
+    - 'freebsd:14.0@container-prep'
+
+
+t_freebsd:13.2:autotools shared expat:
+  extends:
+    - .build-in-qemu@template
+    - .fdo.distribution-image@freebsd
+    - .fc_artifacts
+  variables:
+    FC_DISTRO_NAME: freebsd
+    FDO_DISTRIBUTION_VERSION: '13.2'
+    FDO_DISTRIBUTION_TAG: $FREEBSD_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: shared
+    FC_XML_BACKEND: expat
+    MAKE: gmake
+    FC_BUILD_NO_CHECK: 1
+  needs:
+    - 'freebsd:13.2@container-prep'
+
+
+t_freebsd:13.2:autotools shared libxml2:
+  extends:
+    - .build-in-qemu@template
+    - .fdo.distribution-image@freebsd
+    - .fc_artifacts
+  variables:
+    FC_DISTRO_NAME: freebsd
+    FDO_DISTRIBUTION_VERSION: '13.2'
+    FDO_DISTRIBUTION_TAG: $FREEBSD_TAG
+    FC_BUILDSYS: autotools
+    FC_BUILD_TYPE: shared
+    FC_XML_BACKEND: libxml2
+    MAKE: gmake
+    FC_BUILD_NO_CHECK: 1
+  needs:
+    - 'freebsd:13.2@container-prep'
+
+
+t_freebsd:13.2:meson shared expat:
+  extends:
+    - .build-in-qemu@template
+    - .fdo.distribution-image@freebsd
+    - .fc_artifacts
+  variables:
+    FC_DISTRO_NAME: freebsd
+    FDO_DISTRIBUTION_VERSION: '13.2'
+    FDO_DISTRIBUTION_TAG: $FREEBSD_TAG
+    FC_BUILDSYS: meson
+    FC_BUILD_TYPE: shared
+    FC_XML_BACKEND: expat
+    FC_BUILD_NO_CHECK: 1
+  needs:
+    - 'freebsd:13.2@container-prep'
+
+
+#######################################
+#                                     #
+#            deploy stage             #
+#                                     #
+#######################################
+
+check-merge-request:
+  extends:
+    - .fdo.ci-fairy
+  stage: deploy
+  script:
+    - ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml
+  artifacts:
+    when: on_failure
+    reports:
+      junit: results.xml
+  allow_failure: true
+
diff --git a/.gitlab-ci/build.sh b/.gitlab-ci/build.sh
index 7c3c47b..39900a4 100755
--- a/.gitlab-ci/build.sh
+++ b/.gitlab-ci/build.sh
@@ -3,29 +3,36 @@
 set -ex
 set -o pipefail
 
+cidir=$(dirname $0)
+[ -f ${cidir}/fcenv ] && . ${cidir}/fcenv
+
 case "$OSTYPE" in
     msys) MyPWD=$(pwd -W) ;;
+    *BSD) PATH=$PATH:/usr/local/bin ;&
     *) MyPWD=$(pwd) ;;
 esac
 enable=()
 disable=()
 distcheck=0
 enable_install=1
+disable_check=0
 cross=0
 buildsys="autotools"
 type="both"
 arch=""
 buildopt=()
 SRCDIR=$MyPWD
+export MAKE=${MAKE:-make}
 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
+while getopts a:cCe:d:hIs:t:X: OPT
 do
     case $OPT in
         'a') arch=$OPTARG ;;
         'c') distcheck=1 ;;
+        'C') disable_check=1 ;;
         'e') enable+=($OPTARG) ;;
         'd') disable+=($OPTARG) ;;
         'I') enable_install=0 ;;
@@ -87,15 +94,18 @@ if [ x"$buildsys" == "xautotools" ]; then
     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=$?
+    $MAKE V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    if [ $disable_check -eq 0 ]; then
+        $MAKE check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    fi
     if [ $enable_install -eq 1 ]; then
-        make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
+        $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=$?
+        $MAKE distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
     fi
 elif [ x"$buildsys" == "xmeson" ]; then
+    pip install meson
     for i in "${enable[@]}"; do
         buildopt+=(-D$i=true)
     done
@@ -120,7 +130,9 @@ elif [ x"$buildsys" == "xmeson" ]; then
     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 [ $disable_check -eq 0 ]; then
+        meson test -v -C "$BUILDDIR" 2>&1 | tee -a /tmp/fc-build.log || r=$?
+    fi
     if [ $enable_install -eq 1 ]; then
         meson install -C "$BUILDDIR" 2>&1 | tee -a /tmp/fc-build.log || r=$?
     fi
diff --git a/.gitlab-ci/ci.template b/.gitlab-ci/ci.template
index 3612421..c7fd321 100644
--- a/.gitlab-ci/ci.template
+++ b/.gitlab-ci/ci.template
@@ -27,8 +27,10 @@ include:
   - local: '.gitlab-ci/other.yml'
 
 stages:
+  - sanity check
   - prep
   - test
+  - deploy
   - container_clean
 
 variables:
@@ -40,16 +42,50 @@ variables:
 # 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}}-{{
+  {{"%-15s"| 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'
+  {{"%-15s"| format(distro.name.upper() + '_EXEC:')}}'bash .gitlab-ci/{{distro.name}}-install.sh'
 {% endfor %}
 
+#######################################
+#                                     #
+#            sanity check             #
+#                                     #
+#######################################
+
+fail-if-fork-is-not-public:
+  stage: sanity check
+  script:
+    - |
+      if [ $CI_PROJECT_VISIBILITY != "public" ]; then
+          echo "*************************************************************************************"
+          echo "Project visibility must be set to 'public'."
+          echo "Change this in $CI_PROJECT_URL/edit under 'Visibility, project features, permissions'"
+          echo "*************************************************************************************"
+          exit 1
+      fi
+  except:
+    - main@fontconfig/fontconfig
+
+check-ci-script:
+  extends:
+    - .fdo.ci-fairy
+  stage: sanity check
+  script:
+    - ci-fairy generate-template --verify && exit 0 || true
+    - >
+      printf "%s\n" \
+        "Committed gitlab-ci.yml differs from generated gitlab-ci.yml." \
+        "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";
+    - exit 1
+
 #######################################
 #                                     #
 #          containers stage           #
@@ -62,7 +98,15 @@ variables:
 {% for version in distro.versions %}
 
 {{distro.name}}:{{version}}@container-prep:
+{% if distro.qemu_based %}
+  extends: .fdo.qemu-build@{{distro.name}}
+{% else %}
   extends: .fdo.container-build@{{distro.name}}
+{% endif %}
+{% if distro.qemu_based %}
+  tags:
+    - kvm
+{% endif %}
   stage: prep
   variables:
     GIT_STRATEGY: none
@@ -126,9 +170,68 @@ variables:
 #                                     #
 #######################################
 
+.check_tainted: &check_tainted |
+  # make sure the kernel is not tainted
+  if [[ "$(ssh localhost -p 5555 cat /proc/sys/kernel/tainted)" -gt 0 ]];
+  then
+    echo tainted kernel ;
+    exit 1 ;
+  fi
+
+.build-in-qemu@template:
+  tags:
+    - kvm
+  script:
+    - /app/vmctl start || (echo "Error - Failed to start the VM." && exit 1)
+
+    - *check_tainted
+
+    - 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"
+    - |
+      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)
+      [ $FC_BUILD_NO_CHECK -eq 1 ] && buildopt+=(-C)
+      buildopt+=(-s $FC_BUILDSYS)
+      buildopt+=(-t $FC_BUILD_TYPE)
+      buildopt+=(-X $FC_XML_BACKEND)
+      export buildopt
+    - "scp -r $(pwd) vm:"
+    - echo "CI_JOB_ID=\"$CI_JOB_ID\"" > fcenv
+    - echo "CI_JOB_NAME=\"$CI_JOB_NAME\"" >> fcenv
+    - echo "BUILD_ID=\"$BUILD_ID\"" >> fcenv
+    - echo "MAKEFLAGS=\"$MAKEFLAGS\"" >> fcenv
+    - echo "MAKE=\"$MAKE\"" >> fcenv
+    - "scp fcenv vm:~/$CI_PROJECT_NAME/.gitlab-ci/fcenv"
+    - /app/vmctl exec "cd $CI_PROJECT_NAME ; bash .gitlab-ci/build.sh ${buildopt[@]}" && touch .success || true
+    - scp -r vm:$CI_PROJECT_NAME/build $BUILDDIR
+
+    - *check_tainted
+
+    - /app/vmctl stop
+    - if [[ ! -e .success ]];
+      then
+        exit 1 ;
+      fi
+  variables:
+    FC_BUILDSYS: autotools
+    FC_XML_BACKEND: expat
+    FC_BUILD_TYPE: both
+    FC_BUILD_DISTCHECK: 0
+    FC_BUILD_NO_INSTALL: 0
+    FC_BUILD_NO_CHECK: 0
+
 .build@template:
-  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"
@@ -145,16 +248,18 @@ variables:
       [ -n "$FC_BUILD_ARCH" ] && buildopt+=(-a $FC_BUILD_ARCH)
       [ $FC_BUILD_DISTCHECK -eq 1 ] && buildopt+=(-c)
       [ $FC_BUILD_NO_INSTALL -eq 1 ] && buildopt+=(-I)
+      [ $FC_BUILD_NO_CHECK -eq 1 ] && buildopt+=(-C)
       buildopt+=(-s $FC_BUILDSYS)
       buildopt+=(-t $FC_BUILD_TYPE)
       buildopt+=(-X $FC_XML_BACKEND)
-      sh .gitlab-ci/build.sh ${buildopt[*]}
+      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_BUILD_NO_CHECK: 0
 
 .fc_artifacts:
   artifacts:
@@ -162,9 +267,11 @@ variables:
     when: always
     expire_in: 5 days
     paths:
-      - fc-build.log
-      - build-*/fontconfig-*.tar.*
-      - build-*/fontconfig*/_build
+      - build*/fc-build.log
+      - build*/fontconfig-*.tar.*
+      - build*/test/*log
+      - build*/fontconfig*/_build
+      - build*/meson-logs/*
 
 #######################################
 #                                     #
@@ -178,7 +285,11 @@ variables:
 
 t_{{distro.name}}:{{version}}:{{build.name}}:
   extends:
+{% if distro.qemu_based %}
+    - .build-in-qemu@template
+{% else %}
     - .build@template
+{% endif %}
     - .fdo.distribution-image@{{distro.name}}
     - .fc_artifacts
   variables:
@@ -198,3 +309,21 @@ t_{{distro.name}}:{{version}}:{{build.name}}:
 {% endfor %}
 {% endfor %}
 
+#######################################
+#                                     #
+#            deploy stage             #
+#                                     #
+#######################################
+
+check-merge-request:
+  extends:
+    - .fdo.ci-fairy
+  stage: deploy
+  script:
+    - ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml
+  artifacts:
+    when: on_failure
+    reports:
+      junit: results.xml
+  allow_failure: true
+
diff --git a/.gitlab-ci/config.yml b/.gitlab-ci/config.yml
index 968d7e2..21ee147 100644
--- a/.gitlab-ci/config.yml
+++ b/.gitlab-ci/config.yml
@@ -1,9 +1,10 @@
-.default_tag: &default_tag "2023-12-05.0"
+.default_tag: &default_tag "2023-12-05.1"
 
 distributions:
   - name: fedora
     tag: *default_tag
     base_type: fedora
+    qemu_based: false
     versions:
       - "rawhide"
       - "39"
@@ -55,6 +56,34 @@ distributions:
           FC_BUILD_PLATFORM: mingw
           FC_BUILD_ARCH: linux-mingw-w64-64bit
           FC_BUILD_NO_INSTALL: 1
+  - name: freebsd
+    tag: *default_tag
+    base_type: freebsd
+    qemu_based: true
+    versions:
+      - "14.0"
+      - "13.2"
+    builds:
+      - name: "autotools shared expat"
+        variables:
+          FC_BUILDSYS: autotools
+          FC_BUILD_TYPE: shared
+          FC_XML_BACKEND: expat
+          MAKE: gmake
+          FC_BUILD_NO_CHECK: 1  # FIXME: There is GNU-specific parameter issue in touch command.
+      - name: "autotools shared libxml2"
+        variables:
+          FC_BUILDSYS: autotools
+          FC_BUILD_TYPE: shared
+          FC_XML_BACKEND: libxml2
+          MAKE: gmake
+          FC_BUILD_NO_CHECK: 1
+      - name: "meson shared expat"
+        variables:
+          FC_BUILDSYS: meson
+          FC_BUILD_TYPE: shared
+          FC_XML_BACKEND: expat
+          FC_BUILD_NO_CHECK: 1
 
 packages:
   fedora:
@@ -83,4 +112,24 @@ packages:
         "mingw64-libxml2",
         "wine",
       ]
-    use_qemu: false
+  freebsd:
+    needed:
+      [
+        "gcc",
+        "autoconf",
+        "automake",
+        "libtool",
+        "gettext",
+        "gperf",
+        "expat",
+        "libxml2",
+        "freetype2",
+        "json-c",
+        "git",
+        "ninja",
+        "wget",
+        "python3",
+        "py39-pip",
+        "pkgconf",
+        "gmake",
+      ]
diff --git a/.gitlab-ci/freebsd-cross.sh b/.gitlab-ci/freebsd-cross.sh
new file mode 100644
index 0000000..c770d88
--- /dev/null
+++ b/.gitlab-ci/freebsd-cross.sh
@@ -0,0 +1,4 @@
+#! /bin/sh
+
+echo "** Cross build not supported."
+exit 1
diff --git a/.gitlab-ci/freebsd-install.sh b/.gitlab-ci/freebsd-install.sh
new file mode 100644
index 0000000..4a21923
--- /dev/null
+++ b/.gitlab-ci/freebsd-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