git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 1/2] macOS: make Homebrew use configurable

From
René Scharfe <l.s.r@web.de>
Date
Dec 16, 2025, 18:53 UTC
Message-ID
<98695ef0-b6bc-4929-8581-2ecb894cd604@web.de>
In-Reply-To
<53690064-1c98-40e9-8b9a-7ba6bee63703@web.de>

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), to allow using a non-default installation location (HOMEBREW_PREFIX), and to control the use of the individual items (USE_HOMEBREW_GETTEXT, USE_HOMEBREW_MSGFMT).

Precisely Link the gettext keg (the opt/gettext subdirectory) instead of risking to link random other Homebrew-installed libraries as well.

Signed-off-by: René Scharfe <l.s.r@web.de>
---
 Makefile         | 28 ++++++++++++++++++++++++++++
 config.mak.uname | 28 ++++++----------------------
 2 files changed, 34 insertions(+), 22 deletions(-)
diff --git a/Makefile b/Makefile
index cf3f4b585f..a97e9e4d7d 100644
--- a/Makefile
+++ b/Makefile
@@ -100,6 +100,18 @@ 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 libraries and commands
+# 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_GETTEXT to link against the gettext library
+# installed by Homebrew, if present.
+#
+# Define USE_HOMEBREW_MSGFMT to use the msgfmt command installed by
+# Homebrew to compile message catalogs during build, 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.
@@ -1692,6 +1704,22 @@ ifeq ($(uname_S),Darwin)
 	PTHREAD_LIBS =
 endif
 
+ifndef NO_HOMEBREW
+ifdef HOMEBREW_PREFIX
+ifdef USE_HOMEBREW_GETTEXT
+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
+endif
+ifdef USE_HOMEBREW_MSGFMT
+ifeq ($(shell test -x $(HOMEBREW_PREFIX)/opt/gettext/msgfmt && echo y),y)
+	MSGFMT = $(HOMEBREW_PREFIX)/opt/gettext/msgfmt
+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..54e3a26649 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -149,29 +149,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
+	USE_HOMEBREW_GETTEXT = YesPlease
+	USE_HOMEBREW_MSGFMT = YesPlease
 
 	# The builtin FSMonitor on MacOS builds upon Simple-IPC.  Both require
 	# Unix domain sockets and PThreads.
-- 
2.52.0
Previous: René ScharfeNext: René Scharfe
Message 39 of 45 in “t3900 failure on macOS, iconv(3) broken?”
  1. René ScharfeDec 8, 2025
  2. Koji NakamaruDec 9, 2025
  3. Yee Cheng ChinDec 9, 2025
  4. Collin FunkDec 9, 2025
  5. Torsten BögershausenDec 9, 2025
  6. René ScharfeDec 9, 2025
  7. Torsten BögershausenDec 9, 2025
  8. René ScharfeDec 9, 2025
  9. config.mak.uname: use iconv from Homebrew on macOSRené Scharfe, Dec 9, 2025
  10. Yee Cheng ChinDec 9, 2025
  11. René ScharfeDec 9, 2025
  12. Carlo Marcelo Arenas BelónDec 10, 2025
  13. René ScharfeDec 10, 2025
  14. Junio C HamanoDec 11, 2025
  15. Carlo Marcelo Arenas BelónDec 11, 2025
  16. Junio C HamanoDec 12, 2025
  17. René ScharfeDec 12, 2025
  18. Carlo Marcelo Arenas BelónDec 12, 2025
  19. Re* [PATCH] config.mak.uname: use iconv from Homebrew on macOSJunio C Hamano, Dec 12, 2025
  20. René ScharfeDec 12, 2025
  21. Junio C HamanoDec 12, 2025
  22. Torsten BögershausenDec 10, 2025
  23. René ScharfeDec 10, 2025
  24. brian m. carlsonDec 10, 2025
  25. Junio C HamanoDec 11, 2025
  26. Junio C HamanoDec 11, 2025
  27. René ScharfeDec 11, 2025
  28. Junio C HamanoDec 12, 2025
  29. René ScharfeDec 12, 2025
  30. 2/2 config.mak.uname: use iconv from Homebrew on macOSRené Scharfe, Dec 13, 2025
  31. 1/2 Makefile: add NO_HOMEBREWRené Scharfe, Dec 13, 2025
  32. Torsten BögershausenDec 14, 2025
  33. Junio C HamanoDec 14, 2025
  34. Torsten BögershausenDec 14, 2025
  35. Junio C HamanoDec 14, 2025
  36. René ScharfeDec 14, 2025
  37. Junio C HamanoDec 14, 2025
  38. René ScharfeDec 16, 2025
  39. 1/2 macOS: make Homebrew use configurableRené Scharfe, Dec 16, 2025
  40. René ScharfeDec 16, 2025
  41. Torsten BögershausenDec 16, 2025
  42. 2/2 macOS: use iconv from Homebrew if presentRené Scharfe, Dec 16, 2025
  43. 0/2 macOS: use iconv from Homebrew if needed and presentRené Scharfe, Dec 24, 2025
  44. 2/2 macOS: use iconv from Homebrew if needed and presentRené Scharfe, Dec 24, 2025
  45. 1/2 macOS: make Homebrew use configurableRené Scharfe, Dec 24, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.