Implement version major.minor.release-stage.build (#3011)

This commit is contained in:
Javier Serrano Polo
2016-09-10 02:27:59 +00:00
committed by GitHub
parent eb86e25fd8
commit 5eb0ae2d75
10 changed files with 120 additions and 75 deletions

View File

@@ -4,13 +4,16 @@ SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md")
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt")
SET(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}")
SET(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}")
SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}")
SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_RELEASE}")
IF(VERSION_STAGE)
SET(CPACK_PACKAGE_VERSION_PATCH "${CPACK_PACKAGE_VERSION_PATCH}-${VERSION_STAGE}")
ENDIF()
IF(VERSION_BUILD)
SET(CPACK_PACKAGE_VERSION_PATCH "${CPACK_PACKAGE_VERSION_PATCH}.${VERSION_BUILD}")
ENDIF()
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME_UCASE}")
SET(CPACK_SOURCE_GENERATOR "TBZ2")
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}")
IF(VERSION_SUFFIX)
SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}-${VERSION_SUFFIX}")
ENDIF()
IF(NOT DEFINED WIN32)
SET(CPACK_STRIP_FILES "bin/${CMAKE_PROJECT_NAME};${PLUGIN_DIR}/*.so")
SET(CPACK_PACKAGE_EXECUTABLES "${CMAKE_PROJECT_NAME}" "${PROJECT_NAME_UCASE} binary")

View File

@@ -1,25 +1,29 @@
FIND_PACKAGE(Git)
IF(GIT_FOUND AND NOT FORCE_VERSION)
# Look for git tag information (e.g. Stable: "v1.0.0", Non-stable: "v1.0.0-123-a1b2c3d4")
# Look for git tag information (e.g. Tagged: "v1.0.0", Non-tagged: "v1.0.0-123-a1b2c3d")
EXECUTE_PROCESS(
COMMAND "${GIT_EXECUTABLE}" describe --tags --match v[0-9].[0-9].[0-9]*
OUTPUT_VARIABLE GIT_TAG
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
TIMEOUT 1
TIMEOUT 10
OUTPUT_STRIP_TRAILING_WHITESPACE)
STRING(REPLACE "-" ";" TAG_LIST "${GIT_TAG}")
LIST(LENGTH TAG_LIST TAG_LIST_LENGTH)
IF(TAG_LIST_LENGTH EQUAL 1)
# Stable build, FORCE_VERSION=x.x.x
IF(TAG_LIST_LENGTH GREATER 0)
LIST(GET TAG_LIST 0 FORCE_VERSION)
STRING(REPLACE "v" "" FORCE_VERSION "${FORCE_VERSION}")
ENDIF()
IF(TAG_LIST_LENGTH EQUAL 2)
LIST(GET TAG_LIST 1 VERSION_STAGE)
SET(FORCE_VERSION "${FORCE_VERSION}-${VERSION_STAGE}")
ELSEIF(TAG_LIST_LENGTH EQUAL 3)
# Non-stable build, FORCE_VERSION=x.x.x-hash
LIST(GET TAG_LIST 0 FORCE_VERSION)
LIST(GET TAG_LIST 2 COMMIT_HASH)
STRING(REPLACE "v" "" FORCE_VERSION "${FORCE_VERSION}")
STRING(REPLACE "g" "" COMMIT_HASH "${COMMIT_HASH}")
SET(FORCE_VERSION "${FORCE_VERSION}-${COMMIT_HASH}")
LIST(GET TAG_LIST 1 EXTRA_COMMITS)
SET(FORCE_VERSION "${FORCE_VERSION}.${EXTRA_COMMITS}")
ELSEIF(TAG_LIST_LENGTH EQUAL 4)
LIST(GET TAG_LIST 1 VERSION_STAGE)
LIST(GET TAG_LIST 2 EXTRA_COMMITS)
SET(FORCE_VERSION
"${FORCE_VERSION}-${VERSION_STAGE}.${EXTRA_COMMITS}")
ENDIF()
ENDIF()
@@ -27,15 +31,28 @@ IF(FORCE_VERSION STREQUAL "internal")
# Use release info from /CMakeLists.txt
ELSEIF(FORCE_VERSION)
STRING(REPLACE "." ";" VERSION_LIST "${FORCE_VERSION}")
STRING(REPLACE "-" ";" VERSION_LIST "${VERSION_LIST}")
LIST(LENGTH VERSION_LIST VERSION_LENGTH)
LIST(GET VERSION_LIST 0 VERSION_MAJOR)
LIST(GET VERSION_LIST 1 VERSION_MINOR)
LIST(GET VERSION_LIST 2 VERSION_PATCH)
LIST(GET VERSION_LIST 2 VERSION_RELEASE)
SET(VERSION_STAGE "")
SET(VERSION_BUILD 0)
IF(VERSION_LENGTH GREATER 3)
LIST(GET VERSION_LIST 3 VERSION_SUFFIX)
LIST(GET VERSION_LIST 3 VERSION_BUILD)
ENDIF()
STRING(REPLACE "-" ";" VERSION_LIST "${VERSION_RELEASE}")
LIST(LENGTH VERSION_LIST VERSION_LENGTH)
IF(VERSION_LENGTH GREATER 1)
LIST(GET VERSION_LIST 0 VERSION_RELEASE)
LIST(GET VERSION_LIST 1 VERSION_STAGE)
ENDIF()
SET(VERSION "${FORCE_VERSION}")
ELSEIF(GIT_FOUND)
MESSAGE(
"Could not get project version. Using release info from /CMakeLists.txt"
)
ELSE()
MESSAGE("Git not found. Using release info from /CMakeLists.txt")
ENDIF()
@@ -45,15 +62,16 @@ ENDIF()
MESSAGE("\n"
"Configuring ${PROJECT_NAME_UCASE}\n"
"--------------------------\n"
"* Build version : ${VERSION}\n"
"* Project version : ${VERSION}\n"
"* Major version : ${VERSION_MAJOR}\n"
"* Minor version : ${VERSION_MINOR}\n"
"* Patch version : ${VERSION_PATCH}\n"
"* Suffix version : ${VERSION_SUFFIX}\n"
"* Release version : ${VERSION_RELEASE}\n"
"* Stage version : ${VERSION_STAGE}\n"
"* Build version : ${VERSION_BUILD}\n"
"*\n\n"
"Optional Version Usage:\n"
"--------------------------\n"
"* Override version: -DFORCE_VERSION=x.x.x-x\n"
"* Disable hash suffix: -DFORCE_VERSION=internal\n"
"* Ignore Git information: -DFORCE_VERSION=internal\n"
)

View File

@@ -2,7 +2,6 @@ lmmsicon ICON cmake/nsis/lmms.ico
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
FILEVERSION @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_PATCH@,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP