From 6567a246b7c98bf769b15f4544fb039d162dbe38 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Fri, 8 Oct 2021 17:29:10 -0700
Subject: [PATCH v3 17/17] ci: Build both with meson and as before.

---
 .cirrus.yml | 464 ++++++++++++++++++++++++++++++++++------------------
 1 file changed, 308 insertions(+), 156 deletions(-)

diff --git a/.cirrus.yml b/.cirrus.yml
index f75bdce6dec..eace4602ea3 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -13,14 +13,13 @@ env:
 
 
 task:
-  name: FreeBSD
   only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*freebsd.*'
   compute_engine_instance:
     image_project: pg-vm-images-aio
     image: family/pg-aio-freebsd-13-0
     platform: freebsd
-    cpu: 2
-    memory: 2G
+    cpu: 4
+    memory: 4G
     disk: 50
   env:
     CCACHE_DIR: "/tmp/ccache_dir"
@@ -39,33 +38,52 @@ task:
     - mkdir -p /tmp/ccache_dir
     - chown -R postgres:postgres /tmp/ccache_dir
 
-  configure_script: |
-    su postgres -c './configure \
-      --enable-cassert --enable-debug --enable-tap-tests \
-      --enable-nls \
-      \
-      --with-icu \
-      --with-ldap \
-      --with-libxml \
-      --with-libxslt \
-      \
-      --with-lz4 \
-      --with-pam \
-      --with-perl \
-      --with-python \
-      --with-ssl=openssl \
-      --with-tcl --with-tclconfig=/usr/local/lib/tcl8.6/ \
-      --with-uuid=bsd \
-      \
-      --with-includes=/usr/local/include --with-libs=/usr/local/lib \
-      CC="ccache cc"'
-  build_script:
-    - su postgres -c 'gmake -s -j3 && gmake -s -j3 -C contrib'
-  upload_caches:
-    - ccache
+  matrix:
+    - name: FreeBSD autoconf
+
+      configure_script: |
+        su postgres -c './configure \
+          --enable-cassert --enable-debug --enable-tap-tests \
+          --enable-nls \
+          \
+          --with-icu \
+          --with-ldap \
+          --with-libxml \
+          --with-libxslt \
+          \
+          --with-lz4 \
+          --with-pam \
+          --with-perl \
+          --with-python \
+          --with-ssl=openssl \
+          --with-tcl --with-tclconfig=/usr/local/lib/tcl8.6/ \
+          --with-uuid=bsd \
+          \
+          --with-includes=/usr/local/include --with-libs=/usr/local/lib \
+          CC="ccache cc"'
+      build_script:
+        - su postgres -c 'gmake -s -j4 && gmake -s -j4 -C contrib'
+      upload_caches:
+        - ccache
+
+      tests_script:
+        - su postgres -c 'time gmake -s -j4 ${CHECK} ${CHECKFLAGS}'
+
+    - name: FreeBSD meson
+
+      configure_script:
+        - su postgres -c 'meson setup --buildtype debug -Dcassert=true -Dssl=openssl build'
+      build_script:
+        - su postgres -c 'ninja -C build'
+      upload_caches:
+        - ccache
+      run_tests_script:
+        - su postgres -c 'meson test --no-rebuild -C build'
 
-  tests_script:
-    - su postgres -c 'time gmake -s -j2 ${CHECK} ${CHECKFLAGS}'
+  always:
+    meson_log_artifacts:
+      path: "build/meson-logs/*.txt"
+      type: text/plain
 
   on_failure:
     cores_script: |
@@ -83,14 +101,16 @@ task:
     tap_artifacts:
       path: "**/regress_log_*"
       type: text/plain
+    meson_test_artifacts:
+      path: "build/meson-logs/testlog.junit.xml"
+      type: text/xml
+      format: junit
 
 
 task:
-  name: Linux
   only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*linux.*'
   compute_engine_instance:
     image_project: pg-vm-images-aio
-    image: family/pg-aio-bullseye
     platform: linux
     cpu: 4
     memory: 2G
@@ -120,37 +140,78 @@ task:
     - su postgres -c 'ulimit -l -S'
     - echo '/tmp/%e-%s-%p.core' > /proc/sys/kernel/core_pattern
 
-  configure_script: |
-    su postgres -c './configure \
-      --enable-cassert --enable-debug --enable-tap-tests \
-      --enable-nls \
-      \
-      --with-gssapi \
-      --with-icu \
-      --with-ldap \
-      --with-libxml \
-      --with-libxslt \
-      --with-llvm \
-      --with-lz4 \
-      --with-pam \
-      --with-perl \
-      --with-python \
-      --with-ssl=openssl \
-      --with-systemd \
-      --with-tcl --with-tclconfig=/usr/lib/tcl8.6/ \
-      --with-uuid=e2fs \
-      \
-      CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang" CFLAGS="-O0 -ggdb"'
-  build_script:
-    - su postgres -c 'make -s -j4 && make -s -j4 -C contrib'
-  upload_caches:
-    - ccache
+  matrix:
+    - name: Linux Autoconf
+
+      compute_engine_instance:
+        image: family/pg-aio-bullseye
+
+      configure_script: |
+        su postgres -c './configure \
+          --enable-cassert --enable-debug --enable-tap-tests \
+          --enable-nls \
+          \
+          --with-gssapi \
+          --with-icu \
+          --with-ldap \
+          --with-libxml \
+          --with-libxslt \
+          --with-llvm \
+          --with-lz4 \
+          --with-pam \
+          --with-perl \
+          --with-python \
+          --with-ssl=openssl \
+          --with-systemd \
+          --with-tcl --with-tclconfig=/usr/lib/tcl8.6/ \
+          --with-uuid=e2fs \
+          \
+          CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang" CFLAGS="-O0 -ggdb"'
+      build_script:
+        - su postgres -c 'make -s -j4 && make -s -j4 -C contrib'
+      upload_caches:
+        - ccache
+
+      tests_script: |
+        su postgres -c '\
+          ulimit -c unlimited; \
+          make -s ${CHECK} ${CHECKFLAGS} -j8 \
+          '
+
+    - name: Linux Meson
+
+      compute_engine_instance:
+        image: family/pg-aio-bullseye
+
+      configure_script:
+        - su postgres -c 'meson setup --buildtype debug -Dcassert=true -Dssl=openssl build'
+      build_script:
+        - su postgres -c 'ninja -C build'
+      upload_caches:
+        - ccache
+
+      tests_script:
+        - su postgres -c 'meson test --no-rebuild -C build'
+
+    - name: Linux Meson Sid
+
+      compute_engine_instance:
+        image: family/pg-aio-sid
+
+      configure_script:
+        - su postgres -c 'meson setup --buildtype debug -Dcassert=true -Dssl=openssl build'
+      build_script:
+        - su postgres -c 'ninja -C build'
+      upload_caches:
+        - ccache
+
+      tests_script:
+        - su postgres -c 'meson test --no-rebuild -C build'
 
-  tests_script: |
-    su postgres -c '\
-      ulimit -c unlimited; \
-      make -s ${CHECK} ${CHECKFLAGS} -j8 \
-      '
+  always:
+    meson_log_artifacts:
+      path: "build/meson-logs/*.txt"
+      type: text/plain
 
   on_failure:
     cores_script: |
@@ -168,10 +229,13 @@ task:
     tap_artifacts:
       path: "**/regress_log_*"
       type: text/plain
+    meson_test_artifacts:
+      path: "build/meson-logs/testlog.junit.xml"
+      type: text/xml
+      format: junit
 
 
 task:
-  name: macOS
   only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*(macos|darwin|osx).*'
   osx_instance:
     image: big-sur-base
@@ -201,55 +265,86 @@ task:
     - sudo chmod 777 /cores
   homebrew_install_script:
     - brew install make coreutils ccache icu4c lz4 tcl-tk openldap
+    - brew install meson ninja python@3.9
   upload_caches:
     - homebrew
 
-  configure_script: |
-    LIBS="/usr/local/lib:$LIBS"
-    INCLUDES="/usr/local/include:$INCLUDES"
-
-    INCLUDES="/usr/local/opt/openssl/include:$INCLUDES"
-    LIBS="/usr/local/opt/openssl/lib:$LIBS"
-
-    PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig:$PKG_CONFIG_PATH"
-    INCLUDES="/usr/local/opt/icu4c/include:$INCLUDES"
-    LIBS="/usr/local/opt/icu4c/lib:$LIBS"
-
-    LIBS="/usr/local/opt/openldap/lib:$LIBS"
-    INCLUDES="/usr/local/opt/openldap/include:$INCLUDES"
-
-    export PKG_CONFIG_PATH
-
-    ./configure \
-      --prefix=$HOME/install \
-      --with-includes="$INCLUDES" \
-      --with-libs="$LIBS" \
-      \
-      --enable-cassert --enable-debug --enable-tap-tests \
-      --enable-nls \
-      \
-      --with-icu \
-      --with-ldap \
-      --with-libxml \
-      --with-libxslt \
-      \
-      --with-lz4 \
-      --with-perl \
-      --with-python \
-      --with-ssl=openssl \
-      --with-tcl --with-tclconfig=/usr/local/opt/tcl-tk/lib/ \
-      --with-uuid=e2fs \
-      \
-      CC="ccache gcc" CFLAGS="-O0 -ggdb"
-  build_script:
-    - gmake -s -j12 && gmake -s -j12 -C contrib
-  upload_caches:
-    - ccache
+  matrix:
+    - name: macOS autoconf
+
+      configure_script: |
+        LIBS="/usr/local/lib:$LIBS"
+        INCLUDES="/usr/local/include:$INCLUDES"
+
+        PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig:$PKG_CONFIG_PATH"
+        INCLUDES="/usr/local/opt/openssl/include:$INCLUDES"
+        LIBS="/usr/local/opt/openssl/lib:$LIBS"
+
+        PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig:$PKG_CONFIG_PATH"
+        INCLUDES="/usr/local/opt/icu4c/include:$INCLUDES"
+        LIBS="/usr/local/opt/icu4c/lib:$LIBS"
+
+        PKG_CONFIG_PATH="/usr/local/opt/ldap/lib/pkgconfig:$PKG_CONFIG_PATH"
+        LIBS="/usr/local/opt/openldap/lib:$LIBS"
+        INCLUDES="/usr/local/opt/openldap/include:$INCLUDES"
+
+        export PKG_CONFIG_PATH
+
+        ./configure \
+          --prefix=$HOME/install \
+          --with-includes="$INCLUDES" \
+          --with-libs="$LIBS" \
+          \
+          --enable-cassert --enable-debug --enable-tap-tests \
+          --enable-nls \
+          \
+          --with-icu \
+          --with-ldap \
+          --with-libxml \
+          --with-libxslt \
+          \
+          --with-lz4 \
+          --with-perl \
+          --with-python \
+          --with-ssl=openssl \
+          --with-tcl --with-tclconfig=/usr/local/opt/tcl-tk/lib/ \
+          --with-uuid=e2fs \
+          \
+          CC="ccache gcc" CFLAGS="-O0 -ggdb"
+      build_script:
+        - gmake -s -j12 && gmake -s -j12 -C contrib
+      upload_caches:
+        - ccache
+
+      tests_script:
+        - ulimit -c unlimited
+        - ulimit -n 1024
+        - gmake -s -j12 ${CHECK} ${CHECKFLAGS}
+
+    - name: macOS meson
+
+      configure_script: |
+        PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig:$PKG_CONFIG_PATH"
+        PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig:$PKG_CONFIG_PATH"
+        PKG_CONFIG_PATH="/usr/local/opt/openldap/lib/pkgconfig:$PKG_CONFIG_PATH"
+
+        export PKG_CONFIG_PATH
+
+        meson setup --buildtype debug -Dcassert=true -Dssl=openssl build
+      build_script:
+        - ninja -C build
+      upload_caches:
+        - ccache
+
+      tests_script:
+        - ulimit -c unlimited
+        - ulimit -n 1024
+        - meson test --no-rebuild -C build
 
-  tests_script:
-    - ulimit -c unlimited
-    - ulimit -n 1024
-    - gmake -s -j12 ${CHECK} ${CHECKFLAGS}
+  always:
+    meson_log_artifacts:
+      path: "build/meson-logs/*.txt"
+      type: text/plain
 
   on_failure:
     cores_script: |
@@ -265,10 +360,13 @@ task:
     tap_artifacts:
       path: "**/regress_log_*"
       type: text/plain
+    meson_test_artifacts:
+      path: "build/meson-logs/testlog.junit.xml"
+      type: text/xml
+      format: junit
 
 
 task:
-  name: Windows
   only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*windows.*'
   windows_container:
     dockerfile: ci/docker/windows_vs_2019
@@ -281,6 +379,8 @@ task:
     TEMP_CONFIG: ${CIRRUS_WORKING_DIR}/ci/pg_ci_base.conf
     # Avoid re-installing over and over
     NO_TEMP_INSTALL: 1
+    # Try to hide git's tar
+    PATH: c:\windows\system32;${PATH}
 
   sysinfo_script:
     - chcp
@@ -289,55 +389,103 @@ task:
     - ps: Get-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug'
     - set
 
-  configure_script:
-    - copy ci\windows_build_config.pl src\tools\msvc\config.pl
-    - vcvarsall x64
-    - perl src/tools/msvc/mkvcbuild.pl
-  build_script:
-    - vcvarsall x64
-    # Disable file tracker, we're never going to rebuild...
-    - msbuild -m /p:TrackFileAccess=false pgsql.sln
-  tempinstall_script:
-    # Installation on windows currently only completely works from src\tools\msvc
-    - cd src\tools\msvc && perl .\install.pl %CIRRUS_WORKING_DIR%\tmp_install
-
-  check_test_script:
-    - perl src/tools/msvc/vcregress.pl check parallel
-  startcreate_test_script:
-    - tmp_install\bin\pg_ctl.exe initdb -D tmp_check\db -l tmp_check\initdb.log
-    - echo include '%TEMP_CONFIG%' >> tmp_check\db\postgresql.conf
-    - tmp_install\bin\pg_ctl.exe start -D tmp_check\db -l tmp_check\postmaster.log
-  plcheck_test_script:
-    - perl src/tools/msvc/vcregress.pl plcheck
-  isolationcheck_test_script:
-    - perl src/tools/msvc/vcregress.pl isolationcheck
-  modulescheck_test_script:
-    - perl src/tools/msvc/vcregress.pl modulescheck
-  contribcheck_test_script:
-    - perl src/tools/msvc/vcregress.pl contribcheck
-  stop_test_script:
-    - tmp_install\bin\pg_ctl.exe stop -D tmp_check\db -l tmp_check\postmaster.log
-  ssl_test_script:
-    - set with_ssl=openssl
-    - perl src/tools/msvc/vcregress.pl taptest .\src\test\ssl\
-  subscriptioncheck_test_script:
-    - perl src/tools/msvc/vcregress.pl taptest .\src\test\subscription\
-  authentication_test_script:
-    - perl src/tools/msvc/vcregress.pl taptest .\src\test\authentication\
-  recoverycheck_test_script:
-    - perl src/tools/msvc/vcregress.pl recoverycheck
-  bincheck_test_script:
-    - perl src/tools/msvc/vcregress.pl bincheck
-  upgradecheck_test_script:
-    - perl src/tools/msvc/vcregress.pl upgradecheck
-  ecpgcheck_test_script:
-    # tries to build additional stuff
-    - vcvarsall x64
-    # References ecpg_regression.proj in the current dir
-    - cd src\tools\msvc
-    - perl vcregress.pl ecpgcheck
+  matrix:
+    - name: Windows homegrowns
+
+      configure_script:
+        - copy ci\windows_build_config.pl src\tools\msvc\config.pl
+        - vcvarsall x64
+        - perl src/tools/msvc/mkvcbuild.pl
+      build_script:
+        - vcvarsall x64
+        # Disable file tracker, we're never going to rebuild...
+        - msbuild -m /p:TrackFileAccess=false pgsql.sln
+      tempinstall_script:
+        # Installation on windows currently only completely works from src\tools\msvc
+        - cd src\tools\msvc && perl .\install.pl %CIRRUS_WORKING_DIR%\tmp_install
+
+      check_test_script:
+        - perl src/tools/msvc/vcregress.pl check parallel
+      startcreate_test_script:
+        - tmp_install\bin\pg_ctl.exe initdb -D tmp_check\db -l tmp_check\initdb.log
+        - echo include '%TEMP_CONFIG%' >> tmp_check\db\postgresql.conf
+        - tmp_install\bin\pg_ctl.exe start -D tmp_check\db -l tmp_check\postmaster.log
+      plcheck_test_script:
+        - perl src/tools/msvc/vcregress.pl plcheck
+      isolationcheck_test_script:
+        - perl src/tools/msvc/vcregress.pl isolationcheck
+      modulescheck_test_script:
+        - perl src/tools/msvc/vcregress.pl modulescheck
+      contribcheck_test_script:
+        - perl src/tools/msvc/vcregress.pl contribcheck
+      stop_test_script:
+        - tmp_install\bin\pg_ctl.exe stop -D tmp_check\db -l tmp_check\postmaster.log
+      ssl_test_script:
+        - set with_ssl=openssl
+        - perl src/tools/msvc/vcregress.pl taptest .\src\test\ssl\
+      subscriptioncheck_test_script:
+        - perl src/tools/msvc/vcregress.pl taptest .\src\test\subscription\
+      authentication_test_script:
+        - perl src/tools/msvc/vcregress.pl taptest .\src\test\authentication\
+      recoverycheck_test_script:
+        - perl src/tools/msvc/vcregress.pl recoverycheck
+      bincheck_test_script:
+        - perl src/tools/msvc/vcregress.pl bincheck
+      upgradecheck_test_script:
+        - perl src/tools/msvc/vcregress.pl upgradecheck
+      ecpgcheck_test_script:
+        # tries to build additional stuff
+        - vcvarsall x64
+        # References ecpg_regression.proj in the current dir
+        - cd src\tools\msvc
+        - perl vcregress.pl ecpgcheck
+
+    - name: Windows Meson+vs+Ninja
+
+      meson_script:
+        - pip install meson
+        - pip install ninja
+      configure_script:
+        - vcvarsall x64
+        - mkdir subprojects
+        - meson wrap install lz4
+        - meson wrap install zlib
+        - meson setup --buildtype debug --backend ninja  -Dcassert=true -Db_pch=true -Dssl=openssl -Dlz4=enabled -Dzlib=enabled -Dextra_lib_dirs=c:\openssl\1.1.1l\lib -Dextra_include_dirs=c:\openssl\1.1.1l\include build
+      build_script:
+        - vcvarsall x64
+        - ninja -C build
+
+      check_script:
+        - vcvarsall x64
+        - meson test --no-rebuild -C build
+
+    - name: Windows Meson+vs+msbuild
+
+      # Need a development version of meson for now
+      meson_dev_script:
+        - git clone https://github.com/mesonbuild/meson.git
+
+      configure_script:
+        - vcvarsall x64
+        - mkdir subprojects
+        - .\meson\meson.py wrap install lz4
+        - .\meson\meson.py wrap install zlib
+        - .\meson\meson.py setup --buildtype debug --backend vs -Dcassert=true -Db_pch=true -Dssl=openssl -Dlz4=enabled -Dzlib=enabled -Dextra_lib_dirs=c:\openssl\1.1.1l\lib -Dextra_include_dirs=c:\openssl\1.1.1l\include build
+
+      build_script:
+        - vcvarsall x64
+        - msbuild -m /p:UseMultiToolTask=true build\postgresql.sln
+
+      check_script:
+        - vcvarsall x64
+        - .\meson\meson.py test --no-rebuild -C build
 
   always:
+    meson_log_artifacts:
+      path: "build/meson-logs/*.txt"
+      type: text/plain
+    cat_dumps_script:
+
     cores_script:
       - cat crashlog.txt || true
     dump_artifacts:
@@ -354,12 +502,16 @@ task:
     tap_artifacts:
       path: "**/regress_log_*"
       type: text/plain
+    meson_test_artifacts:
+      path: "build/meson-logs/testlog.junit.xml"
+      type: text/xml
+      format: junit
 
 
 task:
   name: CompilerWarnings
   depends_on:
-    - Linux
+    - Linux Autoconf
   # task that did not run count as a success, so we need to recheck Linux' condition here :/
   only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*linux.*'
   container:
-- 
2.23.0.385.gbc12974a89

