summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorJan Holthuis <jan.holthuis@ruhr-uni-bochum.de>2021-05-07 13:15:26 +0200
committerJan Holthuis <jan.holthuis@ruhr-uni-bochum.de>2021-05-07 18:15:51 +0200
commita01f34ec7928e8526d7f42f324e529c2de43fbf4 (patch)
tree5f25f9cedc1fbb5781504d544a6f6cbcb16c5d3a /cmake
parent0eb2b0e22bf3ba5ec676e6f38330d7b4fc0168c5 (diff)
CMake: Fetch latest Git information on build without reconfig
Diffstat (limited to 'cmake')
-rw-r--r--cmake/modules/GitInfo.cmake65
-rw-r--r--cmake/scripts/gitinfo.cmake3
2 files changed, 68 insertions, 0 deletions
diff --git a/cmake/modules/GitInfo.cmake b/cmake/modules/GitInfo.cmake
new file mode 100644
index 0000000000..ae74f9eb1d
--- /dev/null
+++ b/cmake/modules/GitInfo.cmake
@@ -0,0 +1,65 @@
+# Get the current commit ref
+execute_process(
+ COMMAND git describe --tags --always --dirty=-modified
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ OUTPUT_VARIABLE GIT_DESCRIBE
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET
+)
+if(NOT GIT_DESCRIBE)
+ message(NOTICE "Git describe: unknown")
+else()
+ message(NOTICE "Git describe: ${GIT_DESCRIBE}")
+ string(REGEX MATCH "-modified$" GIT_DIRTY "${GIT_DESCRIBE}")
+ if (GIT_DIRTY)
+ message("Git worktree modified: yes")
+ set(GIT_DIRTY 1)
+ else()
+ message(NOTICE "Git worktree modified: no")
+ set(GIT_DIRTY 0)
+ endif()
+endif()
+
+# Get the current working branch
+execute_process(
+ COMMAND git rev-parse --abbrev-ref HEAD
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ OUTPUT_VARIABLE GIT_BRANCH
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET
+)
+if(NOT GIT_BRANCH)
+ message(NOTICE "Git branch: unknown")
+else()
+ message(NOTICE "Git branch: ${GIT_BRANCH}")
+endif()
+
+# Get the current commit date
+execute_process(
+ COMMAND git show --quiet --format=%cI --date=short
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ OUTPUT_VARIABLE GIT_COMMIT_DATE
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET
+)
+if(NOT GIT_COMMIT_DATE)
+ message(NOTICE "Git commit date: unknown")
+else()
+ message(NOTICE "Git commit date: ${GIT_COMMIT_DATE}")
+ string(REGEX MATCH "^[0-9][0-9][0-9][0-9]" GIT_COMMIT_YEAR "${GIT_COMMIT_DATE}")
+ message(NOTICE "Git commit year: ${GIT_COMMIT_YEAR}")
+endif()
+
+# Get the number of commits on the working branch
+execute_process(
+ COMMAND git rev-list --count --first-parent HEAD
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ OUTPUT_VARIABLE GIT_COMMIT_COUNT
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET
+)
+if(NOT GIT_COMMIT_COUNT)
+ message(NOTICE "Git commit count: unknown")
+else()
+ message(NOTICE "Git commit count: ${GIT_COMMIT_COUNT}")
+endif()
diff --git a/cmake/scripts/gitinfo.cmake b/cmake/scripts/gitinfo.cmake
new file mode 100644
index 0000000000..7ff8a599e0
--- /dev/null
+++ b/cmake/scripts/gitinfo.cmake
@@ -0,0 +1,3 @@
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
+include(GitInfo)
+configure_file("${INPUT_FILE}" "${OUTPUT_FILE}" @ONLY)