cmake_modules/revinfo.cmake
changeset 9150 79c58ff0d4b1
child 9151 1d2df388fcc6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake_modules/revinfo.cmake	Sat Jun 08 01:22:46 2013 +0200
@@ -0,0 +1,38 @@
+#detect Mercurial revision and init rev/hash information
+find_program(HGCOMMAND hg)
+if(HGCOMMAND AND (EXISTS ${CMAKE_SOURCE_DIR}/.hg))
+    execute_process(COMMAND ${HGCOMMAND} identify -in
+                    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+                    OUTPUT_VARIABLE internal_version
+                    ERROR_QUIET
+                )
+    #check local repo status
+    string(REGEX REPLACE "[^+]" "" HGCHANGED ${internal_version})
+    string(REGEX REPLACE "[0-9a-zA-Z]+(.*) ([0-9]+)(.*)" "\\2" HEDGEWARS_REVISION ${internal_version})
+    string(REGEX REPLACE "([0-9a-zA-Z]+)(.*) [0-9]+(.*)" "\\1" HEDGEWARS_HASH ${internal_version})
+
+    if(HGCHANGED)
+        message(${WARNING} "You have uncommitted changes in your repository!")
+    endif()
+    #let's assume that if you have hg you might be interested in debugging
+    set(default_build_type "DEBUG")
+    #write down hash and rev for easy picking should hg be missing
+    file(WRITE "${CMAKE_SOURCE_DIR}/share/version_info.txt" "Hedgewars versioning information, do not modify\nrev ${HEDGEWARS_REVISION}\nhash ${HEDGEWARS_HASH}\n")
+else()
+    set(default_build_type "RELEASE")
+    # when compiling outside rev control, fetch revision and hash information from version_info.txt
+    find_file(version_info version_info.txt PATH ${CMAKE_SOURCE_DIR}/share)
+    if(version_info)
+        file(STRINGS ${version_info} internal_version REGEX "rev")
+        string(REGEX REPLACE "rev ([0-9]*)" "\\1" HEDGEWARS_REVISION ${internal_version})
+        file(STRINGS ${version_info} internal_version REGEX "hash")
+        string(REGEX REPLACE "hash ([a-zA-Z0-9]*)" "\\1" HEDGEWARS_HASH ${internal_version})
+    else()
+        message(${WARNING} "${CMAKE_SOURCE_DIR}/share/version_info.txt not found, revision information "
+                           "will be incorrect!!! Contact your source provider to fix this!")
+        set(HEDGEWARS_REVISION "0000")
+        set(HEDGEWARS_HASH "unknown")
+    endif()
+endif()
+
+