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)