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

[PATCH v3] osxkeychain: define build targets in the top-level Makefile.

From
Koji Nakamaru via GitGitGadget <gitgitgadget@gmail.com>
Date
Feb 18, 2026, 05:14 UTC
Message-ID
<pull.2046.v3.git.1771391650713.gitgitgadget@gmail.com>
In-Reply-To
<pull.2046.v2.git.1770775169908.gitgitgadget@gmail.com>
From: Koji Nakamaru <koji.nakamaru@gree.net>

The fix for git-credential-osxkeychain in 4580bcd235 (osxkeychain: avoid incorrectly skipping store operation) introduced linkage with libgit.a, and its Makefile was adjusted accordingly. However, the build fails as of 864f55e190 because several macOS-specific refinements were applied to the top-level Makefile and config.mak.uname, such as:

  - 363837afe7 (macOS: make Homebrew use configurable, 2025-12-24)
  - cee341e9dd (macOS: use iconv from Homebrew if needed and present,
    2025-12-24)
  - d281241518 (utf8.c: enable workaround for iconv under macOS 14/15,
    2026-01-12)

Since libgit.a and its corresponding header files depend on many flags defined in the top-level Makefile, these flags must be consistently defined when building git-credential-osxkeychain. Continuing to manually adjust the git-credential-osxkeychain Makefile is cumbersome and fragile.

Define the build targets for git-credential-osxkeychain in the top-level Makefile and modify its local Makefile to simply rely on those targets.

Helped-by: Junio C Hamano <gitster@pobox.com>
Reported-by: D. Ben Knoble <ben.knoble@gmail.com>
Signed-off-by: Koji Nakamaru <koji.nakamaru@gree.net>
---
    osxkeychain: define build targets in the top-level Makefile.
    
    Changes since v2:
    
     * Squash the double spaces after "-C" into one white.
     * Add explicit mkdir -p contrib/credential/osxkeychain/.depend for
       older versions of clang.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2046%2FKojiNakamaru%2Ffix%2Fosxkeychain-makefile-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2046/KojiNakamaru/fix/osxkeychain-makefile-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/2046
Range-diff vs v2:
 1:  8c5d75f0c6 ! 1:  25a66e1b7d osxkeychain: define build targets in the top-level Makefile.
     @@ Commit message
          Makefile and modify its local Makefile to simply rely on those targets.
      
          Helped-by: Junio C Hamano <gitster@pobox.com>
     +    Reported-by: D. Ben Knoble <ben.knoble@gmail.com>
          Signed-off-by: Koji Nakamaru <koji.nakamaru@gree.net>
      
       ## Makefile ##
     @@ Makefile: $(LIBGIT_HIDDEN_EXPORT): $(LIBGIT_PARTIAL_EXPORT)
      +		$(filter %.o,$^) $(LIB_FILE) $(EXTLIBS) -framework Security -framework CoreFoundation
      +
      +contrib/credential/osxkeychain/git-credential-osxkeychain.o: contrib/credential/osxkeychain/git-credential-osxkeychain.c GIT-CFLAGS
     ++	@mkdir -p contrib/credential/osxkeychain/.depend
      +	$(QUIET_LINK)$(CC) -o $@ -c $(dep_args) $(compdb_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
      +
      +install-git-credential-osxkeychain: contrib/credential/osxkeychain/git-credential-osxkeychain
     @@ contrib/credential/osxkeychain/Makefile
      --include ../../../config.mak.autogen
      --include ../../../config.mak
      +git-credential-osxkeychain:
     -+	$(MAKE) -C  ../../.. contrib/credential/osxkeychain/git-credential-osxkeychain
     ++	$(MAKE) -C ../../.. contrib/credential/osxkeychain/git-credential-osxkeychain
       
      -ifdef ZLIB_NG
      -	BASIC_CFLAGS += -DHAVE_ZLIB_NG
     @@ contrib/credential/osxkeychain/Makefile
      -../../../libgit.a:
      -	cd ../../..; make libgit.a
      +install:
     -+	$(MAKE) -C  ../../.. install-git-credential-osxkeychain
     ++	$(MAKE) -C ../../.. install-git-credential-osxkeychain
       
       clean:
      -	$(RM) git-credential-osxkeychain git-credential-osxkeychain.o
     -+	$(MAKE) -C  ../../.. clean-git-credential-osxkeychain
     ++	$(MAKE) -C ../../.. clean-git-credential-osxkeychain
       
      -.PHONY: all install clean
      +.PHONY: all git-credential-osxkeychain install clean
 Makefile                                | 18 +++++++
 contrib/credential/osxkeychain/Makefile | 65 +++----------------------
 2 files changed, 24 insertions(+), 59 deletions(-)
diff --git a/Makefile b/Makefile
index 4ac44331ea..1c2019a4cb 100644
--- a/Makefile
+++ b/Makefile
@@ -4060,3 +4060,21 @@ $(LIBGIT_HIDDEN_EXPORT): $(LIBGIT_PARTIAL_EXPORT)
 
 contrib/libgit-sys/libgitpub.a: $(LIBGIT_HIDDEN_EXPORT)
 	$(AR) $(ARFLAGS) $@ $^
+
+contrib/credential/osxkeychain/git-credential-osxkeychain: contrib/credential/osxkeychain/git-credential-osxkeychain.o $(LIB_FILE) GIT-LDFLAGS
+	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) \
+		$(filter %.o,$^) $(LIB_FILE) $(EXTLIBS) -framework Security -framework CoreFoundation
+
+contrib/credential/osxkeychain/git-credential-osxkeychain.o: contrib/credential/osxkeychain/git-credential-osxkeychain.c GIT-CFLAGS
+	@mkdir -p contrib/credential/osxkeychain/.depend
+	$(QUIET_LINK)$(CC) -o $@ -c $(dep_args) $(compdb_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
+
+install-git-credential-osxkeychain: contrib/credential/osxkeychain/git-credential-osxkeychain
+	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
+	$(INSTALL) $(INSTALL_STRIP) $< '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
+
+.PHONY: clean-git-credential-osxkeychain
+clean-git-credential-osxkeychain:
+	$(RM) \
+		contrib/credential/osxkeychain/git-credential-osxkeychain \
+		contrib/credential/osxkeychain/git-credential-osxkeychain.o
diff --git a/contrib/credential/osxkeychain/Makefile b/contrib/credential/osxkeychain/Makefile
index c68445b82d..219b0d7f49 100644
--- a/contrib/credential/osxkeychain/Makefile
+++ b/contrib/credential/osxkeychain/Makefile
@@ -1,66 +1,13 @@
 # The default target of this Makefile is...
 all:: git-credential-osxkeychain
 
-include ../../../config.mak.uname
--include ../../../config.mak.autogen
--include ../../../config.mak
+git-credential-osxkeychain:
+	$(MAKE) -C ../../.. contrib/credential/osxkeychain/git-credential-osxkeychain
 
-ifdef ZLIB_NG
-	BASIC_CFLAGS += -DHAVE_ZLIB_NG
-        ifdef ZLIB_NG_PATH
-		BASIC_CFLAGS += -I$(ZLIB_NG_PATH)/include
-		EXTLIBS += $(call libpath_template,$(ZLIB_NG_PATH)/$(lib))
-        endif
-	EXTLIBS += -lz-ng
-else
-        ifdef ZLIB_PATH
-		BASIC_CFLAGS += -I$(ZLIB_PATH)/include
-		EXTLIBS += $(call libpath_template,$(ZLIB_PATH)/$(lib))
-        endif
-	EXTLIBS += -lz
-endif
-ifndef NO_ICONV
-        ifdef NEEDS_LIBICONV
-                ifdef ICONVDIR
-			BASIC_CFLAGS += -I$(ICONVDIR)/include
-			ICONV_LINK = $(call libpath_template,$(ICONVDIR)/$(lib))
-                else
-			ICONV_LINK =
-                endif
-                ifdef NEEDS_LIBINTL_BEFORE_LIBICONV
-			ICONV_LINK += -lintl
-                endif
-		EXTLIBS += $(ICONV_LINK) -liconv
-        endif
-endif
-ifndef LIBC_CONTAINS_LIBINTL
-	EXTLIBS += -lintl
-endif
-
-prefix ?= /usr/local
-gitexecdir ?= $(prefix)/libexec/git-core
-
-CC ?= gcc
-CFLAGS ?= -g -O2 -Wall -I../../.. $(BASIC_CFLAGS)
-LDFLAGS ?= $(BASIC_LDFLAGS) $(EXTLIBS)
-INSTALL ?= install
-RM ?= rm -f
-
-%.o: %.c
-	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
-
-git-credential-osxkeychain: git-credential-osxkeychain.o ../../../libgit.a
-	$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) \
-		-framework Security -framework CoreFoundation
-
-install: git-credential-osxkeychain
-	$(INSTALL) -d -m 755 $(DESTDIR)$(gitexecdir)
-	$(INSTALL) -m 755 $< $(DESTDIR)$(gitexecdir)
-
-../../../libgit.a:
-	cd ../../..; make libgit.a
+install:
+	$(MAKE) -C ../../.. install-git-credential-osxkeychain
 
 clean:
-	$(RM) git-credential-osxkeychain git-credential-osxkeychain.o
+	$(MAKE) -C ../../.. clean-git-credential-osxkeychain
 
-.PHONY: all install clean
+.PHONY: all git-credential-osxkeychain install clean

base-commit: 864f55e1906897b630333675a52874c0fec2a45c
-- 
gitgitgadget
Previous: Koji NakamaruNext: Kristoffer Haugsbakk
Message 14 of 20 in “osxkeychain: define build targets in the top-level Makefile.”
  1. osxkeychain: define build targets in the top-level Makefile.Koji Nakamaru via GitGitGadget, Feb 10, 2026
  2. Junio C HamanoFeb 10, 2026
  3. Koji NakamaruFeb 10, 2026
  4. osxkeychain: define build targets in the top-level Makefile.Koji Nakamaru via GitGitGadget, Feb 11, 2026
  5. Junio C HamanoFeb 11, 2026
  6. Koji NakamaruFeb 11, 2026
  7. D. Ben KnobleFeb 16, 2026
  8. Koji NakamaruFeb 17, 2026
  9. D. Ben KnobleFeb 17, 2026
  10. D. Ben KnobleFeb 17, 2026
  11. Koji NakamaruFeb 17, 2026
  12. D. Ben KnobleFeb 17, 2026
  13. Koji NakamaruFeb 18, 2026
  14. osxkeychain: define build targets in the top-level Makefile.Koji Nakamaru via GitGitGadget, Feb 18, 2026
  15. Kristoffer HaugsbakkFeb 18, 2026
  16. Koji NakamaruFeb 18, 2026
  17. Junio C HamanoFeb 18, 2026
  18. Koji NakamaruFeb 18, 2026
  19. Junio C HamanoFeb 19, 2026
  20. osxkeychain: define build targets in the top-level Makefile.Koji Nakamaru via GitGitGadget, Feb 20, 2026

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.