mirror of
https://github.com/git/git.git
synced 2025-02-06 09:44:30 +00:00
Makefile: generate "git.rc" via GIT-VERSION-GEN
The "git.rc" is used on Windows to embed information like the project name and version into the resulting executables. As such we need to inject the version information, which we do by using preprocessor defines. The logic to do so is non-trivial and needs to be kept in sync with the different build systems. Refactor the logic so that we generate "git.rc" via `GIT-VERSION-GEN`. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
0c8d339514
commit
9bb10d27e7
1
.gitignore
vendored
1
.gitignore
vendored
@ -199,6 +199,7 @@
|
||||
*.tar.gz
|
||||
*.dsc
|
||||
*.deb
|
||||
/git.rc
|
||||
/git.spec
|
||||
*.exe
|
||||
*.[aos]
|
||||
|
@ -58,14 +58,18 @@ then
|
||||
GIT_USER_AGENT="git/$GIT_VERSION"
|
||||
fi
|
||||
|
||||
read GIT_MAJOR_VERSION GIT_MINOR_VERSION GIT_MICRO_VERSION trailing <<EOF
|
||||
$(echo "$GIT_VERSION" 0 0 0 | tr '.a-zA-Z-' ' ')
|
||||
# While released Git versions only have three numbers, development builds also
|
||||
# have a fourth number that corresponds to the number of patches since the last
|
||||
# release.
|
||||
read GIT_MAJOR_VERSION GIT_MINOR_VERSION GIT_MICRO_VERSION GIT_PATCH_LEVEL trailing <<EOF
|
||||
$(echo "$GIT_VERSION" 0 0 0 0 | tr '.a-zA-Z-' ' ')
|
||||
EOF
|
||||
|
||||
sed -e "s|@GIT_VERSION@|$GIT_VERSION|" \
|
||||
-e "s|@GIT_MAJOR_VERSION@|$GIT_MAJOR_VERSION|" \
|
||||
-e "s|@GIT_MINOR_VERSION@|$GIT_MINOR_VERSION|" \
|
||||
-e "s|@GIT_MICRO_VERSION@|$GIT_MICRO_VERSION|" \
|
||||
-e "s|@GIT_PATCH_LEVEL@|$GIT_PATCH_LEVEL|" \
|
||||
-e "s|@GIT_BUILT_FROM_COMMIT@|$GIT_BUILT_FROM_COMMIT|" \
|
||||
-e "s|@GIT_USER_AGENT@|$GIT_USER_AGENT|" \
|
||||
"$INPUT" >"$OUTPUT"+
|
||||
|
13
Makefile
13
Makefile
@ -2568,11 +2568,12 @@ $(SCRIPT_LIB) : % : %.sh GIT-SCRIPT-DEFINES
|
||||
$(QUIET_GEN)$(cmd_munge_script) && \
|
||||
mv $@+ $@
|
||||
|
||||
git.res: git.rc GIT-VERSION-FILE GIT-PREFIX
|
||||
$(QUIET_RC)$(RC) \
|
||||
$(join -DMAJOR= -DMINOR= -DMICRO= -DPATCHLEVEL=, $(wordlist 1, 4, \
|
||||
$(shell echo $(GIT_VERSION) 0 0 0 0 | tr '.a-zA-Z-' ' '))) \
|
||||
-DGIT_VERSION="\\\"$(GIT_VERSION)\\\"" -i $< -o $@
|
||||
git.rc: git.rc.in GIT-VERSION-GEN GIT-VERSION-FILE
|
||||
$(QUIET_GEN)$(SHELL_PATH) ./GIT-VERSION-GEN "$(shell pwd)" $< $@+
|
||||
@if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi
|
||||
|
||||
git.res: git.rc GIT-PREFIX
|
||||
$(QUIET_RC)$(RC) -i $< -o $@
|
||||
|
||||
# This makes sure we depend on the NO_PERL setting itself.
|
||||
$(SCRIPT_PERL_GEN): GIT-BUILD-OPTIONS
|
||||
@ -3717,7 +3718,7 @@ clean: profile-clean coverage-clean cocciclean
|
||||
$(RM) -r .build $(UNIT_TEST_BIN)
|
||||
$(RM) GIT-TEST-SUITES
|
||||
$(RM) po/git.pot po/git-core.pot
|
||||
$(RM) git.res
|
||||
$(RM) git.rc git.res
|
||||
$(RM) $(OBJECTS)
|
||||
$(RM) headless-git.o
|
||||
$(RM) $(LIB_FILE) $(XDIFF_LIB) $(REFTABLE_LIB)
|
||||
|
@ -691,18 +691,25 @@ list(TRANSFORM reftable_SOURCES PREPEND "${CMAKE_SOURCE_DIR}/")
|
||||
add_library(reftable STATIC ${reftable_SOURCES})
|
||||
|
||||
if(WIN32)
|
||||
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/git.rc
|
||||
COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/GIT-VERSION-GEN"
|
||||
"${CMAKE_SOURCE_DIR}"
|
||||
"${CMAKE_SOURCE_DIR}/git.rc.in"
|
||||
"${CMAKE_BINARY_DIR}/git.rc"
|
||||
DEPENDS "${CMAKE_SOURCE_DIR}/GIT-VERSION-GEN"
|
||||
"${CMAKE_SOURCE_DIR}/git.rc.in"
|
||||
VERBATIM)
|
||||
|
||||
if(NOT MSVC)#use windres when compiling with gcc and clang
|
||||
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/git.res
|
||||
COMMAND ${WINDRES_EXE} -O coff -DMAJOR=${PROJECT_VERSION_MAJOR} -DMINOR=${PROJECT_VERSION_MINOR}
|
||||
-DMICRO=${PROJECT_VERSION_PATCH} -DPATCHLEVEL=0 -DGIT_VERSION="\\\"${PROJECT_VERSION}.GIT\\\""
|
||||
-i ${CMAKE_SOURCE_DIR}/git.rc -o ${CMAKE_BINARY_DIR}/git.res
|
||||
COMMAND ${WINDRES_EXE} -O coff -i ${CMAKE_BINARY_DIR}/git.rc -o ${CMAKE_BINARY_DIR}/git.res
|
||||
DEPENDS "${CMAKE_BINARY_DIR}/git.rc"
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
VERBATIM)
|
||||
else()#MSVC use rc
|
||||
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/git.res
|
||||
COMMAND ${CMAKE_RC_COMPILER} /d MAJOR=${PROJECT_VERSION_MAJOR} /d MINOR=${PROJECT_VERSION_MINOR}
|
||||
/d MICRO=${PROJECT_VERSION_PATCH} /d PATCHLEVEL=0 /d GIT_VERSION="${PROJECT_VERSION}.GIT"
|
||||
/fo ${CMAKE_BINARY_DIR}/git.res ${CMAKE_SOURCE_DIR}/git.rc
|
||||
COMMAND ${CMAKE_RC_COMPILER} /fo ${CMAKE_BINARY_DIR}/git.res ${CMAKE_BINARY_DIR}/git.rc
|
||||
DEPENDS "${CMAKE_BINARY_DIR}/git.rc"
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
VERBATIM)
|
||||
endif()
|
||||
|
@ -1,6 +1,6 @@
|
||||
1 VERSIONINFO
|
||||
FILEVERSION MAJOR,MINOR,MICRO,PATCHLEVEL
|
||||
PRODUCTVERSION MAJOR,MINOR,MICRO,PATCHLEVEL
|
||||
FILEVERSION @GIT_MAJOR_VERSION@,@GIT_MINOR_VERSION@,@GIT_MICRO_VERSION@,@GIT_PATCH_LEVEL@
|
||||
PRODUCTVERSION @GIT_MAJOR_VERSION@,@GIT_MINOR_VERSION@,@GIT_MICRO_VERSION@,@GIT_PATCH_LEVEL@
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
@ -11,7 +11,7 @@ BEGIN
|
||||
VALUE "InternalName", "git\0"
|
||||
VALUE "OriginalFilename", "git.exe\0"
|
||||
VALUE "ProductName", "Git\0"
|
||||
VALUE "ProductVersion", GIT_VERSION "\0"
|
||||
VALUE "ProductVersion", "@GIT_VERSION@\0"
|
||||
END
|
||||
END
|
||||
|
Loading…
x
Reference in New Issue
Block a user