[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