]> git.ipfire.org Git - thirdparty/git.git/commitdiff
macOS: make Homebrew use configurable
authorRené Scharfe <l.s.r@web.de>
Wed, 24 Dec 2025 08:02:45 +0000 (09:02 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 25 Dec 2025 07:43:09 +0000 (16:43 +0900)
On macOS we opportunistically use Homebrew-installed versions of
gettext(3) and msgfmt(1).  Make that behavior configurable by providing
make variables to disable Homebrew usage (NO_HOMEBREW) and to allow
using a non-default installation location (HOMEBREW_PREFIX).

Include and link only the gettext keg via the symlink opt/gettext
pointing to its installed version instead of using the Homebrew prefix.
This is simpler and prevents accidentally including other libraries.

Suggested-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Suggested-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Makefile
config.mak.uname

index 7e0f77e2988e3b101dbf008a11b35cd0780d1aef..e4cbe24ad594aca90321483695b6b1d05211e3aa 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -100,6 +100,12 @@ 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 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 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.
@@ -1690,6 +1696,18 @@ 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
+endif
+endif
+
 ifdef NO_LIBGEN_H
        COMPAT_CFLAGS += -DNO_LIBGEN_H
        COMPAT_OBJS += compat/basename.o
index 1691c6ae6e01e355123e82be072b515429109dd3..db2a92275168f2a36353bbb982d0b2b47a293712 100644 (file)
@@ -149,28 +149,10 @@ 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
 
        # The builtin FSMonitor on MacOS builds upon Simple-IPC.  Both require