@@ -939,7 +939,7 @@ BUILTIN_OBJS += builtin/verify-tag.o
939939BUILTIN_OBJS += builtin/worktree.o
940940BUILTIN_OBJS += builtin/write-tree.o
941941
942- GITLIBS = $(LIB_FILE ) $(XDIFF_LIB )
942+ GITLIBS = common-main.o $(LIB_FILE ) $(XDIFF_LIB )
943943EXTLIBS =
944944
945945GIT_USER_AGENT = git/$(GIT_VERSION )
@@ -1572,7 +1572,15 @@ TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
15721572DIFF_SQ = $(subst ','\'',$(DIFF ) )
15731573PERLLIB_EXTRA_SQ = $(subst ','\'',$(PERLLIB_EXTRA ) )
15741574
1575- LIBS = $(GITLIBS ) $(EXTLIBS )
1575+ # We must filter out any object files from $(GITLIBS),
1576+ # as it is typically used like:
1577+ #
1578+ # foo: foo.o $(GITLIBS)
1579+ # $(CC) $(filter %.o,$^) $(LIBS)
1580+ #
1581+ # where we use it as a dependency. Since we also pull object files
1582+ # from the dependency list, that would make each entry appear twice.
1583+ LIBS = $(filter-out % .o, $(GITLIBS ) ) $(EXTLIBS )
15761584
15771585BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ ) ' \
15781586 $(COMPAT_CFLAGS )
@@ -1708,8 +1716,8 @@ git.sp git.s git.o: EXTRA_CPPFLAGS = \
17081716 ' -DGIT_INFO_PATH="$(infodir_relative_SQ)"'
17091717
17101718git$X : git.o GIT-LDFLAGS $(BUILTIN_OBJS ) $(GITLIBS )
1711- $(QUIET_LINK )$(CC ) $(ALL_CFLAGS ) -o $@ $(ALL_LDFLAGS ) git.o \
1712- $(BUILTIN_OBJS ) $(LIBS )
1719+ $(QUIET_LINK )$(CC ) $(ALL_CFLAGS ) -o $@ $(ALL_LDFLAGS ) \
1720+ $(filter % .o, $^ ) $(LIBS )
17131721
17141722help.sp help.s help.o : common-cmds.h
17151723
@@ -1902,6 +1910,7 @@ TEST_OBJS := $(patsubst %$X,%.o,$(TEST_PROGRAMS))
19021910OBJECTS := $(LIB_OBJS ) $(BUILTIN_OBJS ) $(PROGRAM_OBJS ) $(TEST_OBJS ) \
19031911 $(XDIFF_OBJS ) \
19041912 $(VCSSVN_OBJS ) \
1913+ common-main.o \
19051914 git.o
19061915ifndef NO_CURL
19071916 OBJECTS += http.o http-walker.o remote-curl.o
0 commit comments