From a01f34ec7928e8526d7f42f324e529c2de43fbf4 Mon Sep 17 00:00:00 2001 From: Jan Holthuis Date: Fri, 7 May 2021 13:15:26 +0200 Subject: CMake: Fetch latest Git information on build without reconfig --- cmake/modules/GitInfo.cmake | 65 +++++++++++++++++++++++++++++++++++++++++++++ cmake/scripts/gitinfo.cmake | 3 +++ 2 files changed, 68 insertions(+) create mode 100644 cmake/modules/GitInfo.cmake create mode 100644 cmake/scripts/gitinfo.cmake (limited to 'cmake') 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) -- cgit v1.2.3