# [PATCH 0/7] A couple of Meson improvements

20 messages from 2026-09-24 to 2026-10-05. Participants: Patrick Steinhardt, Karthik Nayak, Kaartic Sivaraam.
Thread: https://gitlist.dev/t/66386

## Patrick Steinhardt, 2026-09-24 14:09

Subject: [PATCH 0/7] A couple of Meson improvements
Message-ID: <20260924-pks-meson-improvements-v1-0-90b7f79f1c4e@pks.im>

```
Hi,

this patch series contains a couple of improvements for Meson:

  - Clean build times are sped up, going from ~6.8 seconds to ~5.0
    seconds for a full build.

  - A test issue is fixed that causes shell completion tests to fail
    because the scripts are not properly updated.

  - Our subproject wrappers are updated to current versions.

  - A fix for GitLab's msvc-meson jobs that are broken right now due to
    a change in our runner images. See [1] for the now-working
    msvc-meson jobs. Note though that the MinGW-based jobs are still
    broken, but Dscho has been sending fixes for that already.

Thanks!

Patrick

---
Patrick Steinhardt (7):
      meson: avoid recompiling HTTP sources several times
      meson: don't recompile git-remote-http(1) multiple times for tests
      meson: use precompiled headers for our test-helper
      meson: use precompiled headers for unit tests
      meson: fix outdated completion helpers
      meson: update wrappers
      gitlab-ci: fix hanging MSVC jobs

 ci/install-dependencies.ps1    |  8 ++++++++
 contrib/completion/meson.build | 38 +++++++++++++++-----------------------
 meson.build                    | 16 ++++++++++------
 subprojects/curl.wrap          | 19 ++++++++++---------
 subprojects/expat.wrap         | 21 +++++++++++----------
 subprojects/openssl.wrap       | 23 +++++++++++------------
 subprojects/pcre2.wrap         | 24 +++++++++++-------------
 subprojects/zlib.wrap          | 21 +++++++++++----------
 t/helper/meson.build           |  1 +
 t/meson.build                  | 10 ++++++++--
 10 files changed, 96 insertions(+), 85 deletions(-)


---
base-commit: 0f8e75abebff0877cae681a3d5ff31ac47f54220
change-id: 20260924-pks-meson-improvements-b7ed9a48ed4e


```

## Patrick Steinhardt, 2026-09-24 14:09

Subject: [PATCH 1/7] meson: avoid recompiling HTTP sources several times
Message-ID: <20260924-pks-meson-improvements-v1-1-90b7f79f1c4e@pks.im>
In-Reply-To: <20260924-pks-meson-improvements-v1-0-90b7f79f1c4e@pks.im>

```
We only link curl into a subset of our subcommands. Consequently, as
both "http.c" and "http-walker.c" depend on curl, we don't compile these
into "libgit.a" but instead only link those into the commands that
depend on curl.

In Meson, we wire these dependencies into the target executables by
using the `sources:` keyword. But this has the consequence that we're
recompiling those multiple several times, once for every different
command they are linked into. In fact, each of these sources is compiled
seven times, which of course has an impact on compilation speed.

Fix this issue by instead linking these into a static library so that
they only need to be compiled once. This gives us an almost 10% speedup
in a clean build:

  Benchmark 1: meson compile (version = HEAD~)
    Time (mean ± σ):      6.781 s ±  0.052 s    [User: 100.775 s, System: 22.954 s]
    Range (min … max):    6.709 s …  6.867 s    10 runs

  Benchmark 2: meson compile (version = HEAD)
    Time (mean ± σ):      6.274 s ±  0.021 s    [User: 91.882 s, System: 22.092 s]
    Range (min … max):    6.242 s …  6.306 s    10 runs

  Summary
    meson compile (version = HEAD) ran
      1.08 ± 0.01 times faster than meson compile (version = HEAD~)

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 meson.build | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/meson.build b/meson.build
index 0a95d90d21..4fdb4c5405 100644
--- a/meson.build
+++ b/meson.build
@@ -1925,10 +1925,13 @@ bin_wrappers += executable('scalar',
 
 if curl.found()
   libgit_curl = declare_dependency(
-    sources: [
-      'http.c',
-      'http-walker.c',
-    ],
+    link_with: static_library('git-curl',
+      sources: [
+        'http.c',
+        'http-walker.c',
+      ],
+      dependencies: [libgit_commonmain, curl],
+    ),
     dependencies: [libgit_commonmain, curl],
   )
 

-- 
2.56.0.rc2.329.gd58861e689.dirty


```

## Patrick Steinhardt, 2026-09-24 14:09

Subject: [PATCH 2/7] meson: don't recompile git-remote-http(1) multiple times for tests
Message-ID: <20260924-pks-meson-improvements-v1-2-90b7f79f1c4e@pks.im>
In-Reply-To: <20260924-pks-meson-improvements-v1-0-90b7f79f1c4e@pks.im>

```
When running our tests, we expect git-remote-http(1) and a couple of
other binaries to be available to the test suite. In our Makefile, we
achieve this by simply hardlinking the file into place in our source
directory. We cannot easily do that in Meson though because there is no
available command to create such a hardlink.

We could of course create a custom target that uses a script for that,
but that feels quite awkward. Instead, we build the executable several
times, which is of course less efficient. Even worse though, similar as
in the preceding commit, we're building "remote-curl.c" once for each of
these targets, which makes this even more expensive.

Fix this by reusing the already-compiled objects from git-remote-http(1)
so that we only have to perform the linking step several times. This
leads to a mild speedup:

  Benchmark 1: meson compile (version = HEAD~)
    Time (mean ± σ):      6.250 s ±  0.040 s    [User: 90.881 s, System: 21.912 s]
    Range (min … max):    6.197 s …  6.344 s    10 runs

  Benchmark 2: meson compile (version = HEAD)
    Time (mean ± σ):      6.218 s ±  0.029 s    [User: 90.633 s, System: 22.022 s]
    Range (min … max):    6.166 s …  6.262 s    10 runs

  Summary
    meson compile (version = HEAD) ran
      1.01 ± 0.01 times faster than meson compile (version = HEAD~)

Honestly, a 1% speedup isn't really worth it. But the change makes sense
anyway, as we're doing the same when we build git-receive-pack(1) et al.
So while the speed improvement is negligible, it brings more consistency
into our build instructions.

For the record: I also had a look at using a custom target that
hardlinks the files into place. But the improvement it had on our build
times were not that mindblowing either, saving roundabout ~100ms in wall
time. So sticking with the status quo felt like the better solution as
it is native to Meson.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 meson.build | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/meson.build b/meson.build
index 4fdb4c5405..fa104a3efd 100644
--- a/meson.build
+++ b/meson.build
@@ -1935,12 +1935,13 @@ if curl.found()
     dependencies: [libgit_commonmain, curl],
   )
 
-  test_dependencies += executable('git-remote-http',
+  git_remote_http = executable('git-remote-http',
     sources: 'remote-curl.c',
     dependencies: [libgit_curl],
     install: true,
     install_dir: git_exec_path,
   )
+  test_dependencies += git_remote_http
 
   test_dependencies += executable('git-http-fetch',
     sources: 'http-fetch.c',
@@ -1960,7 +1961,7 @@ if curl.found()
 
   foreach alias : [ 'git-remote-https', 'git-remote-ftp', 'git-remote-ftps' ]
     test_dependencies += executable(alias,
-      sources: 'remote-curl.c',
+      objects: git_remote_http.extract_all_objects(recursive: false),
       dependencies: [libgit_curl],
     )
 

-- 
2.56.0.rc2.329.gd58861e689.dirty


```

## Patrick Steinhardt, 2026-09-24 14:09

Subject: [PATCH 3/7] meson: use precompiled headers for our test-helper
Message-ID: <20260924-pks-meson-improvements-v1-3-90b7f79f1c4e@pks.im>
In-Reply-To: <20260924-pks-meson-improvements-v1-0-90b7f79f1c4e@pks.im>

```
In 671df48df8 (meson: precompile "git-compat-util.h", 2026-03-19) we
have introduced support for precompiled headers into Meson. At that time
though we only converted "libgit.a" to make use of those.

Nowadays though, our test-helper also consists of a bunch of code files,
and all of these include "git-compat-util.h" via "test-tool.h" as the
first header. So they're a natural target to also use precompiled
headers.

Adapt the test-tool executable to make use of them, which results in a
surprisingly large speedup for clean builds:

  Benchmark 1: meson compile (version = HEAD~)
    Time (mean ± σ):      6.363 s ±  0.033 s    [User: 92.858 s, System: 22.500 s]
    Range (min … max):    6.311 s …  6.418 s    10 runs

  Benchmark 2: meson compile (version = HEAD)
    Time (mean ± σ):      5.327 s ±  0.021 s    [User: 75.135 s, System: 20.373 s]
    Range (min … max):    5.299 s …  5.362 s    10 runs

  Summary
    meson compile (version = HEAD) ran
      1.19 ± 0.01 times faster than meson compile (version = HEAD~)

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 t/helper/meson.build | 1 +
 1 file changed, 1 insertion(+)

diff --git a/t/helper/meson.build b/t/helper/meson.build
index 3235f10ab8..ae513b4cdc 100644
--- a/t/helper/meson.build
+++ b/t/helper/meson.build
@@ -83,6 +83,7 @@ test_tool_sources = [
 
 test_tool = executable('test-tool',
   sources: test_tool_sources,
+  c_pch: '../../tools/precompiled.h',
   dependencies: [libgit_commonmain],
 )
 bin_wrappers += test_tool

-- 
2.56.0.rc2.329.gd58861e689.dirty


```

## Patrick Steinhardt, 2026-09-24 14:09

Subject: [PATCH 4/7] meson: use precompiled headers for unit tests
Message-ID: <20260924-pks-meson-improvements-v1-4-90b7f79f1c4e@pks.im>
In-Reply-To: <20260924-pks-meson-improvements-v1-0-90b7f79f1c4e@pks.im>

```
Same as in the preceding commit, our unit tests don't use precompiled
headers yet. In this case though it's a tiny bit more complicated to
make use of them, as we do not want to include "git-compat-util.h" for
"clar.c", as that code file is a third-party implementation that is
independent of the Git codebase.

But there's an easy workaround: instead of linking that file into the
executable directly, we can easily adapt it to be built into a static
library first. Like that we can trivially have separate build flags for
that one file.

Do so and adapt the remaining sources to use precompiled headers. This
results in a small but noticeable build speedup:

  Benchmark 1: meson compile (version = HEAD~)
    Time (mean ± σ):      5.343 s ±  0.019 s    [User: 75.478 s, System: 20.382 s]
    Range (min … max):    5.308 s …  5.376 s    10 runs

  Benchmark 2: meson compile (version = HEAD)
    Time (mean ± σ):      5.077 s ±  0.017 s    [User: 70.557 s, System: 19.999 s]
    Range (min … max):    5.047 s …  5.103 s    10 runs

  Summary
    meson compile (version = HEAD) ran
      1.05 ± 0.01 times faster than meson compile (version = HEAD~)

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 t/meson.build | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/t/meson.build b/t/meson.build
index 3ca7b27104..9f1ee9ad59 100644
--- a/t/meson.build
+++ b/t/meson.build
@@ -30,7 +30,6 @@ clar_test_suites = [
 ]
 
 clar_sources = [
-  'unit-tests/clar/clar.c',
   'unit-tests/unit-test.c',
   'unit-tests/lib-oid.c',
   'unit-tests/lib-reftable.c'
@@ -49,7 +48,7 @@ clar_decls_h = custom_target(
 )
 clar_sources += clar_decls_h
 
-clar_sources += custom_target(
+clar_suite_h = custom_target(
   input: clar_decls_h,
   output: 'clar.suite',
   command : [
@@ -66,6 +65,13 @@ clar_unit_tests = executable('unit-tests',
   c_args: [
     '-DGIT_CLAR_DECLS_H="' + clar_decls_h.full_path() + '"',
   ],
+  c_pch: '../tools/precompiled.h',
+  link_with: static_library('clar',
+    sources: [
+      'unit-tests/clar/clar.c',
+      clar_suite_h,
+    ],
+  ),
   dependencies: [libgit_commonmain],
 )
 test('unit-tests', clar_unit_tests, kwargs: test_kwargs)

-- 
2.56.0.rc2.329.gd58861e689.dirty


```

## Patrick Steinhardt, 2026-09-24 14:09

Subject: [PATCH 5/7] meson: fix outdated completion helpers
Message-ID: <20260924-pks-meson-improvements-v1-5-90b7f79f1c4e@pks.im>
In-Reply-To: <20260924-pks-meson-improvements-v1-0-90b7f79f1c4e@pks.im>

```
When using Meson 1.3.0 or newer, we use `fs.copyfile()` to put our
completion helpers into the expected location so that our test suite can
find these scripts. Naturally, we thus also add these scripts to our
test dependencies so that we know to build them before executing tests.
But there's an issue here: we include the "contrib/completion" subdir
after we have already wired up our tests, so any dependencies we add
here are not being honored correctly. This has the consequence that we
don't know to copy around these completion helpers when we execute
tests, and one has to manually `meson compile` beforehand.

The interesting part here is that the code path we use with older
versions of Meson don't suffer from the same problem as they use
`configure_file()`, and that function will always run whenever the
source file changes. It's conceptually correct to use `fs.copyfile()`
instead, but given that it's mostly creating problems for us it does not
really seem sensible to continue using it.

Adapt the build instructions to unconditionally use `configure_file()`
to fix this issue.

A better fix would arguably be to promote our shell completion helpers
out of "contrib/" -- they are an important part of Git nowadays, and
these helpers get installed on lots of platforms. If so, we could also
fix the order of subdir includes so that test dependencies are properly
honored. But that feels like a bigger change, so that's left for a
future patch series.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 contrib/completion/meson.build | 38 +++++++++++++++-----------------------
 1 file changed, 15 insertions(+), 23 deletions(-)

diff --git a/contrib/completion/meson.build b/contrib/completion/meson.build
index 576125b083..4483c5be3e 100644
--- a/contrib/completion/meson.build
+++ b/contrib/completion/meson.build
@@ -4,31 +4,23 @@ foreach script : [
   'git-completion.zsh',
   'git-prompt.sh'
 ]
-  if meson.version().version_compare('>=1.3.0')
-    test_dependencies += fs.copyfile(script)
-  else
-    configure_file(
-      input: script,
-      output: script,
-      copy: true,
-    )
-  endif
+  # Note that we intentionally don't use `fs.copyfile()` here because we'd have
+  # to add it to our test dependencies in that case, but that creates a
+  # chicken-and-egg situation between including "t/" or "contrib/" first.
+  configure_file(
+    input: script,
+    output: script,
+    copy: true,
+  )
 endforeach
 
 # We have to discern between the test dependency and the installed file. Our
 # tests assume the completion scripts to have the same name as the in-tree
 # files, but the installed filenames need to match the executable's basename.
-if meson.version().version_compare('>=1.3.0')
-  fs.copyfile('git-completion.bash', 'git',
-    install: true,
-    install_dir: get_option('datadir') / 'bash-completion/completions',
-  )
-else
-  configure_file(
-    input: 'git-completion.bash',
-    output: 'git',
-    copy: true,
-    install: true,
-    install_dir: get_option('datadir') / 'bash-completion/completions',
-  )
-endif
+configure_file(
+  input: 'git-completion.bash',
+  output: 'git',
+  copy: true,
+  install: true,
+  install_dir: get_option('datadir') / 'bash-completion/completions',
+)

-- 
2.56.0.rc2.329.gd58861e689.dirty


```

## Patrick Steinhardt, 2026-09-24 14:09

Subject: [PATCH 6/7] meson: update wrappers
Message-ID: <20260924-pks-meson-improvements-v1-6-90b7f79f1c4e@pks.im>
In-Reply-To: <20260924-pks-meson-improvements-v1-0-90b7f79f1c4e@pks.im>

```
Our subproject wrappers are used on platforms that do not have the
respective dependencies available. Most importantly, this can be used on
Windows to have an almost-dependency-free build of Git.

Update these wrappers via `meson wrap update`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 subprojects/curl.wrap    | 19 ++++++++++---------
 subprojects/expat.wrap   | 21 +++++++++++----------
 subprojects/openssl.wrap | 23 +++++++++++------------
 subprojects/pcre2.wrap   | 24 +++++++++++-------------
 subprojects/zlib.wrap    | 21 +++++++++++----------
 5 files changed, 54 insertions(+), 54 deletions(-)

diff --git a/subprojects/curl.wrap b/subprojects/curl.wrap
index f7e384b85c..d73b88b75e 100644
--- a/subprojects/curl.wrap
+++ b/subprojects/curl.wrap
@@ -1,13 +1,14 @@
 [wrap-file]
-directory = curl-8.10.1
-source_url = https://github.com/curl/curl/releases/download/curl-8_10_1/curl-8.10.1.tar.xz
-source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/curl_8.10.1-1/curl-8.10.1.tar.xz
-source_filename = curl-8.10.1.tar.xz
-source_hash = 73a4b0e99596a09fa5924a4fb7e4b995a85fda0d18a2c02ab9cf134bebce04ee
-patch_filename = curl_8.10.1-1_patch.zip
-patch_url = https://wrapdb.mesonbuild.com/v2/curl_8.10.1-1/get_patch
-patch_hash = 707c28f35fc9b0e8d68c0c2800712007612f922a31da9637ce706a2159f3ddd8
-wrapdb_version = 8.10.1-1
+directory = curl-8.12.1
+source_url = https://github.com/curl/curl/releases/download/curl-8_12_1/curl-8.12.1.tar.xz
+source_fallback_url = https://wrapdb.mesonbuild.com/v2/curl_8.12.1-2/get_source/curl-8.12.1.tar.xz
+source_filename = curl-8.12.1.tar.xz
+source_hash = 0341f1ed97a26c811abaebd37d62b833956792b7607ea3f15d001613c76de202
+patch_filename = curl_8.12.1-2_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/curl_8.12.1-2/get_patch
+patch_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/curl_8.12.1-2/curl_8.12.1-2_patch.zip
+patch_hash = bfd8886cc76ccfab52b1b0472e6c682cdf5374a4c30be2427326f2f495de4eba
+wrapdb_version = 8.12.1-2
 
 [provide]
 dependency_names = libcurl
diff --git a/subprojects/expat.wrap b/subprojects/expat.wrap
index 0e9292f97b..67c4ae872f 100644
--- a/subprojects/expat.wrap
+++ b/subprojects/expat.wrap
@@ -1,13 +1,14 @@
 [wrap-file]
-directory = expat-2.7.1
-source_url = https://github.com/libexpat/libexpat/releases/download/R_2_7_1/expat-2.7.1.tar.xz
-source_filename = expat-2.7.1.tar.bz2
-source_hash = 354552544b8f99012e5062f7d570ec77f14b412a3ff5c7d8d0dae62c0d217c30
-patch_filename = expat_2.7.1-1_patch.zip
-patch_url = https://wrapdb.mesonbuild.com/v2/expat_2.7.1-1/get_patch
-patch_hash = fe28cbbc427a7c9787d08b969ad54d19f59d8dd18294b4a18651cecfc789d4ef
-source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/expat_2.7.1-1/expat-2.7.1.tar.bz2
-wrapdb_version = 2.7.1-1
+directory = expat-2.8.4
+source_url = https://github.com/libexpat/libexpat/releases/download/R_2_8_4/expat-2.8.4.tar.xz
+source_filename = expat-2.8.4.tar.xz
+source_hash = 656ae1cc8da3b4ea513bb4e254f33e6243938084c0ec6239da873376b09985a7
+source_fallback_url = https://wrapdb.mesonbuild.com/v2/expat_2.8.4-1/get_source/expat-2.8.4.tar.xz
+patch_filename = expat_2.8.4-1_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/expat_2.8.4-1/get_patch
+patch_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/expat_2.8.4-1/expat_2.8.4-1_patch.zip
+patch_hash = 221c537a6cfd8d55ea2d41600ee7f32d8c0659cf6e41511e9e7a2f294b21cb92
+wrapdb_version = 2.8.4-1
 
 [provide]
-expat = expat_dep
+dependency_names = expat
diff --git a/subprojects/openssl.wrap b/subprojects/openssl.wrap
index 873d55106e..e775bb104f 100644
--- a/subprojects/openssl.wrap
+++ b/subprojects/openssl.wrap
@@ -1,15 +1,14 @@
 [wrap-file]
-directory = openssl-3.0.8
-source_url = https://www.openssl.org/source/openssl-3.0.8.tar.gz
-source_filename = openssl-3.0.8.tar.gz
-source_hash = 6c13d2bf38fdf31eac3ce2a347073673f5d63263398f1f69d0df4a41253e4b3e
-patch_filename = openssl_3.0.8-3_patch.zip
-patch_url = https://wrapdb.mesonbuild.com/v2/openssl_3.0.8-3/get_patch
-patch_hash = 300da189e106942347d61a4a4295aa2edbcf06184f8d13b4cee0bed9fb936963
-source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/openssl_3.0.8-3/openssl-3.0.8.tar.gz
-wrapdb_version = 3.0.8-3
+directory = openssl-3.0.10
+source_url = https://www.openssl.org/source/openssl-3.0.10.tar.gz
+source_filename = openssl-3.0.10.tar.gz
+source_hash = 1761d4f5b13a1028b9b6f3d4b8e17feb0cedc9370f6afe61d7193d2cdce83323
+source_fallback_url = https://wrapdb.mesonbuild.com/v2/openssl_3.0.10-1/get_source/openssl-3.0.10.tar.gz
+patch_filename = openssl_3.0.10-1_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/openssl_3.0.10-1/get_patch
+patch_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/openssl_3.0.10-1/openssl_3.0.10-1_patch.zip
+patch_hash = 2d142b7e3b1ac092cf67cb4891594c4a2d044aa92624c617a8dcbfe4f056d907
+wrapdb_version = 3.0.10-1
 
 [provide]
-libcrypto = libcrypto_dep
-libssl = libssl_dep
-openssl = openssl_dep
+dependency_names = libcrypto, libssl, openssl
diff --git a/subprojects/pcre2.wrap b/subprojects/pcre2.wrap
index f45c968e2f..a2ff6268dc 100644
--- a/subprojects/pcre2.wrap
+++ b/subprojects/pcre2.wrap
@@ -1,16 +1,14 @@
 [wrap-file]
-directory = pcre2-10.45
-source_url = https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.45/pcre2-10.45.tar.bz2
-source_filename = pcre2-10.45.tar.bz2
-source_hash = 21547f3516120c75597e5b30a992e27a592a31950b5140e7b8bfde3f192033c4
-patch_filename = pcre2_10.45-2_patch.zip
-patch_url = https://wrapdb.mesonbuild.com/v2/pcre2_10.45-2/get_patch
-patch_hash = 7c6f34b703708652a404f9dc2769c67658c437b6043573295fa3428a9b7a6807
-source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/pcre2_10.45-2/pcre2-10.45.tar.bz2
-wrapdb_version = 10.45-2
+directory = pcre2-10.48
+source_url = https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.48/pcre2-10.48.tar.bz2
+source_filename = pcre2-10.48.tar.bz2
+source_hash = b6c68fdf6f3ac31388b50aa89ff0fc49c00c987c16e7b5146491d12003f2c8ed
+source_fallback_url = https://wrapdb.mesonbuild.com/v2/pcre2_10.48-1/get_source/pcre2-10.48.tar.bz2
+patch_filename = pcre2_10.48-1_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/pcre2_10.48-1/get_patch
+patch_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/pcre2_10.48-1/pcre2_10.48-1_patch.zip
+patch_hash = fbcc964804a921b02ea78fc0ff1558d5999b224db8361087828e30012023525c
+wrapdb_version = 10.48-1
 
 [provide]
-libpcre2-8 = libpcre2_8
-libpcre2-16 = libpcre2_16
-libpcre2-32 = libpcre2_32
-libpcre2-posix = libpcre2_posix
+dependency_names = libpcre2-8, libpcre2-16, libpcre2-32, libpcre2-posix
diff --git a/subprojects/zlib.wrap b/subprojects/zlib.wrap
index aa14de1774..0626401ac2 100644
--- a/subprojects/zlib.wrap
+++ b/subprojects/zlib.wrap
@@ -1,13 +1,14 @@
 [wrap-file]
-directory = zlib-1.3.1
-source_url = http://zlib.net/fossils/zlib-1.3.1.tar.gz
-source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/zlib_1.3.1-1/zlib-1.3.1.tar.gz
-source_filename = zlib-1.3.1.tar.gz
-source_hash = 9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23
-patch_filename = zlib_1.3.1-1_patch.zip
-patch_url = https://wrapdb.mesonbuild.com/v2/zlib_1.3.1-1/get_patch
-patch_hash = e79b98eb24a75392009cec6f99ca5cdca9881ff20bfa174e8b8926d5c7a47095
-wrapdb_version = 1.3.1-1
+directory = zlib-1.3.2
+source_url = https://zlib.net/zlib-1.3.2.tar.xz
+source_fallback_url = https://wrapdb.mesonbuild.com/v2/zlib_1.3.2-1/get_source/zlib-1.3.2.tar.xz
+source_filename = zlib-1.3.2.tar.xz
+source_hash = d7a0654783a4da529d1bb793b7ad9c3318020af77667bcae35f95d0e42a792f3
+patch_filename = zlib_1.3.2-1_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/zlib_1.3.2-1/get_patch
+patch_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/zlib_1.3.2-1/zlib_1.3.2-1_patch.zip
+patch_hash = 5ae7a2e92f823df118cfb8c1b23d94e3117864392b3446581d669049b2fba6dd
+wrapdb_version = 1.3.2-1
 
 [provide]
-zlib = zlib_dep
+dependency_names = zlib

-- 
2.56.0.rc2.329.gd58861e689.dirty


```

## Patrick Steinhardt, 2026-09-24 14:09

Subject: [PATCH 7/7] gitlab-ci: fix hanging MSVC jobs
Message-ID: <20260924-pks-meson-improvements-v1-7-90b7f79f1c4e@pks.im>
In-Reply-To: <20260924-pks-meson-improvements-v1-0-90b7f79f1c4e@pks.im>

```
Starting with GitLab Runner 19.x, the runner executes `git credential
reject` in its cleanup stage. This has bad interactions with our build
environment because we install our own version of PortableGit, and the
runner picks up that version of Git. The consequence is that we invoke
PortableGit's default credential manager, which is Git Credential
Manager for Windows. GCM then tries to use Windows Credential Manager,
but it cannot and thus the job hangs in its cleanup phase forever.

Fix this hang by unsetting the credential helper after installing
PortableGit. This means that `git credential reject` becomes a no-op,
and thus the cleanup succeeds again.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 ci/install-dependencies.ps1 | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/ci/install-dependencies.ps1 b/ci/install-dependencies.ps1
index e3b367fa54..2ceb5dd99a 100755
--- a/ci/install-dependencies.ps1
+++ b/ci/install-dependencies.ps1
@@ -53,3 +53,11 @@ Invoke-Installer msiexec.exe @('/i', $mesonMsi, 'INSTALLDIR=C:\Meson', '/quiet',
 $rustMsi = Get-Installer "rust.msi" `
     "https://static.rust-lang.org/dist/rust-$RustVersion-x86_64-pc-windows-msvc.msi"
 Invoke-Installer msiexec.exe @('/i', $rustMsi, 'INSTALLDIR=C:\Rust', 'ADDLOCAL=Rustc,Cargo,Std', '/quiet', '/norestart')
+
+# Disable Git Credential Manager, which is auto-configured by PortableGit.
+# GitLab's runner picks up this Git in its cleanup stage and runs `git
+# credential reject`, which hangs in GCM and makes the job time out.
+& "C:\Program Files\Git\bin\git.exe" config unset --all --system credential.helper
+if ($LASTEXITCODE -ne 0 -and $LASTEXITCODE -ne 5) {
+    throw "Failed to unset credential.helper with exit code $LASTEXITCODE"
+}

-- 
2.56.0.rc2.329.gd58861e689.dirty


```

## Karthik Nayak, 2026-09-30 12:00

Subject: Re: [PATCH 1/7] meson: avoid recompiling HTTP sources several times
Message-ID: <CAOLa=ZQ0qVCS2Bi3QrDokBRfgtTFH9bqudYiFozHtmEzKgRVeA@mail.gmail.com>
In-Reply-To: <20260924-pks-meson-improvements-v1-1-90b7f79f1c4e@pks.im>

```
Patrick Steinhardt <ps@pks.im> writes:

> We only link curl into a subset of our subcommands. Consequently, as
> both "http.c" and "http-walker.c" depend on curl, we don't compile these
> into "libgit.a" but instead only link those into the commands that
> depend on curl.
>
> In Meson, we wire these dependencies into the target executables by
> using the `sources:` keyword. But this has the consequence that we're
> recompiling those multiple several times, once for every different
> command they are linked into. In fact, each of these sources is compiled
> seven times, which of course has an impact on compilation speed.
>
> Fix this issue by instead linking these into a static library so that
> they only need to be compiled once. This gives us an almost 10% speedup
> in a clean build:
>
>   Benchmark 1: meson compile (version = HEAD~)
>     Time (mean ± σ):      6.781 s ±  0.052 s    [User: 100.775 s, System: 22.954 s]
>     Range (min … max):    6.709 s …  6.867 s    10 runs
>
>   Benchmark 2: meson compile (version = HEAD)
>     Time (mean ± σ):      6.274 s ±  0.021 s    [User: 91.882 s, System: 22.092 s]
>     Range (min … max):    6.242 s …  6.306 s    10 runs
>
>   Summary
>     meson compile (version = HEAD) ran
>       1.08 ± 0.01 times faster than meson compile (version = HEAD~)
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
>  meson.build | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/meson.build b/meson.build
> index 0a95d90d21..4fdb4c5405 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1925,10 +1925,13 @@ bin_wrappers += executable('scalar',
>
>  if curl.found()
>    libgit_curl = declare_dependency(
> -    sources: [
> -      'http.c',
> -      'http-walker.c',
> -    ],
> +    link_with: static_library('git-curl',
> +      sources: [
> +        'http.c',
> +        'http-walker.c',
> +      ],
> +      dependencies: [libgit_commonmain, curl],
> +    ),

So there are 7 locations which mark `libgit_curl` as a dependency,
earlier this would have recompiled the two sources here each time for
each of the 7 locations.

Now we build a static library and declare the dependency to be linked
with the static library. Looks good.

>      dependencies: [libgit_commonmain, curl],
>    )
>
>
> --
> 2.56.0.rc2.329.gd58861e689.dirty

```

## Karthik Nayak, 2026-09-30 12:20

Subject: Re: [PATCH 3/7] meson: use precompiled headers for our test-helper
Message-ID: <CAOLa=ZRdeuYTv4f-1EEJmF+Dp76kDvz5+dWNkmnuMDjipDyV5w@mail.gmail.com>
In-Reply-To: <20260924-pks-meson-improvements-v1-3-90b7f79f1c4e@pks.im>

```
Patrick Steinhardt <ps@pks.im> writes:

> In 671df48df8 (meson: precompile "git-compat-util.h", 2026-03-19) we
> have introduced support for precompiled headers into Meson. At that time
> though we only converted "libgit.a" to make use of those.
>
> Nowadays though, our test-helper also consists of a bunch of code files,
> and all of these include "git-compat-util.h" via "test-tool.h" as the
> first header. So they're a natural target to also use precompiled
> headers.
>
> Adapt the test-tool executable to make use of them, which results in a
> surprisingly large speedup for clean builds:
>
>   Benchmark 1: meson compile (version = HEAD~)
>     Time (mean ± σ):      6.363 s ±  0.033 s    [User: 92.858 s, System: 22.500 s]
>     Range (min … max):    6.311 s …  6.418 s    10 runs
>
>   Benchmark 2: meson compile (version = HEAD)
>     Time (mean ± σ):      5.327 s ±  0.021 s    [User: 75.135 s, System: 20.373 s]
>     Range (min … max):    5.299 s …  5.362 s    10 runs
>
>   Summary
>     meson compile (version = HEAD) ran
>       1.19 ± 0.01 times faster than meson compile (version = HEAD~)
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
>  t/helper/meson.build | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/t/helper/meson.build b/t/helper/meson.build
> index 3235f10ab8..ae513b4cdc 100644
> --- a/t/helper/meson.build
> +++ b/t/helper/meson.build
> @@ -83,6 +83,7 @@ test_tool_sources = [
>
>  test_tool = executable('test-tool',
>    sources: test_tool_sources,
> +  c_pch: '../../tools/precompiled.h',
>    dependencies: [libgit_commonmain],
>  )
>  bin_wrappers += test_tool
>

Seems like a straightforward win. Nice to see.

> --
> 2.56.0.rc2.329.gd58861e689.dirty

```

## Karthik Nayak, 2026-09-30 12:24

Subject: Re: [PATCH 6/7] meson: update wrappers
Message-ID: <CAOLa=ZSMixcSF3enAPNK74U4Qn93veafvodpiPpgZNJEnP+M3A@mail.gmail.com>
In-Reply-To: <20260924-pks-meson-improvements-v1-6-90b7f79f1c4e@pks.im>

```
Patrick Steinhardt <ps@pks.im> writes:

> Our subproject wrappers are used on platforms that do not have the
> respective dependencies available. Most importantly, this can be used on
> Windows to have an almost-dependency-free build of Git.
>
> Update these wrappers via `meson wrap update`.
>

Okay, I've verified this locally and it matches.

[snip]

```

## Karthik Nayak, 2026-09-30 12:26

Subject: Re: [PATCH 7/7] gitlab-ci: fix hanging MSVC jobs
Message-ID: <CAOLa=ZShU_FhuudX6JSPO7q6w9xBR-QRyEd1UbCZ15o-S3xtqQ@mail.gmail.com>
In-Reply-To: <20260924-pks-meson-improvements-v1-7-90b7f79f1c4e@pks.im>

```
FPatrick Steinhardt <ps@pks.im> writes:

> Starting with GitLab Runner 19.x, the runner executes `git credential
> reject` in its cleanup stage. This has bad interactions with our build
> environment because we install our own version of PortableGit, and the
> runner picks up that version of Git. The consequence is that we invoke
> PortableGit's default credential manager, which is Git Credential
> Manager for Windows. GCM then tries to use Windows Credential Manager,
> but it cannot and thus the job hangs in its cleanup phase forever.
>
> Fix this hang by unsetting the credential helper after installing
> PortableGit. This means that `git credential reject` becomes a no-op,
> and thus the cleanup succeeds again.
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
>  ci/install-dependencies.ps1 | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/ci/install-dependencies.ps1 b/ci/install-dependencies.ps1
> index e3b367fa54..2ceb5dd99a 100755
> --- a/ci/install-dependencies.ps1
> +++ b/ci/install-dependencies.ps1
> @@ -53,3 +53,11 @@ Invoke-Installer msiexec.exe @('/i', $mesonMsi, 'INSTALLDIR=C:\Meson', '/quiet',
>  $rustMsi = Get-Installer "rust.msi" `
>      "https://static.rust-lang.org/dist/rust-$RustVersion-x86_64-pc-windows-msvc.msi"
>  Invoke-Installer msiexec.exe @('/i', $rustMsi, 'INSTALLDIR=C:\Rust', 'ADDLOCAL=Rustc,Cargo,Std', '/quiet', '/norestart')
> +
> +# Disable Git Credential Manager, which is auto-configured by PortableGit.
> +# GitLab's runner picks up this Git in its cleanup stage and runs `git
> +# credential reject`, which hangs in GCM and makes the job time out.
> +& "C:\Program Files\Git\bin\git.exe" config unset --all --system credential.helper
> +if ($LASTEXITCODE -ne 0 -and $LASTEXITCODE -ne 5) {
> +    throw "Failed to unset credential.helper with exit code $LASTEXITCODE"
> +}
>

Nice, for reference the runner team also has a fix on their end to
disable credential.helper on their side too [1].

[1]: gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/7470
> --
> 2.56.0.rc2.329.gd58861e689.dirty

```

## Karthik Nayak, 2026-09-30 12:26

Subject: Re: [PATCH 0/7] A couple of Meson improvements
Message-ID: <CAOLa=ZS8Exa_WkMLiFNspeYaKFf40eOM19ZgecC=yTnFEAhMzQ@mail.gmail.com>
In-Reply-To: <20260924-pks-meson-improvements-v1-0-90b7f79f1c4e@pks.im>

```
Patrick Steinhardt <ps@pks.im> writes:

> Hi,
>
> this patch series contains a couple of improvements for Meson:
>
>   - Clean build times are sped up, going from ~6.8 seconds to ~5.0
>     seconds for a full build.
>
>   - A test issue is fixed that causes shell completion tests to fail
>     because the scripts are not properly updated.
>
>   - Our subproject wrappers are updated to current versions.
>
>   - A fix for GitLab's msvc-meson jobs that are broken right now due to
>     a change in our runner images. See [1] for the now-working
>     msvc-meson jobs. Note though that the MinGW-based jobs are still
>     broken, but Dscho has been sending fixes for that already.
>
> Thanks!
>
> Patrick
>

The patches look good. The speedup is much appreciated.

> ---
> Patrick Steinhardt (7):
>       meson: avoid recompiling HTTP sources several times
>       meson: don't recompile git-remote-http(1) multiple times for tests
>       meson: use precompiled headers for our test-helper
>       meson: use precompiled headers for unit tests
>       meson: fix outdated completion helpers
>       meson: update wrappers
>       gitlab-ci: fix hanging MSVC jobs
>
>  ci/install-dependencies.ps1    |  8 ++++++++
>  contrib/completion/meson.build | 38 +++++++++++++++-----------------------
>  meson.build                    | 16 ++++++++++------
>  subprojects/curl.wrap          | 19 ++++++++++---------
>  subprojects/expat.wrap         | 21 +++++++++++----------
>  subprojects/openssl.wrap       | 23 +++++++++++------------
>  subprojects/pcre2.wrap         | 24 +++++++++++-------------
>  subprojects/zlib.wrap          | 21 +++++++++++----------
>  t/helper/meson.build           |  1 +
>  t/meson.build                  | 10 ++++++++--
>  10 files changed, 96 insertions(+), 85 deletions(-)
>
>
> ---
> base-commit: 0f8e75abebff0877cae681a3d5ff31ac47f54220
> change-id: 20260924-pks-meson-improvements-b7ed9a48ed4e

```

## Patrick Steinhardt, 2026-09-30 12:48

Subject: Re: [PATCH 7/7] gitlab-ci: fix hanging MSVC jobs
Message-ID: <ar0FJP9cAWFY7SZa@pks.im>
In-Reply-To: <CAOLa=ZShU_FhuudX6JSPO7q6w9xBR-QRyEd1UbCZ15o-S3xtqQ@mail.gmail.com>

```
On Wed, Sep 30, 2026 at 05:26:17AM -0700, Karthik Nayak wrote:
> Patrick Steinhardt <ps@pks.im> writes:
> > diff --git a/ci/install-dependencies.ps1 b/ci/install-dependencies.ps1
> > index e3b367fa54..2ceb5dd99a 100755
> > --- a/ci/install-dependencies.ps1
> > +++ b/ci/install-dependencies.ps1
> > @@ -53,3 +53,11 @@ Invoke-Installer msiexec.exe @('/i', $mesonMsi, 'INSTALLDIR=C:\Meson', '/quiet',
> >  $rustMsi = Get-Installer "rust.msi" `
> >      "https://static.rust-lang.org/dist/rust-$RustVersion-x86_64-pc-windows-msvc.msi"
> >  Invoke-Installer msiexec.exe @('/i', $rustMsi, 'INSTALLDIR=C:\Rust', 'ADDLOCAL=Rustc,Cargo,Std', '/quiet', '/norestart')
> > +
> > +# Disable Git Credential Manager, which is auto-configured by PortableGit.
> > +# GitLab's runner picks up this Git in its cleanup stage and runs `git
> > +# credential reject`, which hangs in GCM and makes the job time out.
> > +& "C:\Program Files\Git\bin\git.exe" config unset --all --system credential.helper
> > +if ($LASTEXITCODE -ne 0 -and $LASTEXITCODE -ne 5) {
> > +    throw "Failed to unset credential.helper with exit code $LASTEXITCODE"
> > +}
> >
> 
> Nice, for reference the runner team also has a fix on their end to
> disable credential.helper on their side too [1].
> 
> [1]: gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/7470

Yeah, I've seen that already, but thanks for pointing this out to the
mailing list. I guess it makes sense to apply this patch anyway so that
we don't have this issue anymore with the current-broken version of the
runner.

Thanks!

Patrick

```

## Kaartic Sivaraam, 2026-10-05 08:03

Subject: Re: [PATCH 1/7] meson: avoid recompiling HTTP sources several times
Message-ID: <74b22ec2-280e-4fca-9f5b-c21a7c12a78f@gmail.com>
In-Reply-To: <20260924-pks-meson-improvements-v1-1-90b7f79f1c4e@pks.im>

```
On 9/24/26 19:39, Patrick Steinhardt wrote:
> We only link curl into a subset of our subcommands. Consequently, as
> both "http.c" and "http-walker.c" depend on curl, we don't compile these
> into "libgit.a" but instead only link those into the commands that
> depend on curl.
> 
> In Meson, we wire these dependencies into the target executables by
> using the `sources:` keyword. But this has the consequence that we're
> recompiling those multiple several times, once for every different

s/multiple several/multiple/

Rest of the patch look good to me.

-- 
Sivaraam


```

## Kaartic Sivaraam, 2026-10-05 09:34

Subject: Re: [PATCH 4/7] meson: use precompiled headers for unit tests
Message-ID: <eb0432fa-a595-4690-bf13-baffb306cc3a@gmail.com>
In-Reply-To: <20260924-pks-meson-improvements-v1-4-90b7f79f1c4e@pks.im>

```
On 9/24/26 19:39, Patrick Steinhardt wrote:
> 
> diff --git a/t/meson.build b/t/meson.build
> index 3ca7b27104..9f1ee9ad59 100644
> --- a/t/meson.build
> +++ b/t/meson.build
> @@ -30,7 +30,6 @@ clar_test_suites = [
>   ]
>   
>   clar_sources = [
> -  'unit-tests/clar/clar.c',
>     'unit-tests/unit-test.c',
>     'unit-tests/lib-oid.c',
>     'unit-tests/lib-reftable.c'
> @@ -49,7 +48,7 @@ clar_decls_h = custom_target(
>   )
>   clar_sources += clar_decls_h
>   
> -clar_sources += custom_target(
> +clar_suite_h = custom_target(
>     input: clar_decls_h,
>     output: 'clar.suite',
>     command : [
> @@ -66,6 +65,13 @@ clar_unit_tests = executable('unit-tests',
>     c_args: [
>       '-DGIT_CLAR_DECLS_H="' + clar_decls_h.full_path() + '"',
>     ],
> +  c_pch: '../tools/precompiled.h',
> +  link_with: static_library('clar',
> +    sources: [
> +      'unit-tests/clar/clar.c',
> +      clar_suite_h,
> +    ],
> +  ),

Compiling this separately as a static library is cool but now clar.c 
does not get the libgit_c_args it was getting through the dependencies 
of  the unit-tests executable. Is this something that we need to correct?

>     dependencies: [libgit_commonmain],
>   )
>   test('unit-tests', clar_unit_tests, kwargs: test_kwargs)
> 

-- 
Sivaraam


```

## Kaartic Sivaraam, 2026-10-05 09:42

Subject: Re: [PATCH 6/7] meson: update wrappers
Message-ID: <3de4ba2b-9b0c-499b-98bb-7077e0d7613b@gmail.com>
In-Reply-To: <20260924-pks-meson-improvements-v1-6-90b7f79f1c4e@pks.im>

```
On 9/24/26 19:39, Patrick Steinhardt wrote:
> Our subproject wrappers are used on platforms that do not have the
> respective dependencies available. Most importantly, this can be used on
> Windows to have an almost-dependency-free build of Git.
> 
> Update these wrappers via `meson wrap update`.
> 
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
>   subprojects/curl.wrap    | 19 ++++++++++---------
>   subprojects/expat.wrap   | 21 +++++++++++----------
>   subprojects/openssl.wrap | 23 +++++++++++------------
>   subprojects/pcre2.wrap   | 24 +++++++++++-------------
>   subprojects/zlib.wrap    | 21 +++++++++++----------
>   5 files changed, 54 insertions(+), 54 deletions(-)
> 
> diff --git a/subprojects/curl.wrap b/subprojects/curl.wrap
> index f7e384b85c..d73b88b75e 100644
> --- a/subprojects/curl.wrap
> +++ b/subprojects/curl.wrap
> @@ -1,13 +1,14 @@
>   [wrap-file]
 > [ snip ]
> -wrapdb_version = 8.10.1-1
 > [ snip ]
> +wrapdb_version = 8.12.1-2
>
 > diff --git a/subprojects/openssl.wrap b/subprojects/openssl.wrap> 
index 873d55106e..e775bb104f 100644
> --- a/subprojects/openssl.wrap
> +++ b/subprojects/openssl.wrap
> @@ -1,15 +1,14 @@
>   [wrap-file]
 > [ snip ]> -wrapdb_version = 3.0.8-3
 > [ snip ]> +wrapdb_version = 3.0.10-1
>

We are using the latest versions from the wrap DB for the above but the 
versions available via wrap DB itself appears quite old. For instance,

- curl 8.12.1 was released on Feb/2025. The latest available
   is 8.22.0 (released Sep/2026)

- OpenSSL 3.0.10 was released on Aug/2023. The latest available are
   3.0.22 (released Aug/2026) and 4.0.1 (released Jun/2026).

Is this version gap something we need to document / think about?

-- 
Sivaraam


```

## Kaartic Sivaraam, 2026-10-05 09:51

Subject: Re: [PATCH 0/7] A couple of Meson improvements
Message-ID: <24737aed-50c5-4536-a081-938036c08588@gmail.com>
In-Reply-To: <20260924-pks-meson-improvements-v1-0-90b7f79f1c4e@pks.im>

```
On 9/24/26 19:39, Patrick Steinhardt wrote:
>
> ---
> Patrick Steinhardt (7):
>        meson: avoid recompiling HTTP sources several times
>        meson: don't recompile git-remote-http(1) multiple times for tests
>        meson: use precompiled headers for our test-helper
>        meson: use precompiled headers for unit tests

The only other sub-directory that does not yet include the precompiled 
header is 'compat' and leaving it out seems to be the right choice. 
Including it would trigger recursive compilation issues as 
git-compat-util.h itself depends on compat/posix.h. Trying to reshuffle 
the build code to fix this seems not worthwhile given the amount of code 
is a bit less there.

A few other similar targets that were not touched by this series are 
non-worthwhile such as 'common-main', 'git-curl' etc.

Apart from the few other comments in other threads, this series looks 
good to me.

-- 
Sivaraam


```

## Patrick Steinhardt, 2026-10-05 10:24

Subject: Re: [PATCH 4/7] meson: use precompiled headers for unit tests
Message-ID: <asN6-vOYWYtbiBFr@pks.im>
In-Reply-To: <eb0432fa-a595-4690-bf13-baffb306cc3a@gmail.com>

```
On Mon, Oct 05, 2026 at 03:04:16PM +0530, Kaartic Sivaraam wrote:
> On 9/24/26 19:39, Patrick Steinhardt wrote:
> > 
> > diff --git a/t/meson.build b/t/meson.build
> > index 3ca7b27104..9f1ee9ad59 100644
> > --- a/t/meson.build
> > +++ b/t/meson.build
> > @@ -66,6 +65,13 @@ clar_unit_tests = executable('unit-tests',
> >     c_args: [
> >       '-DGIT_CLAR_DECLS_H="' + clar_decls_h.full_path() + '"',
> >     ],
> > +  c_pch: '../tools/precompiled.h',
> > +  link_with: static_library('clar',
> > +    sources: [
> > +      'unit-tests/clar/clar.c',
> > +      clar_suite_h,
> > +    ],
> > +  ),
> 
> Compiling this separately as a static library is cool but now clar.c does
> not get the libgit_c_args it was getting through the dependencies of  the
> unit-tests executable. Is this something that we need to correct?

That's true. But I wonder whether that is maybe even an improvement.
After all, the libgit_c_args contain stuff that is relevant to Git,
only. And given that "clar.c" is a vendored dependency, it does not
really make sense to expose e.g. "-DWITH_BREAKING_CHANGES".

Now there are a small handful of arguments that _might_ be relevant, but
these are only -W-style warning flags. I don't think we really care
about those either, as again, this is a vendored dependency.

So overall I think that this is fine, but I should've maybe called this
out in the commit mesage.

Patrick

```

## Patrick Steinhardt, 2026-10-05 10:25

Subject: Re: [PATCH 6/7] meson: update wrappers
Message-ID: <asN7AJdVmPCzov7l@pks.im>
In-Reply-To: <3de4ba2b-9b0c-499b-98bb-7077e0d7613b@gmail.com>

```
On Mon, Oct 05, 2026 at 03:12:34PM +0530, Kaartic Sivaraam wrote:
> On 9/24/26 19:39, Patrick Steinhardt wrote:
> > diff --git a/subprojects/openssl.wrap b/subprojects/openssl.wrap> index
> 873d55106e..e775bb104f 100644
> > --- a/subprojects/openssl.wrap
> > +++ b/subprojects/openssl.wrap
> > @@ -1,15 +1,14 @@
> >   [wrap-file]
> > [ snip ]> -wrapdb_version = 3.0.8-3
> > [ snip ]> +wrapdb_version = 3.0.10-1
> > 
> 
> We are using the latest versions from the wrap DB for the above but the
> versions available via wrap DB itself appears quite old. For instance,
> 
> - curl 8.12.1 was released on Feb/2025. The latest available
>   is 8.22.0 (released Sep/2026)
> 
> - OpenSSL 3.0.10 was released on Aug/2023. The latest available are
>   3.0.22 (released Aug/2026) and 4.0.1 (released Jun/2026).
> 
> Is this version gap something we need to document / think about?

Maybe, but I think the proper way to fix this would be to update the
wrap DB if we really care about this. For now we only use this so that
we can have a mostly dependencyless Windows build with GitLab CI. I
don't think anybody uses this for a production-facing build.

So I'd leave this as-is for now, but agree that we should maybe iterate
a bit on this going forward and collaborate with upstream.

Thanks!

Patrick

```
