aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2026-01-06 16:33:52 +0900
committerJunio C Hamano <gitster@pobox.com>2026-01-06 16:33:52 +0900
commitb39aad0b0d8f4c6b12c7a057f0c6f3e0cce7c506 (patch)
treecd74f3c04abd9fdd3286697ad9865c67bb4e2b2d
parent8fb86e1a424d7c847cdb5021d9ea4c1e8d537bc1 (diff)
parentcee341e9ddb0b57e19f16c64b17caf68683faaeb (diff)
downloadgit-b39aad0b0d8f4c6b12c7a057f0c6f3e0cce7c506.tar.xz
Merge branch 'rs/macos-iconv-workaround'
Workaround the "iconv" shipped as part of macOS, which is broken handling stateful ISO/IEC 2022 encoded strings. * rs/macos-iconv-workaround: macOS: use iconv from Homebrew if needed and present macOS: make Homebrew use configurable
-rw-r--r--Makefile26
-rw-r--r--config.mak.uname30
2 files changed, 34 insertions, 22 deletions
diff --git a/Makefile b/Makefile
index 89d8d73ec0..b7eba509c6 100644
--- a/Makefile
+++ b/Makefile
@@ -101,6 +101,15 @@ include shared.mak
# specify your own (or DarwinPort's) include directories and
# library directories by defining CFLAGS and LDFLAGS appropriately.
#
+# Define NO_HOMEBREW if you don't want to use gettext, libiconv and
+# msgfmt installed by Homebrew.
+#
+# Define HOMEBREW_PREFIX if you have Homebrew installed in a non-default
+# location on macOS or on Linux and want to use it.
+#
+# Define USE_HOMEBREW_LIBICONV to link against libiconv installed by
+# Homebrew, if present.
+#
# Define NO_APPLE_COMMON_CRYPTO if you are building on Darwin/Mac OS X
# and do not want to use Apple's CommonCrypto library. This allows you
# to provide your own OpenSSL library, for example from MacPorts.
@@ -1693,6 +1702,23 @@ ifeq ($(uname_S),Darwin)
PTHREAD_LIBS =
endif
+ifndef NO_HOMEBREW
+ifdef HOMEBREW_PREFIX
+ifeq ($(shell test -d $(HOMEBREW_PREFIX)/opt/gettext && echo y),y)
+ BASIC_CFLAGS += -I$(HOMEBREW_PREFIX)/opt/gettext/include
+ BASIC_LDFLAGS += -L$(HOMEBREW_PREFIX)/opt/gettext/lib
+endif
+ifeq ($(shell test -x $(HOMEBREW_PREFIX)/opt/gettext/msgfmt && echo y),y)
+ MSGFMT = $(HOMEBREW_PREFIX)/opt/gettext/msgfmt
+endif
+ifdef USE_HOMEBREW_LIBICONV
+ifeq ($(shell test -d $(HOMEBREW_PREFIX)/opt/libiconv && echo y),y)
+ ICONVDIR ?= $(HOMEBREW_PREFIX)/opt/libiconv
+endif
+endif
+endif
+endif
+
ifdef NO_LIBGEN_H
COMPAT_CFLAGS += -DNO_LIBGEN_H
COMPAT_OBJS += compat/basename.o
diff --git a/config.mak.uname b/config.mak.uname
index 1691c6ae6e..38b35af366 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -124,6 +124,7 @@ ifeq ($(uname_S),Darwin)
# - MacOS 10.0.* and MacOS 10.1.0 = Darwin 1.*
# - MacOS 10.x.* = Darwin (x+4).* for (1 <= x)
# i.e. "begins with [15678] and a dot" means "10.4.* or older".
+ DARWIN_MAJOR_VERSION = $(shell expr "$(uname_R)" : '\([0-9]*\)\.')
ifeq ($(shell expr "$(uname_R)" : '[15678]\.'),2)
OLD_ICONV = UnfortunatelyYes
NO_APPLE_COMMON_CRYPTO = YesPlease
@@ -149,28 +150,13 @@ ifeq ($(uname_S),Darwin)
CSPRNG_METHOD = arc4random
USE_ENHANCED_BASIC_REGULAR_EXPRESSIONS = YesPlease
- # Workaround for `gettext` being keg-only and not even being linked via
- # `brew link --force gettext`, should be obsolete as of
- # https://github.com/Homebrew/homebrew-core/pull/53489
- ifeq ($(shell test -d /usr/local/opt/gettext/ && echo y),y)
- BASIC_CFLAGS += -I/usr/local/include -I/usr/local/opt/gettext/include
- BASIC_LDFLAGS += -L/usr/local/lib -L/usr/local/opt/gettext/lib
- ifeq ($(shell test -x /usr/local/opt/gettext/bin/msgfmt && echo y),y)
- MSGFMT = /usr/local/opt/gettext/bin/msgfmt
- endif
- # On newer ARM-based machines the default installation path has changed to
- # /opt/homebrew. Include it in our search paths so that the user does not
- # have to configure this manually.
- #
- # Note that we do not employ the same workaround as above where we manually
- # add gettext. The issue was fixed more than three years ago by now, and at
- # that point there haven't been any ARM-based Macs yet.
- else ifeq ($(shell test -d /opt/homebrew/ && echo y),y)
- BASIC_CFLAGS += -I/opt/homebrew/include
- BASIC_LDFLAGS += -L/opt/homebrew/lib
- ifeq ($(shell test -x /opt/homebrew/bin/msgfmt && echo y),y)
- MSGFMT = /opt/homebrew/bin/msgfmt
- endif
+ ifeq ($(uname_M),arm64)
+ HOMEBREW_PREFIX = /opt/homebrew
+ else
+ HOMEBREW_PREFIX = /usr/local
+ endif
+ ifeq ($(shell test "$(DARWIN_MAJOR_VERSION)" -ge 24 && echo 1),1)
+ USE_HOMEBREW_LIBICONV = UnfortunatelyYes
endif
# The builtin FSMonitor on MacOS builds upon Simple-IPC. Both require