Browse Source

CMake: update version on each compiling

Ivan Romanov 7 years ago
parent
commit
3c1c72319b
4 changed files with 21 additions and 9 deletions
  1. 3 7
      CMakeLists.txt
  2. 2 2
      cmake_modules/GetGitRevisionDescription.cmake
  3. 6 0
      cmake_modules/Version.cmake
  4. 10 0
      lib/CMakeLists.txt

+ 3 - 7
CMakeLists.txt

@@ -28,9 +28,6 @@ project(VCMI)
 # - Try to get rid of FOLDER override with define_property
 # It's used currently to make sure that 3rd-party dependencies in git submodules get proper FOLDER property
 # - Make FindFuzzyLite check for the right version and disable FORCE_BUNDLED_FL by default
-# - Find a way to regenerate Version.cpp before each build.
-# PRE_BUILD only work for some generators.
-# So for now commit hash only updated when CMake reconfigured.
 
 ############################################
 #        User-provided options             #
@@ -88,10 +85,9 @@ define_property(
 
 # Generate Version.cpp
 if(ENABLE_GITVERSION)
-	include(GetGitRevisionDescription)
-	get_git_head_revision(GIT_REFSPEC GIT_SHA1)
-	configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Version.cpp.in" "${CMAKE_BINARY_DIR}/Version.cpp" @ONLY)
-	vcmi_print_git_commit_hash()
+	add_custom_target(update_version ALL
+		COMMAND ${CMAKE_COMMAND} -DGIT_SHA1="${GIT_SHA1}" -P "${CMAKE_MODULE_PATH}/Version.cmake"
+	)
 else()
 	add_definitions(-DVCMI_NO_EXTRA_VERSION)
 endif(ENABLE_GITVERSION)

+ 2 - 2
cmake_modules/GetGitRevisionDescription.cmake

@@ -40,7 +40,7 @@ set(__get_git_revision_description YES)
 get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
 
 function(get_git_head_revision _refspecvar _hashvar)
-	set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
+	set(GIT_PARENT_DIR "${CMAKE_CURRENT_LIST_DIR}")
 	set(GIT_DIR "${GIT_PARENT_DIR}/.git")
 	while(NOT EXISTS "${GIT_DIR}")	# .git dir not found, search parent directories
 		set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
@@ -110,7 +110,7 @@ function(git_describe _var)
 		${hash}
 		${ARGN}
 		WORKING_DIRECTORY
-		"${CMAKE_CURRENT_SOURCE_DIR}"
+		"${CMAKE_CURRENT_LIST_DIR}"
 		RESULT_VARIABLE
 		res
 		OUTPUT_VARIABLE

+ 6 - 0
cmake_modules/Version.cmake

@@ -0,0 +1,6 @@
+set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
+include(GetGitRevisionDescription)
+include(VCMIUtils)
+get_git_head_revision(GIT_REFSPEC GIT_SHA1)
+configure_file("${CMAKE_CURRENT_LIST_DIR}/../Version.cpp.in" "Version.cpp" @ONLY)
+vcmi_print_git_commit_hash()

+ 10 - 0
lib/CMakeLists.txt

@@ -156,6 +156,11 @@ set(lib_SRCS
 		${VCMILIB_ADDITIONAL_SOURCES}
 )
 
+# Version.cpp is a generated file
+set_source_files_properties(${CMAKE_BINARY_DIR}/Version.cpp
+	PROPERTIES GENERATED TRUE
+)
+
 set(lib_HEADERS
 		StdInc.h
 		../Global.h
@@ -363,4 +368,9 @@ add_custom_command(TARGET vcmi POST_BUILD
 	COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/Mods ${CMAKE_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}/Mods
 )
 
+# Update version before vcmi compiling
+if(TARGET update_version)
+	add_dependencies(vcmi update_version)
+endif()
+
 install(TARGETS vcmi RUNTIME DESTINATION ${LIB_DIR} LIBRARY DESTINATION ${LIB_DIR})