From 7fa24eebf38115a1ebaec8a61e9b1f18a25fb668 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Thu, 29 Jan 2026 23:12:57 +0100 Subject: [PATCH 1/4] fixup! release: add Mac OSX installer build The v2.53.0-rc0.vfs.0.0 build began failing with: Undefined symbols for architecture arm64: "_iconv", referenced from: __libintl_find_msg in libintl.a[arm64][13](dcigettext.o) "_iconv_open", referenced from: __libintl_find_msg in libintl.a[arm64][13](dcigettext.o) ld: symbol(s) not found for architecture arm64 See https://github.com/microsoft/git/actions/runs/21450597958 for the failing run. The previous release v2.52.0.vfs.0.5 built successfully on January 24, 2026 (https://github.com/microsoft/git/actions/runs/21313971421). The root cause is upstream commit cee341e9ddb0 ("macOS: use iconv from Homebrew if needed and present", 2025-12-24), which was included in Git v2.53.0-rc0 to work around an iconv bug in macOS 15.7.2. That commit introduced USE_HOMEBREW_LIBICONV, which config.mak.uname now sets on Darwin 24+, causing the Makefile to add Homebrew's libiconv to the linker search path. The problem is a symbol name mismatch: Homebrew's libiconv exports symbols with a prefix (_libiconv, _libiconv_open) to avoid conflicting with the system library, but Homebrew's gettext/libintl was built against the system iconv which uses unprefixed symbols (_iconv, _iconv_open). When building universal binaries, the linker finds Homebrew's libiconv first and cannot resolve the symbols libintl needs. The fix is to explicitly unset USE_HOMEBREW_LIBICONV and ICONVDIR in config.mak, forcing the linker to use the system's /usr/lib/libiconv.dylib which is already universal and exports the correct unprefixed symbols. Signed-off-by: Johannes Schindelin --- .github/workflows/build-git-installers.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-git-installers.yml b/.github/workflows/build-git-installers.yml index 1cb9b136bc1e50..27d62d25b2ff75 100644 --- a/.github/workflows/build-git-installers.yml +++ b/.github/workflows/build-git-installers.yml @@ -408,6 +408,9 @@ jobs: brew link --force gettext # Make universal gettext library + # Note: libintl depends on iconv, but we use the system's libiconv + # which is already universal, rather than Homebrew's libiconv which + # has different symbol names (_libiconv vs _iconv) lipo -create -output libintl.a /usr/local/opt/gettext/lib/libintl.a /opt/homebrew/opt/gettext/lib/libintl.a - name: Log in to Azure @@ -487,9 +490,19 @@ jobs: # used in 'git version --build-options'. We'll fix that in code. HOST_CPU = universal BASIC_CFLAGS += -arch arm64 -arch x86_64 + + # CRITICAL FIX: Disable USE_HOMEBREW_LIBICONV + # On Darwin 24+ (macOS 15), config.mak.uname sets USE_HOMEBREW_LIBICONV + # which causes ICONVDIR to point to Homebrew's libiconv. But Homebrew's + # libiconv exports _libiconv/_libiconv_open symbols (with prefix), while + # Homebrew's gettext/libintl was built against system iconv which uses + # _iconv/_iconv_open symbols (no prefix). We must use the system's + # /usr/lib/libiconv.dylib which is universal and has the correct symbols. + USE_HOMEBREW_LIBICONV = + ICONVDIR = EOF - # Configure the Git build to pick up gettext + # Configure the Git build to find our universal libintl.a homebrew_prefix="$(brew --prefix)" cat >>git/config.mak < Date: Thu, 29 Jan 2026 23:29:34 +0100 Subject: [PATCH 2/4] osxkeychain: always apply required build flags Starting with upstream commit 4580bcd2354a ("osxkeychain: avoid incorrectly skipping store operation", 2025-11-14), the osxkeychain credential helper includes git-compat-util.h and links against libgit.a. The osxkeychain Makefile has: CFLAGS ?= -g -O2 -Wall -I../../.. $(BASIC_CFLAGS) The ?= operator means "set only if not already set". When building via a parent Makefile that passes CFLAGS on the command line, this entire assignment is ignored - including the -I../../.. needed to find git-compat-util.h and the $(BASIC_CFLAGS) needed for -DNO_OPENSSL: git-credential-osxkeychain.c:5:10: fatal error: 'git-compat-util.h' file not found Using += instead of ?= is not sufficient either, because command-line variables in Make override even += assignments. We need to use "override CFLAGS +=" to force these flags to be appended regardless of how CFLAGS was set. Signed-off-by: Johannes Schindelin --- contrib/credential/osxkeychain/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/credential/osxkeychain/Makefile b/contrib/credential/osxkeychain/Makefile index c68445b82dc3e5..5db77c7526cd0d 100644 --- a/contrib/credential/osxkeychain/Makefile +++ b/contrib/credential/osxkeychain/Makefile @@ -41,8 +41,8 @@ prefix ?= /usr/local gitexecdir ?= $(prefix)/libexec/git-core CC ?= gcc -CFLAGS ?= -g -O2 -Wall -I../../.. $(BASIC_CFLAGS) -LDFLAGS ?= $(BASIC_LDFLAGS) $(EXTLIBS) +override CFLAGS += -g -O2 -Wall -I../../.. $(BASIC_CFLAGS) +override LDFLAGS += $(BASIC_LDFLAGS) $(EXTLIBS) INSTALL ?= install RM ?= rm -f From c518f830a25034068f8ddae80c369e4c5423a28e Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Fri, 30 Jan 2026 01:55:17 +0100 Subject: [PATCH 3/4] fixup! release: add Mac OSX installer build Starting with upstream commit 4580bcd2354a ("osxkeychain: avoid incorrectly skipping store operation", 2025-11-14), the osxkeychain credential helper includes git-compat-util.h. That header includes openssl/ssl.h unless -DNO_OPENSSL is defined: ../../../git-compat-util.h:199:10: fatal error: 'openssl/ssl.h' file not found On macOS, the main Makefile sets NO_OPENSSL (because Apple Common Crypto is used instead) and adds -DNO_OPENSSL to BASIC_CFLAGS. But contrib Makefiles that only include config.mak* files don't get this logic - they only see the variables, not the Makefile rules that convert NO_OPENSSL into -DNO_OPENSSL. Add -DNO_OPENSSL to BASIC_CFLAGS in config.mak so that contrib builds like osxkeychain can pick it up. Signed-off-by: Johannes Schindelin --- .github/workflows/build-git-installers.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/build-git-installers.yml b/.github/workflows/build-git-installers.yml index 27d62d25b2ff75..257f2eaff5270c 100644 --- a/.github/workflows/build-git-installers.yml +++ b/.github/workflows/build-git-installers.yml @@ -491,6 +491,11 @@ jobs: HOST_CPU = universal BASIC_CFLAGS += -arch arm64 -arch x86_64 + # macOS uses Apple Common Crypto instead of OpenSSL. The main Makefile + # sets NO_OPENSSL and adds -DNO_OPENSSL to BASIC_CFLAGS, but contrib + # Makefiles that only include config.mak* don't get this logic. + BASIC_CFLAGS += -DNO_OPENSSL + # CRITICAL FIX: Disable USE_HOMEBREW_LIBICONV # On Darwin 24+ (macOS 15), config.mak.uname sets USE_HOMEBREW_LIBICONV # which causes ICONVDIR to point to Homebrew's libiconv. But Homebrew's From f3a3f05c3451d1e421a74d5984165270ebc1322f Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Fri, 30 Jan 2026 10:49:16 +0100 Subject: [PATCH 4/4] GIT-VERSION: fix forgotten `-rc0` This is actually `-rc1`, but this file was not adjusted before tagging. Signed-off-by: Johannes Schindelin --- GIT-VERSION-GEN | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index c483f8721bf714..11b84221a27595 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,6 +1,6 @@ #!/bin/sh -DEF_VER=v2.53.0-rc0 +DEF_VER=v2.53.0-rc1 # Identify microsoft/git via a distinct version suffix DEF_VER=$DEF_VER.vfs.0.0