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

Re: [PATCH v2] Makefile: dedup archives in $(LIBS) so link recipes don't repeat them

From
Harald Nordgren <haraldnordgren@gmail.com>
Date
Jun 19, 2026, 08:00 UTC
Message-ID
<CAHwyqnWBb65dC+qSYTw9SKdufjibUmTm065feM5D9906H5SQ4w@mail.gmail.com>
In-Reply-To
<pull.2314.v2.git.git.1780610623006.gitgitgadget@gmail.com>
Hi!

I think this would be quite nice to fix for all the macOS developers (I don't know how many we have who are active on this list), but when running repeated tests it does take up some space on the terminal:

```` ❯ git rebase --keep-base -x 'make -s && cd t && prove -j8 t345?-history*.sh && echo'

Executing: make -s && cd t && prove -j8 t345?-history*.sh && echo
GIT_VERSION=2.55.0.rc1.20.g1e31474ef6
ld: warning: ignoring duplicate libraries: 'libgit.a',
'target/release/libgitcore.a'
ld: warning: ignoring duplicate libraries: 'libgit.a',
'target/release/libgitcore.a'
t3450-history.sh ......... ok
t3453-history-fixup.sh ... ok
t3451-history-reword.sh .. ok
t3452-history-split.sh ... ok
All tests successful.
Files=4, Tests=69,  7 wallclock secs ( 0.02 usr  0.01 sys +  4.14 cusr
 5.39 csys =  9.56 CPU)
Result: PASS
Executing: make -s && cd t && prove -j8 t345?-history*.sh && echo
GIT_VERSION=2.55.0.rc1.21.g498da64046
ld: warning: ignoring duplicate libraries: 'libgit.a',
'target/release/libgitcore.a'
ld: warning: ignoring duplicate libraries: 'libgit.a',
'target/release/libgitcore.a'
t3450-history.sh ......... ok
t3453-history-fixup.sh ... ok
t3451-history-reword.sh .. ok
t3452-history-split.sh ... ok
All tests successful.
Files=4, Tests=69,  7 wallclock secs ( 0.02 usr  0.01 sys +  4.16 cusr
 5.41 csys =  9.60 CPU)
Result: PASS
Executing: make -s && cd t && prove -j8 t345?-history*.sh && echo
GIT_VERSION=2.55.0.rc1.22.g0050368e96
ld: warning: ignoring duplicate libraries: 'libgit.a',
'target/release/libgitcore.a'
ld: warning: ignoring duplicate libraries: 'libgit.a',
'target/release/libgitcore.a'
t3450-history.sh ......... ok
t3455-history-squash.sh .. ok
t3453-history-fixup.sh ... ok
t3451-history-reword.sh .. ok
t3452-history-split.sh ... ok
All tests successful.
Files=5, Tests=86,  7 wallclock secs ( 0.03 usr  0.01 sys +  4.89 cusr
 6.36 csys = 11.29 CPU)
Result: PASS
Executing: make -s && cd t && prove -j8 t345?-history*.sh && echo
GIT_VERSION=2.55.0.rc1.23.gb86b93bda1
ld: warning: ignoring duplicate libraries: 'libgit.a',
'target/release/libgitcore.a'
ld: warning: ignoring duplicate libraries: 'libgit.a',
'target/release/libgitcore.a'
t3450-history.sh ......... ok
t3455-history-squash.sh .. ok
t3453-history-fixup.sh ... ok
t3451-history-reword.sh .. ok
t3452-history-split.sh ... ok
All tests successful.
Files=5, Tests=88,  7 wallclock secs ( 0.03 usr  0.01 sys +  5.01 cusr
 6.54 csys = 11.59 CPU)
Result: PASS

Successfully rebased and updated refs/heads/rebase-fixup-fold. ```

Harald

On Fri, Jun 5, 2026 at 12:03 AM Harald Nordgren via GitGitGadget <gitgitgadget@gmail.com> wrote:

Show 119 quoted lines
>
> 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
Previous: Harald NordgrenNext: Junio C Hamano
Message 7 of 18 in “Makefile: drop duplicate %.a from link recipes”
  1. Makefile: drop duplicate %.a from link recipesHarald Nordgren via GitGitGadget, May 31, 2026
  2. Junio C HamanoJun 4, 2026
  3. Harald NordgrenJun 4, 2026
  4. Harald NordgrenJun 4, 2026
  5. Makefile: dedup archives in $(LIBS) so link recipes don't repeat themHarald Nordgren via GitGitGadget, Jun 4, 2026
  6. Harald NordgrenJun 10, 2026
  7. Harald NordgrenJun 19, 2026
  8. Junio C HamanoJun 19, 2026
  9. Harald NordgrenJun 19, 2026
  10. config.mak.uname: avoid macOS dup-library warningHarald Nordgren via GitGitGadget, Jun 19, 2026
  11. Junio C HamanoJun 19, 2026
  12. D. Ben KnobleJun 20, 2026
  13. D. Ben KnobleJun 22, 2026
  14. Patrick SteinhardtJun 22, 2026
  15. Junio C HamanoJun 22, 2026
  16. Paolo BonziniJun 22, 2026
  17. Patrick SteinhardtJun 22, 2026
  18. Paolo BonziniJun 22, 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.