Skip to content

Commit 8e59367

Browse files
Get version string from git-describe, git-archive or CMake config
1 parent bc7debe commit 8e59367

File tree

14 files changed

+56
-38
lines changed

14 files changed

+56
-38
lines changed

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
debian/ export-ignore
22
.gitattributes export-ignore
3+
icinga-archive-version.cmake export-subst

.github/ISSUE_TEMPLATE/release.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ assignees: ''
99

1010
# Release Workflow
1111

12-
- [ ] Update `ICINGA2_VERSION`
12+
- [ ] Update `ICINGA2_PACKAGE_VERSION` in CMakeLists.txt
1313
- [ ] Update bundled Windows dependencies
1414
- [ ] Harden global TLS defaults (consult https://ssl-config.mozilla.org)
1515
- [ ] Update `CHANGELOG.md`

CMakeLists.txt

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
cmake_minimum_required(VERSION 3.17...3.17)
55
set(BOOST_MIN_VERSION "1.66.0")
66

7+
set(ICINGA2_VERSION "2.15.0")
8+
79
set(CMAKE_CXX_STANDARD 17)
810
set(CMAKE_CXX_STANDARD_REQUIRED ON)
911
set(CMAKE_CXX_EXTENSIONS OFF)
@@ -54,6 +56,11 @@ set(ICINGA2_GIT_VERSION_INFO ON CACHE BOOL "Whether to use git describe")
5456
set(ICINGA2_UNITY_BUILD ON CACHE BOOL "Whether to perform a unity build")
5557
set(ICINGA2_LTO_BUILD OFF CACHE BOOL "Whether to use LTO")
5658

59+
option(ICINGA2_INCLUDE_PACKAGE_INFO "Include package version in 'icinga2 --version'" OFF)
60+
set(ICINGA2_PACKAGE_VERSION ${ICINGA2_VERSION} CACHE STRING "Version used when packaging Icinga 2")
61+
set(ICINGA2_PACKAGE_REVISION "1" CACHE STRING "Revision used when packaging Icinga 2")
62+
set(ICINGA2_PACKAGE_VENDOR "Icinga GmbH" CACHE STRING "Vendor string used when packaging Icinga 2")
63+
5764
set(ICINGA2_CONFIGDIR "${CMAKE_INSTALL_SYSCONFDIR}/icinga2" CACHE FILEPATH "Main config directory, e.g. /etc/icinga2")
5865
set(ICINGA2_CACHEDIR "${CMAKE_INSTALL_LOCALSTATEDIR}/cache/icinga2" CACHE FILEPATH "Directory for cache files, e.g. /var/cache/icinga2")
5966
set(ICINGA2_DATADIR "${CMAKE_INSTALL_LOCALSTATEDIR}/lib/icinga2" CACHE FILEPATH "Data directory for the daemon, e.g. /var/lib/icinga2")
@@ -97,33 +104,17 @@ file(READ "${CMAKE_CURRENT_SOURCE_DIR}/COPYING" ICINGA2_LICENSE_GPL)
97104
set(ICINGA2_LICENSE "${ICINGA2_LICENSE_GPL}\n\n---\n\n${ICINGA2_LICENSE_ADDITIONS}")
98105
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt" ${ICINGA2_LICENSE})
99106

100-
file(STRINGS ICINGA2_VERSION SPEC_VERSION REGEX "^Version:")
101-
string(LENGTH "${SPEC_VERSION}" SPEC_VERSION_LENGTH)
102-
math(EXPR SPEC_VERSION_LENGTH "${SPEC_VERSION_LENGTH} - 9")
103-
string(SUBSTRING ${SPEC_VERSION} 9 ${SPEC_VERSION_LENGTH} SPEC_VERSION)
104-
105-
configure_file(icinga-spec-version.h.cmake icinga-spec-version.h)
106-
107107
include(GetGitRevisionDescription)
108-
git_describe(GIT_VERSION --tags)
109-
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/icinga-version.h.force)
110-
configure_file(icinga-version.h.force ${CMAKE_CURRENT_BINARY_DIR}/icinga-version.h COPYONLY)
111-
else()
112-
if(NOT ICINGA2_GIT_VERSION_INFO OR GIT_VERSION MATCHES "-NOTFOUND$")
113-
file(STRINGS ICINGA2_VERSION SPEC_REVISION REGEX "^Revision: ")
114-
string(LENGTH "${SPEC_REVISION}" SPEC_REVISION_LENGTH)
115-
math(EXPR SPEC_REVISION_LENGTH "${SPEC_REVISION_LENGTH} - 10")
116-
string(SUBSTRING ${SPEC_REVISION} 10 ${SPEC_REVISION_LENGTH} SPEC_REVISION)
117-
118-
set(GIT_VERSION "r${SPEC_VERSION}-${SPEC_REVISION}")
119-
set(ICINGA2_VERSION "${SPEC_VERSION}")
120-
else()
121-
# use GIT version as ICINGA2_VERSION
122-
string(REGEX REPLACE "^[rv]" "" ICINGA2_VERSION "${GIT_VERSION}")
108+
git_describe(ICINGA2_VERSION)
109+
if(NOT ICINGA2_GIT_VERSION_INFO OR ICINGA2_VERSION MATCHES "-NOTFOUND$")
110+
include(icinga-archive-version.cmake)
111+
if(ICINGA2_VERSION MATCHES "^\\$.*")
112+
set(ICINGA2_VERSION "v${ICINGA2_PACKAGE_VERSION}-${ICINGA2_PACKAGE_REVISION}")
123113
endif()
124-
configure_file(icinga-version.h.cmake icinga-version.h)
125114
endif()
126115

116+
configure_file(icinga-version.h.in icinga-version.h)
117+
127118
# NuGet on Windows requires a semantic versioning, example: 2.10.4.123 (only 4 element, only numeric)
128119
string(REGEX REPLACE "-([0-9]+).*$" ".\\1" ICINGA2_VERSION_SAFE "${ICINGA2_VERSION}")
129120
string(REGEX REPLACE "-[^\\.]*(.*)$" "\\1" ICINGA2_VERSION_SAFE "${ICINGA2_VERSION_SAFE}")
@@ -496,7 +487,7 @@ if(BUILD_TESTING)
496487
endif()
497488

498489
set(CPACK_PACKAGE_NAME "Icinga 2")
499-
set(CPACK_PACKAGE_VENDOR "Icinga GmbH")
490+
set(CPACK_PACKAGE_VENDOR ${ICINGA2_PACKAGE_VENDOR})
500491
set(CPACK_PACKAGE_VERSION ${ICINGA2_VERSION_SAFE})
501492
set(CPACK_PACKAGE_INSTALL_DIRECTORY "ICINGA2")
502493
set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icinga-app\\\\icinga.ico")

ICINGA2_VERSION

Lines changed: 0 additions & 2 deletions
This file was deleted.

icinga-archive-version.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
set(ICINGA2_VERSION "$Format:%(describe)$")

icinga-spec-version.h.cmake

Lines changed: 0 additions & 1 deletion
This file was deleted.

icinga-version.h.cmake

Lines changed: 0 additions & 2 deletions
This file was deleted.

icinga-version.h.in

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#define VERSION "${ICINGA2_VERSION}"
2+
3+
#cmakedefine01 ICINGA2_INCLUDE_PACKAGE_INFO
4+
#define PACKAGE_VERSION "${ICINGA2_PACKAGE_VERSION}"
5+
#define PACKAGE_REVISION "${ICINGA2_PACKAGE_REVISION}"
6+
#define PACKAGE_VENDOR "${ICINGA2_PACKAGE_VENDOR}"

lib/base/application-version.cpp

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
#include "base/application.hpp"
44
#include "icinga-version.h"
5-
#include "icinga-spec-version.h"
65

76
using namespace icinga;
87

@@ -11,7 +10,22 @@ String Application::GetAppVersion()
1110
return VERSION;
1211
}
1312

14-
String Application::GetAppSpecVersion()
13+
bool Application::GetAppIncludePackageInfo()
1514
{
16-
return SPEC_VERSION;
15+
return ICINGA2_INCLUDE_PACKAGE_INFO;
16+
}
17+
18+
String Application::GetAppPackageVersion()
19+
{
20+
return PACKAGE_VERSION;
21+
}
22+
23+
String Application::GetAppPackageRevision()
24+
{
25+
return PACKAGE_REVISION;
26+
}
27+
28+
String Application::GetAppPackageVendor()
29+
{
30+
return PACKAGE_VENDOR;
1731
}

lib/base/application.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,12 @@ void Application::DisplayInfoMessage(std::ostream& os, bool skipVersion)
570570
<< " Build host: " << systemNS->Get("BuildHostName") << "\n"
571571
<< " OpenSSL version: " << GetOpenSSLVersion() << "\n";
572572

573+
if (Application::GetAppIncludePackageInfo()) {
574+
os << "\nPackage information:\n"
575+
<< " Version: " << Application::GetAppPackageVersion() << "-" << Application::GetAppPackageRevision() << "\n"
576+
<< " Vendor: " << Application::GetAppPackageVendor() << "\n";
577+
}
578+
573579
os << "\nApplication information:\n"
574580
<< "\nGeneral paths:\n"
575581
<< " Config directory: " << Configuration::ConfigDir << "\n"

0 commit comments

Comments
 (0)