Skip to content

Commit cee341e

Browse files
rscharfegitster
authored andcommitted
macOS: use iconv from Homebrew if needed and present
The library function iconv(3) supplied with macOS versions 15.7.2 (Sequoia) and 26.1 (Tahoe) is unreliable when doing conversions from ISO-2022-JP to UTF-8 in multiple steps; t3900 reports this breakage: not ok 17 - ISO-2022-JP should be shown in UTF-8 now not ok 25 - ISO-2022-JP should be shown in UTF-8 now not ok 38 - commit --fixup into ISO-2022-JP from UTF-8 As a workaround, use libiconv from Homebrew, if available. Search it in its default locations: /opt/homebrew for Apple Silicon and /usr/local for macOS Intel, with the former taking precedence. Respect ICONVDIR if already set by the user, though. Helped-by: Koji Nakamaru <koji.nakamaru@gree.net> Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 363837a commit cee341e

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

Makefile

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,15 @@ include shared.mak
100100
# specify your own (or DarwinPort's) include directories and
101101
# library directories by defining CFLAGS and LDFLAGS appropriately.
102102
#
103-
# Define NO_HOMEBREW if you don't want to use gettext and msgfmt
104-
# installed by Homebrew.
103+
# Define NO_HOMEBREW if you don't want to use gettext, libiconv and
104+
# msgfmt installed by Homebrew.
105105
#
106106
# Define HOMEBREW_PREFIX if you have Homebrew installed in a non-default
107107
# location on macOS or on Linux and want to use it.
108108
#
109+
# Define USE_HOMEBREW_LIBICONV to link against libiconv installed by
110+
# Homebrew, if present.
111+
#
109112
# Define NO_APPLE_COMMON_CRYPTO if you are building on Darwin/Mac OS X
110113
# and do not want to use Apple's CommonCrypto library. This allows you
111114
# to provide your own OpenSSL library, for example from MacPorts.
@@ -1705,6 +1708,11 @@ endif
17051708
ifeq ($(shell test -x $(HOMEBREW_PREFIX)/opt/gettext/msgfmt && echo y),y)
17061709
MSGFMT = $(HOMEBREW_PREFIX)/opt/gettext/msgfmt
17071710
endif
1711+
ifdef USE_HOMEBREW_LIBICONV
1712+
ifeq ($(shell test -d $(HOMEBREW_PREFIX)/opt/libiconv && echo y),y)
1713+
ICONVDIR ?= $(HOMEBREW_PREFIX)/opt/libiconv
1714+
endif
1715+
endif
17081716
endif
17091717
endif
17101718

config.mak.uname

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ ifeq ($(uname_S),Darwin)
124124
# - MacOS 10.0.* and MacOS 10.1.0 = Darwin 1.*
125125
# - MacOS 10.x.* = Darwin (x+4).* for (1 <= x)
126126
# i.e. "begins with [15678] and a dot" means "10.4.* or older".
127+
DARWIN_MAJOR_VERSION = $(shell expr "$(uname_R)" : '\([0-9]*\)\.')
127128
ifeq ($(shell expr "$(uname_R)" : '[15678]\.'),2)
128129
OLD_ICONV = UnfortunatelyYes
129130
NO_APPLE_COMMON_CRYPTO = YesPlease
@@ -154,6 +155,9 @@ ifeq ($(uname_S),Darwin)
154155
else
155156
HOMEBREW_PREFIX = /usr/local
156157
endif
158+
ifeq ($(shell test "$(DARWIN_MAJOR_VERSION)" -ge 24 && echo 1),1)
159+
USE_HOMEBREW_LIBICONV = UnfortunatelyYes
160+
endif
157161

158162
# The builtin FSMonitor on MacOS builds upon Simple-IPC. Both require
159163
# Unix domain sockets and PThreads.

0 commit comments

Comments
 (0)