cmake: Move version setup into a separate .cmake file
authorManuel Nickschas <sputnick@quassel-irc.org>
Fri, 16 Nov 2018 22:09:50 +0000 (23:09 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Sun, 18 Nov 2018 10:06:43 +0000 (11:06 +0100)
Introduce a new QuasselVersion.cmake that contains the hard-coded
version, as well as the code for retrieving version information from
git (if available). This file also sets up version.h with the given
information. Remove the corresponding code from the main
CMakeLists.txt.

Output the git revision at configure time if available, which helps
when analyzing build logs.

CMakeLists.txt
cmake/QuasselVersion.cmake [new file with mode: 0644]

index b086070..9f4e235 100644 (file)
@@ -11,14 +11,8 @@ cmake_minimum_required(VERSION 3.5)
 # Tell CMake about or own modules
 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
 
-# Versions
-set(QUASSEL_MAJOR  0)
-set(QUASSEL_MINOR 13)
-set(QUASSEL_PATCH 50)
-set(QUASSEL_VERSION_STRING "0.14-pre")
-
-# Output CMake and Quassel versions as well as build type for debug reasons
-message(STATUS "Building Quassel ${QUASSEL_VERSION_STRING}...")
+include(QuasselVersion)
+
 message(STATUS "Using CMake ${CMAKE_VERSION}")
 
 # Set up build type rather early
@@ -470,43 +464,6 @@ if (WIN32)
     endif()
 endif()
 
-# Generate version information from Git
-#####################################################################
-
-include(GetGitRevisionDescription)
-get_git_head_revision(GIT_REFSPEC GIT_HEAD)
-git_describe(GIT_DESCRIBE --long)
-
-# If in a Git repo we can get the commit-date from a git command
-if (GIT_HEAD)
-    execute_process(
-        COMMAND git -c log.showsignature=false show -s --format=%ct
-        WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
-        OUTPUT_VARIABLE GIT_COMMIT_DATE
-        OUTPUT_STRIP_TRAILING_WHITESPACE
-    )
-endif()
-
-# If not in a Git repo try to read GIT_HEAD and GIT_DESCRIBE from
-# enviroment
-if (NOT GIT_HEAD OR NOT GIT_DESCRIBE)
-  if (DEFINED ENV{GIT_HEAD})
-      set(GIT_HEAD $ENV{GIT_HEAD})
-  endif()
-  if (DEFINED ENV{GIT_DESCRIBE})
-     set(GIT_DESCRIBE $ENV{GIT_DESCRIBE})
-  endif()
-endif()
-
-# Sanitize things if we're not in a Git repo
-if (NOT GIT_HEAD OR NOT GIT_DESCRIBE)
-    set(GIT_HEAD "")
-    set(GIT_DESCRIBE "")
-    set(GIT_COMMIT_DATE 0)
-endif()
-
-configure_file(version.h.in ${CMAKE_BINARY_DIR}/version.h @ONLY)
-
 # Prepare the build
 #####################################################################
 
diff --git a/cmake/QuasselVersion.cmake b/cmake/QuasselVersion.cmake
new file mode 100644 (file)
index 0000000..6f2cbad
--- /dev/null
@@ -0,0 +1,58 @@
+# Set up version-related information
+###############################################################################
+
+# Quassel version
+set(QUASSEL_MAJOR  0)
+set(QUASSEL_MINOR 13)
+set(QUASSEL_PATCH 50)
+set(QUASSEL_VERSION_STRING "0.14-pre")
+
+# Get additional version information from Git
+include(GetGitRevisionDescription)
+get_git_head_revision(GIT_REFSPEC GIT_HEAD)
+git_describe(GIT_DESCRIBE --long)
+
+# If in a Git repo we can get the commit-date from a git command
+if (GIT_HEAD)
+    find_program(GIT_COMMAND NAMES git)
+    if (GIT_COMMAND)
+        execute_process(
+            COMMAND ${GIT_COMMAND} -c log.showsignature=false show -s --format=%ct
+            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+            OUTPUT_VARIABLE GIT_COMMIT_DATE
+            OUTPUT_STRIP_TRAILING_WHITESPACE
+        )
+    endif()
+endif()
+
+# If not in a Git repo try to read GIT_HEAD and GIT_DESCRIBE from enviroment
+if (NOT GIT_HEAD OR NOT GIT_DESCRIBE)
+  if (DEFINED ENV{GIT_HEAD})
+      set(GIT_HEAD $ENV{GIT_HEAD})
+  endif()
+  if (DEFINED ENV{GIT_DESCRIBE})
+     set(GIT_DESCRIBE $ENV{GIT_DESCRIBE})
+  endif()
+endif()
+
+# Sanitize things if we're not in a Git repo
+if (NOT GIT_HEAD OR NOT GIT_DESCRIBE)
+    set(GIT_HEAD "")
+    set(GIT_DESCRIBE "")
+    set(GIT_COMMIT_DATE 0)
+endif()
+
+# Ensure we have a sensible value for GIT_COMMIT_DATE
+if (NOT GIT_COMMIT_DATE)
+    set(GIT_COMMIT_DATE 0)
+endif()
+
+# Generate version header
+configure_file(version.h.in ${CMAKE_BINARY_DIR}/version.h @ONLY)
+
+# Output version, with commit hash if available
+if (GIT_HEAD)
+    string(SUBSTRING "${GIT_HEAD}" 0 7 extra_version)
+    set(extra_version " (git-${extra_version})")
+endif()
+message(STATUS "Building Quassel ${QUASSEL_VERSION_STRING}${extra_version}")