From 51e5c95792b7af3fb181e703b9b3fb8c05550d8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustavo=20Andr=C3=A9=20dos=20Santos=20Lopes?= Date: Tue, 20 Jan 2026 11:15:06 -0300 Subject: [PATCH] Add GIT_COMMIT cmake variable Running git is not always possible, either because there's no git checkout, there's no git available, or we're in a git subtree without access to reference git files. Allow passing GIT_COMMIT to cmake to bypass the git invocation. --- CMakeLists.txt | 2 ++ cmake/package.cmake | 25 +++++++++++++++---------- cmake/shared.cmake | 14 +++++++++----- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6f4602044..4134fcf9d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,8 @@ if(NOT CMAKE_BUILD_TYPE) endif() message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") +set(GIT_COMMIT "" CACHE STRING "Git commit hash (skips git invocation if set)") + option(LIBDDWAF_BUILD_SHARED "Build shared library" ON) option(LIBDDWAF_BUILD_STATIC "Build shared library" ON) option(LIBDDWAF_TESTING "Load test subdirectories and targets" ON) diff --git a/cmake/package.cmake b/cmake/package.cmake index 927bb1eb4..b2b624909 100644 --- a/cmake/package.cmake +++ b/cmake/package.cmake @@ -22,20 +22,25 @@ set(CPACK_GENERATOR "TGZ") set(CPACK_SOURCE_GENERATOR "TGZ") ## Package name -execute_process(COMMAND git describe --exact-match --tags HEAD - WORKING_DIRECTORY ${libddwaf_SOURCE_DIR} - OUTPUT_VARIABLE DDWAF_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_QUIET -) - -if (NOT DDWAF_VERSION) +if(GIT_COMMIT) set(DDWAF_VERSION ${CMAKE_PROJECT_VERSION}) - execute_process(COMMAND git rev-parse --short HEAD + string(SUBSTRING "${GIT_COMMIT}" 0 7 SHORT_BUILD_ID) +else() + execute_process(COMMAND git describe --exact-match --tags HEAD WORKING_DIRECTORY ${libddwaf_SOURCE_DIR} - OUTPUT_VARIABLE SHORT_BUILD_ID + OUTPUT_VARIABLE DDWAF_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET ) + + if (NOT DDWAF_VERSION) + set(DDWAF_VERSION ${CMAKE_PROJECT_VERSION}) + execute_process(COMMAND git rev-parse --short HEAD + WORKING_DIRECTORY ${libddwaf_SOURCE_DIR} + OUTPUT_VARIABLE SHORT_BUILD_ID + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + endif() endif() set(CPACK_PACKAGE_FILE_NAME ${CMAKE_PROJECT_NAME}-${DDWAF_VERSION}-${CMAKE_SYSTEM_NAME}-${LIBDDWAF_PACKAGE_PROCESSOR}) diff --git a/cmake/shared.cmake b/cmake/shared.cmake index 42964059a..29bda900b 100644 --- a/cmake/shared.cmake +++ b/cmake/shared.cmake @@ -1,8 +1,12 @@ -execute_process(COMMAND git rev-parse HEAD - WORKING_DIRECTORY ${libddwaf_SOURCE_DIR} - OUTPUT_VARIABLE BUILD_ID - OUTPUT_STRIP_TRAILING_WHITESPACE -) +if(GIT_COMMIT) + set(BUILD_ID "${GIT_COMMIT}") +else() + execute_process(COMMAND git rev-parse HEAD + WORKING_DIRECTORY ${libddwaf_SOURCE_DIR} + OUTPUT_VARIABLE BUILD_ID + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +endif() message(STATUS "Build id is ${BUILD_ID}") string(SUBSTRING "${BUILD_ID}" 0 2 BUILD_ID_PREFIX)