utf8.c: enable workaround for iconv under macOS 14/15

The previous commit introduced a workaround in utf8.c to deal with broken iconv implementations. It is enabled when a MacOS version is used that has a buggy iconv library and there is no external library provided (and linked against) from neither MacPorts nor Homebrew nor Fink. For Homebrew, MacPorts and Fink we check if libiconv exist. Introduce 2 new macros: HAS_GOOD_LIBICONV and NEEDS_GOOD_LIBICONV. For Homebrew HAS_GOOD_LIBICONV is set when the libiconv directory exist. MacPorts can be installed with or without libiconv, so check if libiconv.dylib exists (which is a softlink) Fink compiles and installs libiconv by default. Note that a fresh installation of Fink now defaults to /opt/sw. Older versions used /sw as default, so leave the check and setting of BASIC_CFLAGS and BASIC_LDFLAGS as is. For the new default check for the existance of /opt/sw as well. Add a check for /opt/sw/lib/libiconv.dylib which sets HAS_GOOD_LIBICONV Signed-off-by: Torsten Bögershausen <tboegi@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Torsten Bögershausen committed Jan 12, 2026 at 17:25 UTC d28124151851e42a3bb92963f5b747ad843f33e0
2 files changed +17
Makefile
+16
@@ -1687,11 +1687,21 @@ ifeq ($(uname_S),Darwin)
1687 BASIC_CFLAGS += -I/sw/include
1688 BASIC_LDFLAGS += -L/sw/lib
1689 endif
1690 + ifeq ($(shell test -d /opt/sw/lib && echo y),y)
1691 + BASIC_CFLAGS += -I/opt/sw/include
1692 + BASIC_LDFLAGS += -L/opt/sw/lib
1693 + ifeq ($(shell test -e /opt/sw/lib/libiconv.dylib && echo y),y)
1694 + HAS_GOOD_LIBICONV = Yes
1695 + endif
1696 + endif
1697 endif
1698 ifndef NO_DARWIN_PORTS
1699 ifeq ($(shell test -d /opt/local/lib && echo y),y)
1700 BASIC_CFLAGS += -I/opt/local/include
1701 BASIC_LDFLAGS += -L/opt/local/lib
1702 + ifeq ($(shell test -e /opt/local/lib/libiconv.dylib && echo y),y)
1703 + HAS_GOOD_LIBICONV = Yes
1704 + endif
1705 endif
1706 endif
1707 ifndef NO_APPLE_COMMON_CRYPTO
@@ -1714,6 +1724,7 @@ endif
1724 ifdef USE_HOMEBREW_LIBICONV
1725 ifeq ($(shell test -d $(HOMEBREW_PREFIX)/opt/libiconv && echo y),y)
1726 ICONVDIR ?= $(HOMEBREW_PREFIX)/opt/libiconv
1727 + HAS_GOOD_LIBICONV = Yes
1728 endif
1729 endif
1730 endif
@@ -1859,6 +1870,11 @@ ifndef NO_ICONV
1870 endif
1871 EXTLIBS += $(ICONV_LINK) -liconv
1872 endif
1873 + ifdef NEEDS_GOOD_LIBICONV
1874 + ifndef HAS_GOOD_LIBICONV
1875 + BASIC_CFLAGS += -DICONV_RESTART_RESET
1876 + endif
1877 + endif
1878 endif
1879 ifdef ICONV_OMITS_BOM
1880 BASIC_CFLAGS += -DICONV_OMITS_BOM
config.mak.uname
+1
@@ -157,6 +157,7 @@ ifeq ($(uname_S),Darwin)
157 endif
158 ifeq ($(shell test "$(DARWIN_MAJOR_VERSION)" -ge 24 && echo 1),1)
159 USE_HOMEBREW_LIBICONV = UnfortunatelyYes
160 + NEEDS_GOOD_LIBICONV = UnfortunatelyYes
161 endif
162
163 # The builtin FSMonitor on MacOS builds upon Simple-IPC. Both require