cmake: Generate git_versioninfo.cpp on build time. (#2640)
authorMathias Preiner <mathias.preiner@gmail.com>
Mon, 15 Oct 2018 23:46:17 +0000 (16:46 -0700)
committerAina Niemetz <aina.niemetz@gmail.com>
Mon, 15 Oct 2018 23:46:17 +0000 (16:46 -0700)
src/CMakeLists.txt
src/base/CMakeLists.txt
src/base/GitInfo.cmake.in [new file with mode: 0644]

index 0ea7a68377585fd8af34e4505fef3bae9d6beaf9..e353d53c5f0f3c4c1b10bbe5f0c710706a399f74 100644 (file)
@@ -708,7 +708,7 @@ target_compile_definitions(cvc4
     -D__STDC_FORMAT_MACROS
 )
 # Add libcvc4 dependencies for generated sources.
-add_dependencies(cvc4 gen-expr gen-options gen-tags gen-theory)
+add_dependencies(cvc4 gen-expr gen-gitinfo gen-options gen-tags gen-theory)
 
 # Add library/include dependencies
 if(ENABLE_VALGRIND)
index 532ed475dd439804b6cabcd8b4fe98e9ae70bd48..db8eb8c3657a8113a94a6c0a16a0fddc6bf2be6f 100644 (file)
@@ -1,44 +1,13 @@
 #-----------------------------------------------------------------------------#
 # Extract info from Git for git_versioninfo.cpp
+# Note: GitInfo.cmake generates git_versioninfo.cpp.
 
 find_package(Git)
-
-set(GIT_BUILD "false")
-set(GIT_IS_DIRTY "false")
-set(GIT_SHA1 "")
-set(GIT_BRANCH "")
-
-if(GIT_FOUND)
-  # Get current git branch, result is != 0 if this is not a git repository
-  execute_process(
-    COMMAND ${GIT_EXECUTABLE} -C ${PROJECT_SOURCE_DIR} rev-parse --abbrev-ref HEAD
-    RESULT_VARIABLE GIT_RESULT
-    OUTPUT_VARIABLE GIT_BRANCH
-    OUTPUT_STRIP_TRAILING_WHITESPACE
-  )
-  if("${GIT_RESULT}" STREQUAL "0")
-    set(GIT_BUILD "true")
-    # Extract sha1 of HEAD
-    execute_process(
-      COMMAND ${GIT_EXECUTABLE} -C ${PROJECT_SOURCE_DIR} rev-parse HEAD
-      OUTPUT_VARIABLE GIT_SHA1
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-    )
-    # Result is != 0 if worktree is dirty
-    execute_process(
-      COMMAND ${GIT_EXECUTABLE} -C ${PROJECT_SOURCE_DIR} diff --quiet
-      RESULT_VARIABLE GIT_RESULT
-    )
-    if(NOT "${GIT_RESULT}" STREQUAL "0")
-      set(GIT_IS_DIRTY "true")
-    endif()
-  endif()
-endif()
+configure_file(GitInfo.cmake.in GitInfo.cmake @ONLY)
+add_custom_target(gen-gitinfo
+  COMMAND ${CMAKE_COMMAND} -DGIT_FOUND=${GIT_FOUND} -P GitInfo.cmake)
 
 #-----------------------------------------------------------------------------#
-# Generate git_versioninfo.cpp
-
-configure_file(git_versioninfo.cpp.in git_versioninfo.cpp)
 
 libcvc4_add_sources(
   configuration.cpp
diff --git a/src/base/GitInfo.cmake.in b/src/base/GitInfo.cmake.in
new file mode 100644 (file)
index 0000000..2d02095
--- /dev/null
@@ -0,0 +1,35 @@
+set(GIT_BUILD "false")
+set(GIT_IS_DIRTY "false")
+set(GIT_SHA1 "")
+set(GIT_BRANCH "")
+
+if(GIT_FOUND)
+  # Get current git branch, result is != 0 if this is not a git repository
+  execute_process(
+    COMMAND @GIT_EXECUTABLE@ -C @PROJECT_SOURCE_DIR@ rev-parse --abbrev-ref HEAD
+    RESULT_VARIABLE GIT_RESULT
+    OUTPUT_VARIABLE GIT_BRANCH
+    OUTPUT_STRIP_TRAILING_WHITESPACE
+  )
+  if("${GIT_RESULT}" STREQUAL "0")
+    set(GIT_BUILD "true")
+    # Extract sha1 of HEAD
+    execute_process(
+      COMMAND @GIT_EXECUTABLE@ -C @PROJECT_SOURCE_DIR@ rev-parse HEAD
+      OUTPUT_VARIABLE GIT_SHA1
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    # Result is != 0 if worktree is dirty
+    # Note: git diff HEAD shows both staged and unstaged changes.
+    execute_process(
+      COMMAND @GIT_EXECUTABLE@ -C @PROJECT_SOURCE_DIR@ diff HEAD --quiet
+      RESULT_VARIABLE GIT_RESULT
+    )
+    if(NOT "${GIT_RESULT}" STREQUAL "0")
+      set(GIT_IS_DIRTY "true")
+    endif()
+  endif()
+endif()
+
+configure_file(
+  @CMAKE_CURRENT_SOURCE_DIR@/git_versioninfo.cpp.in git_versioninfo.cpp)