Subject: [PATCH v2 0/3] Hot fixes from Git for Windows v2.49.0-rc0

From: "Johannes Schindelin via GitGitGadget" <[email-masked]>
Date: Thu, 06 Mar 2025 10:26:17 +0000

I needed many patches to make Git for Windows v2.49.0-rc0 compile and run
the many, many CI jobs successfully. These here patches even apply to
upstream Git. (Technically, the Meson sorting patch is not required to
compile, but it was the fall-out from many required adjustments to make the
Meson jobs happy.)

Changes since v1:

 * I spent two hours investigating under which circumstances the (correct)
   compiler error about a non-writable pw_gecos field triggers, and
   augmented the commit message accordingly.
 * Since -rc1, another breaking change necessitated yet another hot fix,
   which I invites to this patch fest (and the patch series hence had to be
   rebased to the current tip of Git's main branch).

Johannes Schindelin (3):
  ident: stop assuming that `gw_gecos` is writable
  meson: fix sorting
  cmake: generalize the handling of the `CLAR_TEST_OBJS` list

 contrib/buildsystems/CMakeLists.txt | 12 ++++++++----
 ident.c                             |  2 +-
 meson.build                         |  2 +-
 3 files changed, 10 insertions(+), 6 deletions(-)

base-commit: e969bc875963a10890d61ba84eab3a460bd9e535
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1867%2Fdscho%2Fg4w-hot-fixes-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1867/dscho/g4w-hot-fixes-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/1867

Range-diff vs v1:

 1:  045c11dc1d5 ! 1:  3e9ccffc747 ident: stop assuming that `gw_gecos` is writable
     @@ Commit message
          writable in the first place), so let's switch the loop variable type to
          `const char *`.
      
     +    This is not a new problem, but what is new is the Meson build. While it
     +    does not trigger in CI builds, imitating the commands of
     +    `ci/run-build-and-tests.sh` in a regular Git for Windows SDK (`meson
     +    setup build . --fatal-meson-warnings --warnlevel 2 --werror --wrap-mode
     +    nofallback -Dfuzzers=true` followed by `meson compile -C build --`
     +    results in this beautiful error:
     +
     +      "cc" [...] -o libgit.a.p/ident.c.obj "-c" ../ident.c
     +      ../ident.c: In function 'copy_gecos':
     +      ../ident.c:68:18: error: assignment discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers]
     +         68 |         for (src = get_gecos(w); *src && *src != ','; src++) {
     +            |                  ^
     +      cc1.exe: all warnings being treated as errors
     +
     +    Now, why does this not trigger in CI? The answer is as simple as it is
     +    puzzling: The `win+Meson` job completely side-steps Git for Windows'
     +    development environment, opting instead to use the GCC that is on the
     +    `PATH` in GitHub-hosted `windows-latest` runners. That GCC is pinned to
     +    v12.2.0 and targets the UCRT (unlikely to change any time soon, see
     +    https://github.com/actions/runner-images/blob/win25/20250303.1/images/windows/toolsets/toolset-2022.json#L132-L141).
     +    That is in stark contrast to Git for Windows, which uses GCC v14.2.0 and
     +    targets MSVCRT. Git for Windows' `Makefile`-based build also obviously
     +    uses different compiler flags, otherwise this compile error would have
     +    had plenty of opportunity in almost 14 years to surface.
     +
     +    In other words, contrary to my expectations, the `win+Meson` job is
     +    ill-equipped to replace the `win build` job because it exercises a
     +    completely different tool version/compiler flags vector than what Git
     +    for Windows needs.
     +
     +    Nevertheless, there is currently this huge push, including breaking
     +    changes after -rc1 and all, for switching to Meson. Therefore, we need
     +    to make it work, somehow, even in Git for Windows' SDK, hence this
     +    patch, at this point in time.
     +
          Signed-off-by: Johannes Schindelin <[email-masked]>
      
       ## ident.c ##
 2:  9d1faeae8a4 = 2:  4e9ab3e011f meson: fix sorting
 -:  ----------- > 3:  59a2e586e1a cmake: generalize the handling of the `CLAR_TEST_OBJS` list

-- 
gitgitgadget