From bbae0cfd10f316791a4a9211fcafc04a7ca6e146 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Mon, 19 Mar 2018 12:32:04 +0100
Subject: [PATCH] Fixed get git revision on build

---
 cmake/git_revision.cmake | 20 +++++++++++++++++
 utils/CMakeLists.txt     | 46 +++++++++++++++++++++++++---------------
 2 files changed, 49 insertions(+), 17 deletions(-)
 create mode 100644 cmake/git_revision.cmake

diff --git a/cmake/git_revision.cmake b/cmake/git_revision.cmake
new file mode 100644
index 000000000..c18a046df
--- /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 73cfdd7bd..d191e66a0 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)
-- 
GitLab