public inbox for git@vger.kernel.org 
 help / color / mirror / Atom feed
From: "Harald Nordgren via GitGitGadget" <gitgitgadget@gmail•com>
To: git@vger•kernel.org
Cc: Harald Nordgren <haraldnordgren@gmail•com>,
	Harald Nordgren <haraldnordgren@gmail•com>
Subject: [PATCH v2] Makefile: dedup archives in $(LIBS) so link recipes don't repeat them
Date: Thu, 04 Jun 2026 22:03:42 +0000	[thread overview]
Message-ID: <pull.2314.v2.git.git.1780610623006.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2314.git.git.1780269406949.gitgitgadget@gmail.com>

From: Harald Nordgren <haraldnordgren@gmail•com>

A handful of link recipes listed archive files twice: once explicitly
via $(filter %.a,$^) and again implicitly through $(LIBS), which
expanded to $(filter-out %.o,$(GITLIBS)) $(EXTLIBS). On macOS the
linker warned about the duplicates:

  ld: warning: ignoring duplicate libraries: 'libgit.a', 'target/release/libgitcore.a'

Redefine $(LIBS) to list archive prerequisites from $^ first, then
the rest of the library list with those archives filtered out so each
appears only once.

Signed-off-by: Harald Nordgren <haraldnordgren@gmail•com>
---
    Makefile: drop duplicate %.a from test-helper link rule
    
    Redefine $(LIBS) to list archive prerequisites from $^ first, then the
    rest of the library list to avoid brittleness in the future.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2314%2FHaraldNordgren%2Fmakefile-test-helper-dedup-libs-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2314/HaraldNordgren/makefile-test-helper-dedup-libs-v2
Pull-Request: https://github.com/git/git/pull/2314

Range-diff vs v1:

 1:  f6166450b0 ! 1:  0ef442ea05 Makefile: drop duplicate %.a from link recipes
     @@ Metadata
      Author: Harald Nordgren <haraldnordgren@gmail•com>
      
       ## Commit message ##
     -    Makefile: drop duplicate %.a from link recipes
     +    Makefile: dedup archives in $(LIBS) so link recipes don't repeat them
      
     -    Three link recipes list archive files twice on the link line: once
     -    via $(filter %.a,$^) and again through $(LIBS), which expands to
     -    $(filter-out %.o,$(GITLIBS)) $(EXTLIBS). On macOS the linker warns
     -    about the duplicates:
     +    A handful of link recipes listed archive files twice: once explicitly
     +    via $(filter %.a,$^) and again implicitly through $(LIBS), which
     +    expanded to $(filter-out %.o,$(GITLIBS)) $(EXTLIBS). On macOS the
     +    linker warned about the duplicates:
      
            ld: warning: ignoring duplicate libraries: 'libgit.a', 'target/release/libgitcore.a'
      
     -    Drop the redundant filter from the test-helper, fuzz-program, and
     -    unit-test recipes so they match the pattern used by other link
     -    recipes in the file.
     +    Redefine $(LIBS) to list archive prerequisites from $^ first, then
     +    the rest of the library list with those archives filtered out so each
     +    appears only once.
      
          Signed-off-by: Harald Nordgren <haraldnordgren@gmail•com>
      
       ## Makefile ##
     +@@ Makefile: endif
     + #
     + # where we use it as a dependency. Since we also pull object files
     + # from the dependency list, that would make each entry appear twice.
     +-LIBS = $(filter-out %.o, $(GITLIBS)) $(EXTLIBS)
     ++# Archives from $^ come first, then the rest with those archives
     ++# filtered out so each appears only once.
     ++LIBS = $(filter %.a,$^) $(filter-out $(filter %.a,$^),$(filter-out %.o,$(GITLIBS)) $(EXTLIBS))
     + 
     + BASIC_CFLAGS += $(COMPAT_CFLAGS)
     + LIB_OBJS += $(COMPAT_OBJS)
      @@ Makefile: perf: all
       t/helper/test-tool$X: $(patsubst %,t/helper/%,$(TEST_BUILTINS_OBJS)) $(UNIT_TEST_DIR)/test-lib.o
       


 Makefile | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/Makefile b/Makefile
index b31ecb0756..a828a66f28 100644
--- a/Makefile
+++ b/Makefile
@@ -2503,7 +2503,9 @@ endif
 #
 # where we use it as a dependency. Since we also pull object files
 # from the dependency list, that would make each entry appear twice.
-LIBS = $(filter-out %.o, $(GITLIBS)) $(EXTLIBS)
+# Archives from $^ come first, then the rest with those archives
+# filtered out so each appears only once.
+LIBS = $(filter %.a,$^) $(filter-out $(filter %.a,$^),$(filter-out %.o,$(GITLIBS)) $(EXTLIBS))
 
 BASIC_CFLAGS += $(COMPAT_CFLAGS)
 LIB_OBJS += $(COMPAT_OBJS)
@@ -3392,7 +3394,7 @@ perf: all
 t/helper/test-tool$X: $(patsubst %,t/helper/%,$(TEST_BUILTINS_OBJS)) $(UNIT_TEST_DIR)/test-lib.o
 
 t/helper/test-%$X: t/helper/test-%.o GIT-LDFLAGS $(GITLIBS)
-	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(filter %.a,$^) $(LIBS)
+	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
 
 check-sha1:: t/helper/test-tool$X
 	t/helper/test-sha1.sh
@@ -4015,13 +4017,13 @@ fuzz-all: $(FUZZ_PROGRAMS)
 $(FUZZ_PROGRAMS): %: %.o oss-fuzz/dummy-cmd-main.o $(GITLIBS) GIT-LDFLAGS
 	$(QUIET_LINK)$(FUZZ_CXX) $(FUZZ_CXXFLAGS) -o $@ $(ALL_LDFLAGS) \
 		-Wl,--allow-multiple-definition \
-		$(filter %.o,$^) $(filter %.a,$^) $(LIBS) $(LIB_FUZZING_ENGINE)
+		$(filter %.o,$^) $(LIBS) $(LIB_FUZZING_ENGINE)
 
 $(UNIT_TEST_PROGS): $(UNIT_TEST_BIN)/%$X: $(UNIT_TEST_DIR)/%.o $(UNIT_TEST_OBJS) \
 	$(GITLIBS) GIT-LDFLAGS
 	$(call mkdir_p_parent_template)
 	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) \
-		$(filter %.o,$^) $(filter %.a,$^) $(LIBS)
+		$(filter %.o,$^) $(LIBS)
 
 GIT-TEST-SUITES: FORCE
 	@FLAGS='$(CLAR_TEST_SUITES)'; \

base-commit: 9ac3f193c05c2237e2b14ebaa1149e9fc8a1abe0
-- 
gitgitgadget

      parent reply	other threads:[~2026-06-04 22:03 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-31 23:16 [PATCH] Makefile: drop duplicate %.a from link recipes Harald Nordgren via GitGitGadget
2026-06-04  0:33 ` Junio C Hamano
2026-06-04  7:06   ` Harald Nordgren
2026-06-04  7:15     ` Harald Nordgren
2026-06-04 22:03 ` Harald Nordgren via GitGitGadget [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=pull.2314.v2.git.git.1780610623006.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail$(echo .)com \
    --cc=git@vger$(echo .)kernel.org \
    --cc=haraldnordgren@gmail$(echo .)com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox