Re: [PATCH v2 1/2] Makefile: add NO_HOMEBREW
From: René Scharfe <hidden>
Date: 2025-12-14 11:13:48
On 12/14/25 8:13 AM, Junio C Hamano wrote:
Torsten Bögershausen [off-list ref] writes:quoted
On Sat, Dec 13, 2025 at 07:42:38PM +0100, René Scharfe wrote:quoted
Allow disabling the use of Homebrew on macOS, or Linux for that matter, like we already do for other package sources, MacPorts and Fink in particular. This is useful for packagers, or anyone else who wants to control dependencies.Good.quoted
Suggested-by: Carlo Marcelo Arenas Belón <redacted> Suggested-by: Torsten Bögershausen <redacted> Signed-off-by: René Scharfe <redacted> --- Makefile | 17 +++++++++++++++++ config.mak.uname | 11 +++++------ 2 files changed, 22 insertions(+), 6 deletions(-)diff --git a/Makefile b/Makefile index 6fc322ff88..dbd2760d18 100644 --- a/Makefile +++ b/Makefile@@ -100,6 +100,9 @@ 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 have Homebrew and don't want Git to link +# against libraries installed by it. +#Goodquoted
# 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 +1695,20 @@ ifeq ($(uname_S),Darwin) PTHREAD_LIBS = endif +ifndef NO_HOMEBREW + ifdef HOMEBREW_PREFIXQuestion from a homebrew newbie, kind of: Where do the HOMEBREW_PREFIX (and other HOMEBREW...) come from, and what do they do ?I understand these are purely _our_ thing. HOMEBREW_PREFIX and HOMEBREW_GETTEXT_PREFIX are set in config.mak.uname (added in this patch).
Right.
I presume that those who installed homebrew at non-default location and want to use homebrew would not set NO_HOMEBREW and set HOMEBREW_PREFIX to the location they installed their homebrew which would be different from the default set in config.mak.uname. Those who have homebrew installed at default location.quoted
Running git grep HOMEBREW gives ci/install-dependencies.sh: export HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1 Whould it make sense to have a few words here as a comment ?Yeah, like # Define HOMEBREW_PREFIX to point at an appropriate directory, iff # you want to use homebrew installed at a non-standard location. # /opt/homebrew on Apple Silicon macOS and at /usr/local on Intel # macOS are the standard locations (and you do not have to define # this variable yourself). perhaps? Similarly for other variables.
Sounds useful, but before this can become a documented feature it deserves more research and refinement. The current code uses what it can find in an ad-hoc manner, and the patches just extend this behavior to libiconv. A user-settable HOMEBREW_PREFIX would require a more principled approach, so that overriding it affects the search for gettext and libiconv. I guess that would look like this in config.mak.uname: ifeq ($(uname_S),Darwin) ifeq ($(uname_M),arm64) HOMEBREW_PREFIX = /opt/homebrew else HOMEBREW_PREFIX = /usr/local endif USE_HOMEBREW_GETTEXT = IfAvailable USE_HOMEBREW_MSGFMT = IfAvailable USE_HOMEBREW_LIBICONV = IfAvailable endif ... and in Makefile: ifndef NO_HOMEBREW ifdef HOMEBREW_PREFIX ifdef USE_HOMEBREW_GETTEXT # magic! endif ifdef USE_HOMEBREW_MSGFMT # more magic! endif ifdef USE_HOMEBREW_LIBICONV ifeq ($(shell test -d $(HOMEBREW_PREFIX)/opt/libiconv && echo y),y) ICONVDIR ?= $(HOMEBREW_PREFIX)/opt/libiconv endif endif endif Perhaps the magic parts just need to check for the existence of $(HOMEBREW_PREFIX)/opt/gettext and use that, but the current code is more complicated for some reason. René