Makefile: propagate Git version via generated header

We set up a couple of preprocessor macros when compiling Git that
propagate the version that Git was built from to `git version` et al.
The way this is set up makes it harder than necessary to reuse the
infrastructure across the different build systems.

Refactor this such that we generate a "version-def.h" header via
`GIT-VERSION-GEN` instead.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Patrick Steinhardt 2024-12-06 14:24:39 +01:00 committed by Junio C Hamano
parent 4838deab65
commit 0c8d339514
6 changed files with 35 additions and 11 deletions

1
.gitignore vendored
View File

@ -195,6 +195,7 @@
/config-list.h /config-list.h
/command-list.h /command-list.h
/hook-list.h /hook-list.h
/version-def.h
*.tar.gz *.tar.gz
*.dsc *.dsc
*.deb *.deb

View File

@ -52,6 +52,11 @@ else
fi fi


GIT_VERSION=$(expr "$VN" : v*'\(.*\)') GIT_VERSION=$(expr "$VN" : v*'\(.*\)')
GIT_BUILT_FROM_COMMIT=$(git -C "$SOURCE_DIR" rev-parse -q --verify HEAD 2>/dev/null)
if test -z "$GIT_USER_AGENT"
then
GIT_USER_AGENT="git/$GIT_VERSION"
fi


read GIT_MAJOR_VERSION GIT_MINOR_VERSION GIT_MICRO_VERSION trailing <<EOF read GIT_MAJOR_VERSION GIT_MINOR_VERSION GIT_MICRO_VERSION trailing <<EOF
$(echo "$GIT_VERSION" 0 0 0 | tr '.a-zA-Z-' ' ') $(echo "$GIT_VERSION" 0 0 0 | tr '.a-zA-Z-' ' ')
@ -61,6 +66,8 @@ sed -e "s|@GIT_VERSION@|$GIT_VERSION|" \
-e "s|@GIT_MAJOR_VERSION@|$GIT_MAJOR_VERSION|" \ -e "s|@GIT_MAJOR_VERSION@|$GIT_MAJOR_VERSION|" \
-e "s|@GIT_MINOR_VERSION@|$GIT_MINOR_VERSION|" \ -e "s|@GIT_MINOR_VERSION@|$GIT_MINOR_VERSION|" \
-e "s|@GIT_MICRO_VERSION@|$GIT_MICRO_VERSION|" \ -e "s|@GIT_MICRO_VERSION@|$GIT_MICRO_VERSION|" \
-e "s|@GIT_BUILT_FROM_COMMIT@|$GIT_BUILT_FROM_COMMIT|" \
-e "s|@GIT_USER_AGENT@|$GIT_USER_AGENT|" \
"$INPUT" >"$OUTPUT"+ "$INPUT" >"$OUTPUT"+


if ! test -f "$OUTPUT" || ! cmp "$OUTPUT"+ "$OUTPUT" >/dev/null if ! test -f "$OUTPUT" || ! cmp "$OUTPUT"+ "$OUTPUT" >/dev/null

View File

@ -2508,13 +2508,11 @@ PAGER_ENV_CQ_SQ = $(subst ','\'',$(PAGER_ENV_CQ))
pager.sp pager.s pager.o: EXTRA_CPPFLAGS = \ pager.sp pager.s pager.o: EXTRA_CPPFLAGS = \
-DPAGER_ENV='$(PAGER_ENV_CQ_SQ)' -DPAGER_ENV='$(PAGER_ENV_CQ_SQ)'


version.sp version.s version.o: GIT-VERSION-FILE GIT-USER-AGENT version-def.h: version-def.h.in GIT-VERSION-GEN GIT-VERSION-FILE GIT-USER-AGENT
version.sp version.s version.o: EXTRA_CPPFLAGS = \ $(QUIET_GEN)GIT_USER_AGENT="$(GIT_USER_AGENT)" $(SHELL_PATH) ./GIT-VERSION-GEN "$(shell pwd)" $< $@+
'-DGIT_VERSION="$(GIT_VERSION)"' \ @if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi
'-DGIT_USER_AGENT=$(GIT_USER_AGENT_CQ_SQ)' \
'-DGIT_BUILT_FROM_COMMIT="$(shell \ version.sp version.s version.o: version-def.h
GIT_CEILING_DIRECTORIES="$(CURDIR)/.." \
git rev-parse -q --verify HEAD 2>/dev/null)"'


$(BUILT_INS): git$X $(BUILT_INS): git$X
$(QUIET_BUILT_IN)$(RM) $@ && \ $(QUIET_BUILT_IN)$(RM) $@ && \
@ -3728,6 +3726,7 @@ clean: profile-clean coverage-clean cocciclean
$(RM) $(FUZZ_PROGRAMS) $(RM) $(FUZZ_PROGRAMS)
$(RM) $(SP_OBJ) $(RM) $(SP_OBJ)
$(RM) $(HCC) $(RM) $(HCC)
$(RM) version-def.h
$(RM) -r bin-wrappers $(dep_dirs) $(compdb_dir) compile_commands.json $(RM) -r bin-wrappers $(dep_dirs) $(compdb_dir) compile_commands.json
$(RM) -r po/build/ $(RM) -r po/build/
$(RM) *.pyc *.pyo */*.pyc */*.pyo $(GENERATED_H) $(ETAGS_TARGET) tags cscope* $(RM) *.pyc *.pyo */*.pyc */*.pyo $(GENERATED_H) $(ETAGS_TARGET) tags cscope*

View File

@ -229,10 +229,7 @@ add_compile_definitions(PAGER_ENV="LESS=FRX LV=-c"
GIT_HTML_PATH="share/doc/git-doc" GIT_HTML_PATH="share/doc/git-doc"
DEFAULT_HELP_FORMAT="html" DEFAULT_HELP_FORMAT="html"
DEFAULT_GIT_TEMPLATE_DIR="share/git-core/templates" DEFAULT_GIT_TEMPLATE_DIR="share/git-core/templates"
GIT_VERSION="${PROJECT_VERSION}.GIT" BINDIR="bin")
GIT_USER_AGENT="git/${PROJECT_VERSION}.GIT"
BINDIR="bin"
GIT_BUILT_FROM_COMMIT="")


if(WIN32) if(WIN32)
set(FALLBACK_RUNTIME_PREFIX /mingw64) set(FALLBACK_RUNTIME_PREFIX /mingw64)
@ -668,6 +665,17 @@ parse_makefile_for_sources(libgit_SOURCES "LIB_OBJS")


list(TRANSFORM libgit_SOURCES PREPEND "${CMAKE_SOURCE_DIR}/") list(TRANSFORM libgit_SOURCES PREPEND "${CMAKE_SOURCE_DIR}/")
list(TRANSFORM compat_SOURCES PREPEND "${CMAKE_SOURCE_DIR}/") list(TRANSFORM compat_SOURCES PREPEND "${CMAKE_SOURCE_DIR}/")

add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/version-def.h"
COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/GIT-VERSION-GEN"
"${CMAKE_SOURCE_DIR}"
"${CMAKE_SOURCE_DIR}/version-def.h.in"
"${CMAKE_BINARY_DIR}/version-def.h"
DEPENDS "${SH_EXE}" "${CMAKE_SOURCE_DIR}/GIT-VERSION-GEN"
"${CMAKE_SOURCE_DIR}/version-def.h.in"
VERBATIM)
list(APPEND libgit_SOURCES "${CMAKE_BINARY_DIR}/version-def.h")

add_library(libgit ${libgit_SOURCES} ${compat_SOURCES}) add_library(libgit ${libgit_SOURCES} ${compat_SOURCES})


#libxdiff #libxdiff

8
version-def.h.in Normal file
View File

@ -0,0 +1,8 @@
#ifndef VERSION_DEF_H
#define VERSION_DEF_H

#define GIT_VERSION "@GIT_VERSION@"
#define GIT_BUILT_FROM_COMMIT "@GIT_BUILT_FROM_COMMIT@"
#define GIT_USER_AGENT "@GIT_USER_AGENT@"

#endif /* VERSION_DEF_H */

View File

@ -1,5 +1,6 @@
#include "git-compat-util.h" #include "git-compat-util.h"
#include "version.h" #include "version.h"
#include "version-def.h"
#include "strbuf.h" #include "strbuf.h"


const char git_version_string[] = GIT_VERSION; const char git_version_string[] = GIT_VERSION;