Adds better versioning for non-stable builds
Allows version forcing via `cmake -DFORCE_VERSION=1.1.1-foo`
This commit is contained in:
@@ -20,7 +20,7 @@ STRING(TOUPPER "${CMAKE_PROJECT_NAME}" PROJECT_NAME_UCASE)
|
||||
|
||||
# Timestamp available since cmake 2.8.11
|
||||
IF(CMAKE_VERSION VERSION_LESS "2.8.11")
|
||||
SET(PROJECT_YEAR "2015")
|
||||
EXECUTE_PROCESS(COMMAND date +%Y OUTPUT_VARIABLE PROJECT_YEAR OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
ELSE()
|
||||
STRING(TIMESTAMP PROJECT_YEAR "%Y")
|
||||
ENDIF()
|
||||
@@ -39,6 +39,8 @@ IF(VERSION_SUFFIX)
|
||||
SET(VERSION "${VERSION}-${VERSION_SUFFIX}")
|
||||
ENDIF(VERSION_SUFFIX)
|
||||
|
||||
# Override version information for non-base builds
|
||||
INCLUDE(VersionInfo)
|
||||
INCLUDE(DetectMachine)
|
||||
|
||||
|
||||
|
||||
58
cmake/modules/VersionInfo.cmake
Normal file
58
cmake/modules/VersionInfo.cmake
Normal file
@@ -0,0 +1,58 @@
|
||||
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")
|
||||
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
|
||||
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
|
||||
LIST(GET TAG_LIST 0 FORCE_VERSION)
|
||||
STRING(REPLACE "v" "" FORCE_VERSION "${FORCE_VERSION}")
|
||||
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}")
|
||||
SET(FORCE_VERSION "${FORCE_VERSION}-${COMMIT_HASH}")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
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)
|
||||
IF(VERSION_LENGTH GREATER 3)
|
||||
LIST(GET VERSION_LIST 3 VERSION_SUFFIX)
|
||||
ENDIF()
|
||||
SET(VERSION "${FORCE_VERSION}")
|
||||
ELSE()
|
||||
MESSAGE("Git not found. Using release info from /CMakeLists.txt")
|
||||
ENDIF()
|
||||
|
||||
|
||||
|
||||
MESSAGE("\n"
|
||||
"Configuring ${PROJECT_NAME_UCASE}\n"
|
||||
"--------------------------\n"
|
||||
"* Build version : ${VERSION}\n"
|
||||
"* Major version : ${VERSION_MAJOR}\n"
|
||||
"* Minor version : ${VERSION_MINOR}\n"
|
||||
"* Patch version : ${VERSION_PATCH}\n"
|
||||
"* Suffix version : ${VERSION_SUFFIX}\n"
|
||||
"*\n\n"
|
||||
"Optional Version Usage:\n"
|
||||
"--------------------------\n"
|
||||
"* Override version: -DFORCE_VERSION=x.x.x-x\n"
|
||||
"* Disable hash suffix: -DFORCE_VERSION=internal\n"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user