ci: Explicitly enable Meson features

Meson's "auto" feature mode silently disables features with missing
prerequisites, which is nice for development but can lead to false
positives in the CI (such as my commit b0635bfda, which broke OAuth
detection on OpenBSD). Use an explicit feature list in the Cirrus config
instead; this mirrors the --with-XXX experience of Autoconf.

While we're here, also move common configuration options into a single
variable, MESON_COMMON_PG_CONFIG_ARGS, as suggested by Peter. The
resulting hierarchy is as follows:

MESON_COMMON_PG_CONFIG_ARGS   "global" Meson configuration options

MESON_COMMON_FEATURES         the default set of CI features, to be used
                              unless there's a specific reason not to

MESON_FEATURES                per-OS feature configuration, overriding
                              the above

The current exceptions to the use of MESON_COMMON_FEATURES are
- SanityCheck, which uses almost no dependencies;
- Windows - VS, whose feature list has diverged significantly from the
  others; and
- Linux, which continues to use 'auto' features so that autodetection is
  still tested in the CI. (Options shared between 64- and 32-bit builds
  can go into LINUX_MESON_FEATURES instead.)

Author: Nazir Bilal Yavuz <byavuz81@gmail.com>
Suggested-by: Jacob Champion <jacob.champion@enterprisedb.com>
Suggested-by: Peter Eisentraut <peter@eisentraut.org>
Reviewed-by: Andres Freund <andres@anarazel.de>
Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
Reviewed-by: Jacob Champion <jacob.champion@enterprisedb.com>
Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Discussion: https://postgr.es/m/flat/CAN55FZ0aO8d_jkyRijcGP8qO%3DXH09qG%3Dpw0ZZDvB4LMzuXYU1w%40mail.gmail.com
master
Jacob Champion 1 week ago
parent 01c5938003
commit 7b0fb9f5c6
  1. 106
      .cirrus.tasks.yml

@ -31,6 +31,31 @@ env:
TEMP_CONFIG: ${CIRRUS_WORKING_DIR}/src/tools/ci/pg_ci_base.conf
PG_TEST_EXTRA: kerberos ldap ssl libpq_encryption load_balance oauth
# Postgres config args for the meson builds, shared between all meson tasks
# except the 'SanityCheck' task
MESON_COMMON_PG_CONFIG_ARGS: -Dcassert=true -Dinjection_points=true
# Meson feature flags shared by all meson tasks, except:
# SanityCheck: uses almost no dependencies.
# Windows - VS: has fewer dependencies than listed here, so defines its own.
# Linux: uses the 'auto' feature option to test meson feature autodetection.
MESON_COMMON_FEATURES: >-
-Dauto_features=disabled
-Dldap=enabled
-Dssl=openssl
-Dtap_tests=enabled
-Dplperl=enabled
-Dplpython=enabled
-Ddocs=enabled
-Dicu=enabled
-Dlibxml=enabled
-Dlibxslt=enabled
-Dlz4=enabled
-Dpltcl=enabled
-Dreadline=enabled
-Dzlib=enabled
-Dzstd=enabled
# What files to preserve in case tests fail
on_failure_ac: &on_failure_ac
@ -164,6 +189,15 @@ task:
-c debug_parallel_query=regress
PG_TEST_PG_UPGRADE_MODE: --link
MESON_FEATURES: >-
-Ddtrace=enabled
-Dgssapi=enabled
-Dlibcurl=enabled
-Dnls=enabled
-Dpam=enabled
-Dtcl_version=tcl86
-Duuid=bsd
<<: *freebsd_task_template
depends_on: SanityCheck
@ -196,10 +230,10 @@ task:
configure_script: |
su postgres <<-EOF
meson setup \
${MESON_COMMON_PG_CONFIG_ARGS} \
--buildtype=debug \
-Dcassert=true -Dinjection_points=true \
-Duuid=bsd -Dtcl_version=tcl86 -Ddtrace=auto \
-Dextra_lib_dirs=/usr/local/lib -Dextra_include_dirs=/usr/local/include/ \
${MESON_COMMON_FEATURES} ${MESON_FEATURES} \
build
EOF
build_script: su postgres -c 'ninja -C build -j${BUILD_JOBS} ${MBUILD_TARGET}'
@ -270,6 +304,12 @@ task:
LC_ALL: "C"
# -Duuid is not set for the NetBSD, see the comment below, above
# configure_script, for more information.
MESON_FEATURES: >-
-Dgssapi=enabled
-Dlibcurl=enabled
-Dnls=enabled
-Dpam=enabled
setup_additional_packages_script: |
#pkgin -y install ...
<<: *netbsd_task_template
@ -282,8 +322,13 @@ task:
OS_NAME: openbsd
IMAGE_FAMILY: pg-ci-openbsd-postgres
PKGCONFIG_PATH: '/usr/lib/pkgconfig:/usr/local/lib/pkgconfig'
UUID: -Duuid=e2fs
TCL: -Dtcl_version=tcl86
MESON_FEATURES: >-
-Dbsd_auth=enabled
-Dlibcurl=enabled
-Dtcl_version=tcl86
-Duuid=e2fs
setup_additional_packages_script: |
#pkg_add -I ...
# Always core dump to ${CORE_DUMP_DIR}
@ -317,10 +362,10 @@ task:
configure_script: |
su postgres <<-EOF
meson setup \
${MESON_COMMON_PG_CONFIG_ARGS} \
--buildtype=debugoptimized \
--pkg-config-path ${PKGCONFIG_PATH} \
-Dcassert=true -Dinjection_points=true \
-Dssl=openssl ${UUID} ${TCL} \
${MESON_COMMON_FEATURES} ${MESON_FEATURES} \
build
EOF
@ -367,10 +412,6 @@ LINUX_CONFIGURE_FEATURES: &LINUX_CONFIGURE_FEATURES >-
--with-uuid=ossp
--with-zstd
LINUX_MESON_FEATURES: &LINUX_MESON_FEATURES >-
-Dllvm=enabled
-Duuid=e2fs
# Check SPECIAL in the matrix: below
task:
@ -411,7 +452,8 @@ task:
LLVM_CONFIG: llvm-config-16
LINUX_CONFIGURE_FEATURES: *LINUX_CONFIGURE_FEATURES
LINUX_MESON_FEATURES: *LINUX_MESON_FEATURES
LINUX_MESON_FEATURES: >-
-Duuid=e2fs
<<: *linux_task_template
@ -497,6 +539,7 @@ task:
# are typically printed in the server log
# - Test both 64bit and 32 bit builds
# - uses io_method=io_uring
# - Uses meson feature autodetection
- name: Linux - Debian Bookworm - Meson
env:
@ -508,9 +551,9 @@ task:
configure_script: |
su postgres <<-EOF
meson setup \
${MESON_COMMON_PG_CONFIG_ARGS} \
--buildtype=debug \
-Dcassert=true -Dinjection_points=true \
${LINUX_MESON_FEATURES} \
${LINUX_MESON_FEATURES} -Dllvm=enabled \
build
EOF
@ -520,13 +563,11 @@ task:
su postgres <<-EOF
export CC='ccache gcc -m32'
meson setup \
${MESON_COMMON_PG_CONFIG_ARGS} \
--buildtype=debug \
-Dcassert=true -Dinjection_points=true \
${LINUX_MESON_FEATURES} \
-Dllvm=disabled \
--pkg-config-path /usr/lib/i386-linux-gnu/pkgconfig/ \
-DPERL=perl5.36-i386-linux-gnu \
-Dlibnuma=disabled \
${LINUX_MESON_FEATURES} -Dlibnuma=disabled \
build-32
EOF
@ -590,6 +631,14 @@ task:
CCACHE_DIR: ${HOME}/ccache
MACPORTS_CACHE: ${HOME}/macports-cache
MESON_FEATURES: >-
-Dbonjour=enabled
-Ddtrace=enabled
-Dgssapi=enabled
-Dlibcurl=enabled
-Dnls=enabled
-Duuid=e2fs
MACOS_PACKAGE_LIST: >-
ccache
icu
@ -659,11 +708,11 @@ task:
configure_script: |
export PKG_CONFIG_PATH="/opt/local/lib/pkgconfig/"
meson setup \
${MESON_COMMON_PG_CONFIG_ARGS} \
--buildtype=debug \
-Dextra_include_dirs=/opt/local/include \
-Dextra_lib_dirs=/opt/local/lib \
-Dcassert=true -Dinjection_points=true \
-Duuid=e2fs -Ddtrace=auto \
${MESON_COMMON_FEATURES} ${MESON_FEATURES} \
build
build_script: ninja -C build -j${BUILD_JOBS} ${MBUILD_TARGET}
@ -718,6 +767,14 @@ task:
# 0x8001 is SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX
CIRRUS_WINDOWS_ERROR_MODE: 0x8001
MESON_FEATURES:
-Dauto_features=disabled
-Dldap=enabled
-Dssl=openssl
-Dtap_tests=enabled
-Dplperl=enabled
-Dplpython=enabled
<<: *windows_task_template
depends_on: SanityCheck
@ -734,7 +791,7 @@ task:
configure_script: |
vcvarsall x64
meson setup --backend ninja --buildtype debug -Dcassert=true -Dinjection_points=true -Db_pch=true -Dextra_lib_dirs=c:\openssl\1.1\lib -Dextra_include_dirs=c:\openssl\1.1\include -DTAR=%TAR% build
meson setup --backend ninja %MESON_COMMON_PG_CONFIG_ARGS% --buildtype debug -Db_pch=true -Dextra_lib_dirs=c:\openssl\1.1\lib -Dextra_include_dirs=c:\openssl\1.1\include -DTAR=%TAR% %MESON_FEATURES% build
build_script: |
vcvarsall x64
@ -776,6 +833,11 @@ task:
CHERE_INVOKING: 1
BASH: C:\msys64\usr\bin\bash.exe -l
# Keep -Dnls explicitly disabled, as the number of files it creates causes a
# noticeable slowdown.
MESON_FEATURES: >-
-Dnls=disabled
<<: *windows_task_template
ccache_cache:
@ -790,9 +852,8 @@ task:
%BASH% -c "where perl"
%BASH% -c "perl --version"
# disable -Dnls as the number of files it creates cause a noticable slowdown
configure_script: |
%BASH% -c "meson setup -Ddebug=true -Doptimization=g -Dcassert=true -Dinjection_points=true -Db_pch=true -Dnls=disabled -DTAR=%TAR% build"
%BASH% -c "meson setup %MESON_COMMON_PG_CONFIG_ARGS% -Ddebug=true -Doptimization=g -Db_pch=true %MESON_COMMON_FEATURES% %MESON_FEATURES% -DTAR=%TAR% build"
build_script: |
%BASH% -c "ninja -C build ${MBUILD_TARGET}"
@ -829,7 +890,6 @@ task:
CCACHE_DIR: "/tmp/ccache_dir"
LINUX_CONFIGURE_FEATURES: *LINUX_CONFIGURE_FEATURES
LINUX_MESON_FEATURES: *LINUX_MESON_FEATURES
# GCC emits a warning for llvm-14, so switch to a newer one.
LLVM_CONFIG: llvm-config-16

Loading…
Cancel
Save