Always Update Git information when rebuilding (#4696)
authorAndres Noetzli <andres.noetzli@gmail.com>
Fri, 10 Jul 2020 22:35:17 +0000 (15:35 -0700)
committerGitHub <noreply@github.com>
Fri, 10 Jul 2020 22:35:17 +0000 (15:35 -0700)
Commit 61734b41b7b96e7e7cbf46021a357d840d64b42e changed the way some of
our source files are generated. However, the change meant that once
`git_versioninfo.cpp` was generated, it was never updated again: The
custom command for `git_versioninfo.cpp` has no dependencies, so CMake
does not rebuild it unless the output file is missing [0]. This commit
reverts the change to our `gen-gitinfo` target and adds `git_versioninfo.cpp`
to `BYPRODUCTS` for the target to indicate that the file may have changed.
I am not sure if there is a better solution because we actually have to run
`GitInfo.cmake` to see if there have been any changes in the Git information.
Introducing a dependency on all source files is not sufficient because other
files or just the branch name may change. Note: The original solution only
updates the timestamp of `git_versioninfo.cpp` if its contents actually
change (`GitInfo.cmake` uses `configure_file()` to generate
`git_versioninfo.cpp`, which only updates the timestamp when the
contents changed [1]), so we don't do any unnecessary work.

[0] https://cmake.org/cmake/help/latest/command/add_custom_command.html
[1] https://cmake.org/cmake/help/latest/command/configure_file.html

Signed-off-by: Andrew V. Jones <andrew.jones@vector.com>
Co-authored-by: Andrew V. Jones <andrew.jones@vector.com>
src/base/CMakeLists.txt

index 96b18823826195d691550167630ec8396790b212..a34716fea6e2c9b8de6567acd6b04995b28fe6d8 100644 (file)
@@ -4,17 +4,9 @@
 
 find_package(Git)
 configure_file(GitInfo.cmake.in GitInfo.cmake @ONLY)
-add_custom_command(
-  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/git_versioninfo.cpp
-  COMMAND ${CMAKE_COMMAND} -DGIT_FOUND=${GIT_FOUND} -P GitInfo.cmake
-)
-set_source_files_properties(
-  ${CMAKE_CURRENT_BINARY_DIR}/git_versioninfo.cpp
-  PROPERTIES GENERATED TRUE
-)
 add_custom_target(gen-gitinfo
-  DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/git_versioninfo.cpp
-)
+  BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/git_versioninfo.cpp
+  COMMAND ${CMAKE_COMMAND} -DGIT_FOUND=${GIT_FOUND} -P GitInfo.cmake)
 
 #-----------------------------------------------------------------------------#