aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-08-31 11:29:07 +0200
committerShauren <shauren.trinity@gmail.com>2021-08-31 11:29:07 +0200
commit29659b4192dc114540379e92a5cc915a465821d8 (patch)
treee6fab0b244dea0d517547e30d6b03412dd0e6055
parent9d7eee1a8cc0fbfe297f2114446e5f634255b3f3 (diff)
Build: Replace git describe with more script friendly alternative, git rev-parse and git diff-index
-rw-r--r--cmake/genrev.cmake24
1 files changed, 17 insertions, 7 deletions
diff --git a/cmake/genrev.cmake b/cmake/genrev.cmake
index dd11c56c66a..d009cbac804 100644
--- a/cmake/genrev.cmake
+++ b/cmake/genrev.cmake
@@ -22,15 +22,27 @@ if(WITHOUT_GIT)
set(rev_branch "Archived")
else()
if(GIT_EXECUTABLE)
+ # Retrieve repository dirty status
+ execute_process(
+ COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD --
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ RESULT_VARIABLE is_dirty
+ )
+
# Create a revision-string that we can use
execute_process(
- COMMAND "${GIT_EXECUTABLE}" describe --long --match init --dirty=+ --abbrev=12
+ COMMAND "${GIT_EXECUTABLE}" rev-parse --short=12 HEAD
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
- OUTPUT_VARIABLE rev_info
+ OUTPUT_VARIABLE rev_hash
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
+ # Append dirty marker to commit hash
+ if(is_dirty)
+ set(rev_hash "${rev_hash}+")
+ endif()
+
# And grab the commits timestamp
execute_process(
COMMAND "${GIT_EXECUTABLE}" show -s --format=%ci
@@ -42,7 +54,7 @@ else()
# Also retrieve branch name
execute_process(
- COMMAND "${GIT_EXECUTABLE}" rev-parse --abbrev-ref HEAD
+ COMMAND "${GIT_EXECUTABLE}" symbolic-ref -q --short HEAD
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE rev_branch
OUTPUT_STRIP_TRAILING_WHITESPACE
@@ -52,7 +64,7 @@ else()
# Last minute check - ensure that we have a proper revision
# If everything above fails (means the user has erased the git revision control directory or removed the origin/HEAD tag)
- if(NOT rev_info)
+ if(NOT rev_hash)
# No valid ways available to find/set the revision/hash, so let's force some defaults
message(STATUS "
Could not find a proper repository signature (hash) - you may need to pull tags with git fetch -t
@@ -61,13 +73,11 @@ else()
set(rev_hash "unknown")
set(rev_branch "Archived")
else()
- # Extract information required to build a proper versionstring
- string(REGEX REPLACE init-|[0-9]+-g "" rev_hash ${rev_info})
endif()
endif()
# Create the actual revision_data.h file from the above params
-if(NOT "${rev_hash_cached}" MATCHES "${rev_hash}" OR NOT "${rev_branch_cached}" MATCHES "${rev_branch}" OR NOT EXISTS "${BUILDDIR}/revision_data.h")
+if(NOT "${rev_hash_cached}" STREQUAL "${rev_hash}" OR NOT "${rev_branch_cached}" STREQUAL "${rev_branch}" OR NOT EXISTS "${BUILDDIR}/revision_data.h")
configure_file(
"${CMAKE_SOURCE_DIR}/revision_data.h.in.cmake"
"${BUILDDIR}/revision_data.h"