From 0fcf6adf1ca3a256bd0e5c1db40507874b9d65a8 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Fri, 16 Nov 2018 23:09:50 +0100 Subject: [PATCH] cmake: Move version setup into a separate .cmake file 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 | 47 ++---------------------------- cmake/QuasselVersion.cmake | 58 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 45 deletions(-) create mode 100644 cmake/QuasselVersion.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index b0860707..9f4e2356 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 index 00000000..6f2cbad5 --- /dev/null +++ b/cmake/QuasselVersion.cmake @@ -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}") -- 2.20.1