summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorEvan Lojewski <github@meklort.com>2020-10-06 19:28:44 -0600
committerGitHub <noreply@github.com>2020-10-06 19:28:44 -0600
commit604879d0e5bee65404020aedceeafe847e4eb8f0 (patch)
tree95a8c3254497c41ba0cd524b4cda773f33c6ac27 /cmake
parent8bee5536987362169b9624606ced13659da92a10 (diff)
downloadbcm5719-ortega-604879d0e5bee65404020aedceeafe847e4eb8f0.tar.gz
bcm5719-ortega-604879d0e5bee65404020aedceeafe847e4eb8f0.zip
build: Enable semantic versioning. (#130)
Diffstat (limited to 'cmake')
-rw-r--r--cmake/version.cmake25
1 files changed, 24 insertions, 1 deletions
diff --git a/cmake/version.cmake b/cmake/version.cmake
index 54ed3cf..932b015 100644
--- a/cmake/version.cmake
+++ b/cmake/version.cmake
@@ -46,6 +46,8 @@ SET(VERSION_MAJOR 0)
SET(VERSION_MINOR 4)
SET(VERSION_PATCH )
+SET(SEMVER_REGEX "v?(0|[1-9]*)\\.(0|[0-9]*)\\.(0|[0-9]*)")
+
SET(VERSION_FILE ${CMAKE_SOURCE_DIR}/version)
IF(EXISTS ${VERSION_FILE})
# Release package including a version file.
@@ -58,9 +60,30 @@ IF(EXISTS ${VERSION_FILE})
LIST(GET FULL_VERSION 2 VERSION_PATCH)
ELSE()
# Within a git repository
- EXECUTE_PROCESS(COMMAND git rev-list --count HEAD
+
+ # Find the previous tag. This should be in the format of "vMajor.Minor.Patch"
+ EXECUTE_PROCESS(COMMAND git describe --abbrev=0 --tags
+ OUTPUT_VARIABLE PREVIOUS_TAG
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ STRING(REGEX MATCHALL "${SEMVER_REGEX}" DID_MATCH "${PREVIOUS_TAG}")
+ SET(PREVIOUS_MAJOR ${CMAKE_MATCH_1})
+ SET(PREVIOUS_MINOR ${CMAKE_MATCH_2})
+ SET(PREVIOUS_PATCH ${CMAKE_MATCH_3})
+
+ EXECUTE_PROCESS(COMMAND git rev-list --count ${PREVIOUS_TAG}..HEAD
OUTPUT_VARIABLE VERSION_PATCH
OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ # If we are on the same Major/Minor version, continue increasing the patch version.
+ IF("${PREVIOUS_MAJOR}.${PREVIOUS_MINOR}" VERSION_EQUAL "${VERSIN_MAJOR}.${VERSION_MINOR}")
+ MATH(EXPR VERSION_PATCH "${PREVIOUS_PATCH} + ${VERSION_PATCH}")
+ ELSEIF("${PREVIOUS_MAJOR}.${PREVIOUS_MINOR}" VERSION_GREATER "${VERSIN_MAJOR}.${VERSION_MINOR}")
+ # We somehow regressed in versioning.
+ MESSAGE(FATAL_ERROR "Last release ${PREVIOUS_TAG} is newer than current ${VERSION_MAJOR}.${VERSION_MINOR}.x")
+ ELSE()
+ # No released versions for this major.minor pair.
+ ENDIF()
ENDIF()
SET(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
OpenPOWER on IntegriCloud