git_version_string lives in git.c. When diff.c starts to use functions from help.c, which in turn use git_version_string, linking against libgit.a will fail. This is because git_version_string is physically located in git.o, and this object file is not part of libgit.a. One option would be to add git.o to libgit.a, but git.o is biggish. The second, better option is to move git_version_string to somewhere where it'll become part of libgit.a. This variable is only used in a couple of places, help.c being one of them, so it let's move git_version_string from git.c to help.c. The git binary is linked with help.o, so it is not affected by this move. Without this change the next commit would fail with: $ gcc -g -O0 -I. -DUSE_LIBPCRE -DHAVE_PATHS_H -DHAVE_DEV_TTY -DSHA1_HEADER='<openssl/sha.h>' -DNO_STRLCPY -DNO_MKSTEMPS -o git-daemon daemon.o libgit.a xdiff/lib.a -lpcre -lz -lcrypto -lpthread libgit.a(help.o): In function `cmd_version': /home/zbyszek/git/git/help.c:435: undefined reference to `git_version_string' Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@xxxxxxxxx> --- Makefile | 5 +++-- git.c | 2 -- help.c | 2 ++ 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 4817157..ccafb95 100644 --- a/Makefile +++ b/Makefile @@ -1890,7 +1890,7 @@ strip: $(PROGRAMS) git$X $(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X git.o: common-cmds.h -git.sp git.s git.o: EXTRA_CPPFLAGS = -DGIT_VERSION='"$(GIT_VERSION)"' \ +git.sp git.s git.o: EXTRA_CPPFLAGS = \ '-DGIT_HTML_PATH="$(htmldir_SQ)"' \ '-DGIT_MAN_PATH="$(mandir_SQ)"' \ '-DGIT_INFO_PATH="$(infodir_SQ)"' @@ -1899,7 +1899,8 @@ git$X: git.o GIT-LDFLAGS $(BUILTIN_OBJS) $(GITLIBS) $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ git.o \ $(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS) -help.sp help.o: common-cmds.h +help.o: common-cmds.h +help.sp help.o: EXTRA_CPPFLAGS = -DGIT_VERSION='"$(GIT_VERSION)"' builtin/help.sp builtin/help.o: common-cmds.h builtin/help.sp builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \ diff --git a/git.c b/git.c index 3805616..a24a0fd 100644 --- a/git.c +++ b/git.c @@ -256,8 +256,6 @@ static int handle_alias(int *argcp, const char ***argv) return ret; } -const char git_version_string[] = GIT_VERSION; - #define RUN_SETUP (1<<0) #define RUN_SETUP_GENTLY (1<<1) #define USE_PAGER (1<<2) diff --git a/help.c b/help.c index cbbe966..bc15066 100644 --- a/help.c +++ b/help.c @@ -409,6 +409,8 @@ const char *help_unknown_cmd(const char *cmd) exit(1); } +const char git_version_string[] = GIT_VERSION; + int cmd_version(int argc, const char **argv, const char *prefix) { printf("git version %s\n", git_version_string); -- 1.7.9.263.g4be11.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html