find_package(Git) if (GIT_FOUND) execute_process( COMMAND ${GIT_EXECUTABLE} describe --tags --always WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE ENGINE_VERSION RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET ) execute_process( COMMAND ${GIT_EXECUTABLE} log -1 --format=%h WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE ENGINE_HASH RESULT_VARIABLE GIT_HASH_ERROR_CODE OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET ) execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET ) set(GIT_DEPS "${CMAKE_SOURCE_DIR}/.git/HEAD") if(GIT_BRANCH AND EXISTS "${CMAKE_SOURCE_DIR}/.git/refs/heads/${GIT_BRANCH}") list(APPEND GIT_DEPS "${CMAKE_SOURCE_DIR}/.git/refs/heads/${GIT_BRANCH}") endif() # Optionnel : index pour les modifications stagées if(EXISTS "${CMAKE_SOURCE_DIR}/.git/index") list(APPEND GIT_DEPS "${CMAKE_SOURCE_DIR}/.git/index") endif() # On définit la propriété pour le répertoire source. set_directory_properties(PROPERTIES CMAKE_CONFIGURE_DEPENDS "${GIT_DEPS}") endif() # Fallback if (NOT ENGINE_VERSION OR GIT_DESCRIBE_ERROR_CODE) set(ENGINE_VERSION "0.0.0") message(WARNING "No Git tag found, using default version ${ENGINE_VERSION}, fix this....") endif() if (NOT ENGINE_HASH OR GIT_HASH_ERROR_CODE) set(ENGINE_HASH "0000000") message(WARNING "No Git hash found, using default hash ${ENGINE_HASH}") endif() string(REGEX REPLACE "^v" "" ENGINE_VERSION "${ENGINE_VERSION}")