Improve version.h file generation

Store full revision hash in REVISION file. Write fixes 10 chars of revision
hash to version.h. Use `#pragma once` in version.h. Support getting revision
from TeamCity environment variable (similar to Jenkins).
This commit is contained in:
Mike Gelfand 2017-01-15 00:54:56 +03:00
parent f6b23c02f0
commit 7f008edab6
3 changed files with 22 additions and 16 deletions

View File

@ -58,16 +58,16 @@ endif()
set(TR_VCS_REVISION_FILE "${CMAKE_SOURCE_DIR}/REVISION") set(TR_VCS_REVISION_FILE "${CMAKE_SOURCE_DIR}/REVISION")
if(NOT "$ENV{JENKINS_URL}" STREQUAL "" AND NOT "$ENV{VCS_REVISION}" STREQUAL "") if(NOT "$ENV{JENKINS_URL}" STREQUAL "" AND NOT "$ENV{GIT_COMMIT}" STREQUAL "")
# Jenkins automated build, use the set environment variables to avoid set(TR_VCS_REVISION "$ENV{GIT_COMMIT}")
# version mismatches between java's svn and command line's svn elseif(NOT "$ENV{TEAMCITY_PROJECT_NAME}" STREQUAL "" AND NOT "$ENV{BUILD_VCS_NUMBER}" STREQUAL "")
set(TR_VCS_REVISION "$ENV{VCS_REVISION}") set(TR_VCS_REVISION "$ENV{BUILD_VCS_NUMBER}")
elseif(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/.git) elseif(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/.git)
find_package(Git) find_package(Git)
if(GIT_FOUND) if(GIT_FOUND)
execute_process( execute_process(
COMMAND COMMAND
${GIT_EXECUTABLE} rev-list --max-count=1 --abbrev-commit HEAD ${GIT_EXECUTABLE} rev-list --max-count=1 HEAD
WORKING_DIRECTORY WORKING_DIRECTORY
${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE OUTPUT_VARIABLE
@ -79,16 +79,19 @@ endif()
if("${TR_VCS_REVISION}" STREQUAL "" AND EXISTS "${TR_VCS_REVISION_FILE}") if("${TR_VCS_REVISION}" STREQUAL "" AND EXISTS "${TR_VCS_REVISION_FILE}")
file(READ "${TR_VCS_REVISION_FILE}" TR_VCS_REVISION) file(READ "${TR_VCS_REVISION_FILE}" TR_VCS_REVISION)
string(STRIP "${TR_VCS_REVISION}" TR_VCS_REVISION)
endif() endif()
string(STRIP "${TR_VCS_REVISION}" TR_VCS_REVISION)
if(NOT "${TR_VCS_REVISION}" STREQUAL "") if(NOT "${TR_VCS_REVISION}" STREQUAL "")
file(WRITE "${TR_VCS_REVISION_FILE}" "${TR_VCS_REVISION}") file(WRITE "${TR_VCS_REVISION_FILE}" "${TR_VCS_REVISION}\n")
else() else()
set(TR_VCS_REVISION 0) set(TR_VCS_REVISION 0)
file(REMOVE "${TR_VCS_REVISION_FILE}") file(REMOVE "${TR_VCS_REVISION_FILE}")
endif() endif()
string(SUBSTRING "${TR_VCS_REVISION}" 0 10 TR_VCS_REVISION)
set_property(GLOBAL PROPERTY USE_FOLDERS ON) set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set(CURL_MINIMUM 7.15.4) set(CURL_MINIMUM 7.15.4)

View File

@ -1,5 +1,4 @@
#ifndef TR_VERSION_H #pragma once
#define TR_VERSION_H
#define PEERID_PREFIX "${TR_PEER_ID_PREFIX}" #define PEERID_PREFIX "${TR_PEER_ID_PREFIX}"
#define USERAGENT_PREFIX "${TR_USER_AGENT_PREFIX}" #define USERAGENT_PREFIX "${TR_USER_AGENT_PREFIX}"
@ -14,5 +13,3 @@
#cmakedefine TR_BETA_RELEASE 1 #cmakedefine TR_BETA_RELEASE 1
#cmakedefine TR_NIGHTLY_RELEASE 1 #cmakedefine TR_NIGHTLY_RELEASE 1
#cmakedefine TR_STABLE_RELEASE 1 #cmakedefine TR_STABLE_RELEASE 1
#endif /* TR_VERSION_H */

View File

@ -23,16 +23,18 @@ minor_version=`echo ${user_agent_prefix} | awk -F . '{print $2 + 0}'`
vcs_revision= vcs_revision=
vcs_revision_file=REVISION vcs_revision_file=REVISION
if [ -n "$JENKINS_URL" -a -n "$VCS_REVISION" ]; then if [ -n "$JENKINS_URL" -a -n "$GIT_COMMIT" ]; then
# Jenkins automated build, use the set environment variables to avoid vcs_revision=$GIT_COMMIT
# version mismatches between java's svn and command line's svn elif [ -n "$TEAMCITY_PROJECT_NAME" -a -n "$BUILD_VCS_NUMBER" ]; then
vcs_revision=$VCS_REVISION vcs_revision=$BUILD_VCS_NUMBER
elif [ -d ".git" ] && type git >/dev/null 2>&1; then elif [ -d ".git" ] && type git >/dev/null 2>&1; then
vcs_revision=`git rev-list --max-count=1 --abbrev-commit HEAD` vcs_revision=`git rev-list --max-count=1 HEAD`
elif [ -f "$vcs_revision_file" ]; then elif [ -f "$vcs_revision_file" ]; then
vcs_revision=`cat "$vcs_revision_file"` vcs_revision=`cat "$vcs_revision_file"`
fi fi
vcs_revision=`echo $vcs_revision`
if [ -n "$vcs_revision" ]; then if [ -n "$vcs_revision" ]; then
[ -f "$vcs_revision_file" ] && [ "`cat "$vcs_revision_file"`" = "$vcs_revision" ] || echo "$vcs_revision" > "$vcs_revision_file" [ -f "$vcs_revision_file" ] && [ "`cat "$vcs_revision_file"`" = "$vcs_revision" ] || echo "$vcs_revision" > "$vcs_revision_file"
else else
@ -40,7 +42,11 @@ else
rm -f "$vcs_revision_file" rm -f "$vcs_revision_file"
fi fi
vcs_revision=${vcs_revision:0:10}
cat > libtransmission/version.h.new << EOF cat > libtransmission/version.h.new << EOF
#pragma once
#define PEERID_PREFIX "${peer_id_prefix}" #define PEERID_PREFIX "${peer_id_prefix}"
#define USERAGENT_PREFIX "${user_agent_prefix}" #define USERAGENT_PREFIX "${user_agent_prefix}"
#define VCS_REVISION "${vcs_revision}" #define VCS_REVISION "${vcs_revision}"