diff --git a/cmake/git_revision.cmake b/cmake/git_revision.cmake new file mode 100644 index 0000000000000000000000000000000000000000..c18a046df85aa7c8f748e0f3388af9009d7ccc49 --- /dev/null +++ b/cmake/git_revision.cmake @@ -0,0 +1,20 @@ +# --------------- get git revision info --------------- + +# quite hugly but seems necessary +set(CMAKE_CURRENT_SOURCE_DIR ${INVOCATION_DIR}) + +list(APPEND CMAKE_MODULE_PATH "${INVOCATION_DIR}/../cmake/cmake-modules") +include(GetGitRevisionDescription) + +git_describe(PASTIS_VERSION "--abbrev=0") +get_git_head_revision(PASTIS_HEAD PASTIS_HASH) +git_local_changes(PASTIS_HAS_LOCAL_CHANGES) + +if(${PASTIS_HAS_LOCAL_CHANGES} STREQUAL "CLEAN") + set(PASTIS_IS_CLEAN true) +else() + set(PASTIS_IS_CLEAN false) +endif() + +# Generates revision header file candidate +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/pastis_git_revision.hpp.in" "${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision" @ONLY) diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index 73cfdd7bdaccb1cb6ac18c6555a50233817dff00..d191e66a07776064cbd1afb1864e989602020ff7 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -9,24 +9,12 @@ add_library( # --------------- get git revision info --------------- -list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/cmake-modules") -include(GetGitRevisionDescription) - -git_describe(PASTIS_VERSION "--abbrev=0") -get_git_head_revision(PASTIS_HEAD PASTIS_HASH) -git_local_changes(PASTIS_HAS_LOCAL_CHANGES) - -if(${PASTIS_HAS_LOCAL_CHANGES} STREQUAL "CLEAN") - set(PASTIS_IS_CLEAN true) -else() - set(PASTIS_IS_CLEAN false) -endif() - # Generates revision header file add_custom_target( - git_revision + PastisGitRevison ALL - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp) + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp +) set_source_files_properties( ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp @@ -35,7 +23,31 @@ set_source_files_properties( HEADER_FILE_ONLY TRUE ) -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/pastis_git_revision.hpp.in" "${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp" @ONLY) +# --------- check git revision info at build ---------- + +add_custom_command(TARGET PastisGitRevison + COMMAND ${CMAKE_COMMAND} -E remove -f + ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp + COMMENT "" + ) + +add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp + PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision + ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp + COMMENT "" + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision + VERBATIM + ) + +add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision + PRE_BUILD + COMMAND ${CMAKE_COMMAND} -DINVOCATION_DIR=${CMAKE_CURRENT_SOURCE_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/git_revision.cmake + COMMENT "Check pastis git status" + VERBATIM + ) list( APPEND @@ -47,4 +59,4 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}) # Additional dependencies add_dependencies( PastisUtils - git_revision) + PastisGitRevison)