]> git.ipfire.org Git - thirdparty/git.git/commitdiff
utf8.c: enable workaround for iconv under macOS 14/15
authorTorsten Bögershausen <tboegi@web.de>
Mon, 12 Jan 2026 16:25:53 +0000 (17:25 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 12 Jan 2026 20:00:39 +0000 (12:00 -0800)
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>
Makefile
config.mak.uname

index b7eba509c6a0ca3a8346c81e89edc46d018fbe02..8aa489f3b6812f0848772e790887121e837dbe30 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1687,11 +1687,21 @@ ifeq ($(uname_S),Darwin)
                        BASIC_CFLAGS += -I/sw/include
                        BASIC_LDFLAGS += -L/sw/lib
                 endif
+                ifeq ($(shell test -d /opt/sw/lib && echo y),y)
+                       BASIC_CFLAGS += -I/opt/sw/include
+                       BASIC_LDFLAGS += -L/opt/sw/lib
+                       ifeq ($(shell test -e /opt/sw/lib/libiconv.dylib && echo y),y)
+                               HAS_GOOD_LIBICONV = Yes
+                       endif
+                endif
         endif
         ifndef NO_DARWIN_PORTS
                 ifeq ($(shell test -d /opt/local/lib && echo y),y)
                        BASIC_CFLAGS += -I/opt/local/include
                        BASIC_LDFLAGS += -L/opt/local/lib
+                       ifeq ($(shell test -e /opt/local/lib/libiconv.dylib && echo y),y)
+                               HAS_GOOD_LIBICONV = Yes
+                       endif
                 endif
         endif
         ifndef NO_APPLE_COMMON_CRYPTO
@@ -1714,6 +1724,7 @@ endif
 ifdef USE_HOMEBREW_LIBICONV
 ifeq ($(shell test -d $(HOMEBREW_PREFIX)/opt/libiconv && echo y),y)
        ICONVDIR ?= $(HOMEBREW_PREFIX)/opt/libiconv
+       HAS_GOOD_LIBICONV = Yes
 endif
 endif
 endif
@@ -1859,6 +1870,11 @@ ifndef NO_ICONV
                 endif
                EXTLIBS += $(ICONV_LINK) -liconv
         endif
+        ifdef NEEDS_GOOD_LIBICONV
+        ifndef HAS_GOOD_LIBICONV
+                BASIC_CFLAGS += -DICONV_RESTART_RESET
+        endif
+        endif
 endif
 ifdef ICONV_OMITS_BOM
        BASIC_CFLAGS += -DICONV_OMITS_BOM
index 38b35af366d5fdc5f33fd011fb9f37a56d761df3..3c35ae33a3c0c074139783ef00d640b157ec23db 100644 (file)
@@ -157,6 +157,7 @@ ifeq ($(uname_S),Darwin)
         endif
         ifeq ($(shell test "$(DARWIN_MAJOR_VERSION)" -ge 24 && echo 1),1)
                USE_HOMEBREW_LIBICONV = UnfortunatelyYes
+               NEEDS_GOOD_LIBICONV = UnfortunatelyYes
         endif
 
        # The builtin FSMonitor on MacOS builds upon Simple-IPC.  Both require