ci: switch linux-musl to use Meson

Switch over the "linux-musl" job to use Meson instead of Makefiles. This is done due to multiple reasons: - It simplifies our CI infrastructure a bit as we don't have to manually specify a couple of build options anymore. - It verifies that Meson detects and sets those build options automatically. - It makes it easier for us to wire up a new CI job using zlib-ng as backend. One platform compatibility that Meson cannot easily detect automatically is the `GIT_TEST_UTF8_LOCALE` variable used in tests. Wire up a build option for it, which we set via a new "MESONFLAGS" environment variable. Note that we also drop the CC variable, which is set to "gcc". We already default to GCC when CC is unset in "ci/lib.sh", so this is not needed. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Jan 28, 2025 at 09:41 UTC 84bb5eeace7f797c3898ad6ee6c4909200be0c77
7 files changed +9 -9
.github/workflows/main.yml
+1 -1
@@ -394,7 +394,7 @@ jobs:
394 fail-fast: false
395 matrix:
396 vector:
397 - - jobname: linux-musl
397 + - jobname: linux-musl-meson
398 image: alpine
399 distro: alpine-latest
400 # Supported until 2025-04-02.
.gitlab-ci.yml
+1 -1
@@ -67,7 +67,7 @@ test:linux:
67 CC: clang
68 - jobname: pedantic
69 image: fedora:latest
70 - - jobname: linux-musl
70 + - jobname: linux-musl-meson
71 image: alpine:latest
72 - jobname: linux-meson
73 image: ubuntu:latest
ci/install-dependencies.sh
+1 -1
@@ -24,7 +24,7 @@ fi
24
25 case "$distro" in
26 alpine-*)
27 - apk add --update shadow sudo build-base curl-dev openssl-dev expat-dev gettext \
27 + apk add --update shadow sudo meson ninja-build gcc libc-dev curl-dev openssl-dev expat-dev gettext \
28 pcre2-dev python3 musl-libintl perl-utils ncurses \
29 apache2 apache2-http2 apache2-proxy apache2-ssl apache2-webdav apr-util-dbd_sqlite3 \
30 bash cvs gnupg perl-cgi perl-dbd-sqlite perl-io-tty >/dev/null
ci/lib.sh
+1 -4
@@ -378,10 +378,7 @@ linux32)
378 CC=gcc
379 ;;
380 linux-musl)
381 - CC=gcc
382 - MAKEFLAGS="$MAKEFLAGS PYTHON_PATH=/usr/bin/python3 USE_LIBPCRE2=Yes"
383 - MAKEFLAGS="$MAKEFLAGS NO_REGEX=Yes ICONV_OMITS_BOM=Yes"
384 - MAKEFLAGS="$MAKEFLAGS GIT_TEST_UTF8_LOCALE=C.UTF-8"
381 + MESONFLAGS="$MESONFLAGS -DGIT_TEST_UTF8_LOCALE=C.UTF-8"
382 ;;
383 linux-leaks|linux-reftable-leaks)
384 export SANITIZE=leak
ci/run-build-and-tests.sh
+2 -1
@@ -55,7 +55,8 @@ case "$jobname" in
55 --fatal-meson-warnings \
56 --warnlevel 2 --werror \
57 --wrap-mode nofallback \
58 - -Dfuzzers=true
58 + -Dfuzzers=true \
59 + $MESONFLAGS
60 group "Build" meson compile -C build --
61 if test -n "$run_tests"
62 then
meson.build
+1 -1
@@ -664,7 +664,7 @@ build_options_config.set('GIT_TEST_CMP_USE_COPIED_CONTEXT', '')
664 build_options_config.set('GIT_TEST_INDEX_VERSION', '')
665 build_options_config.set('GIT_TEST_OPTS', '')
666 build_options_config.set('GIT_TEST_PERL_FATAL_WARNINGS', '')
667 -build_options_config.set('GIT_TEST_UTF8_LOCALE', '')
667 +build_options_config.set_quoted('GIT_TEST_UTF8_LOCALE', get_option('test_utf8_locale'))
668 build_options_config.set_quoted('LOCALEDIR', fs.as_posix(get_option('prefix') / get_option('localedir')))
669 build_options_config.set('GITWEBDIR', fs.as_posix(get_option('prefix') / get_option('datadir') / 'gitweb'))
670
meson_options.txt
+2
@@ -99,5 +99,7 @@ option('tests', type: 'boolean', value: true,
99 description: 'Enable building tests. This requires Perl, but is separate from the "perl" option such that you can build tests without Perl features enabled.')
100 option('test_output_directory', type: 'string',
101 description: 'Path to the directory used to store test outputs')
102 +option('test_utf8_locale', type: 'string',
103 + description: 'Name of a UTF-8 locale used for testing.')
104 option('fuzzers', type: 'boolean', value: false,
105 description: 'Enable building fuzzers.')