Skip to content

Commit 19ccf94

Browse files
Add major, minor, patch and build versions to the version header (#27)
* Added major, minor, patch and build versions to the `version.h.in` Fixes #26. * made the build version a string * fixed the build folder being included in the git * Update CMakeLists.txt Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com> Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com>
1 parent 18beef4 commit 19ccf94

9 files changed

Lines changed: 63 additions & 5 deletions

File tree

CMakeLists.txt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,34 @@ function(packageProject)
4949
endif()
5050

5151
if(DEFINED PROJECT_VERSION_HEADER)
52+
# clear previous matches
53+
unset(CMAKE_MATCH_1)
54+
unset(CMAKE_MATCH_3)
55+
unset(CMAKE_MATCH_5)
56+
unset(CMAKE_MATCH_7)
57+
58+
string(REGEX MATCH "^([0-9]+)(\\.([0-9]+))?(\\.([0-9]+))?(\\.([0-9]+))?$" _
59+
"${PROJECT_VERSION}"
60+
)
61+
62+
set(PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1})
63+
set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_3})
64+
set(PROJECT_VERSION_PATCH ${CMAKE_MATCH_5})
65+
set(PROJECT_VERSION_TWEAK ${CMAKE_MATCH_7})
66+
67+
if(NOT DEFINED PROJECT_VERSION_MAJOR)
68+
set(PROJECT_VERSION_MAJOR "0")
69+
endif()
70+
if(NOT DEFINED PROJECT_VERSION_MINOR)
71+
set(PROJECT_VERSION_MINOR "0")
72+
endif()
73+
if(NOT DEFINED PROJECT_VERSION_PATCH)
74+
set(PROJECT_VERSION_PATCH "0")
75+
endif()
76+
if(NOT DEFINED PROJECT_VERSION_TWEAK)
77+
set(PROJECT_VERSION_TWEAK "0")
78+
endif()
79+
5280
string(TOUPPER ${PROJECT_NAME} UPPERCASE_PROJECT_NAME)
5381
configure_file(
5482
${PACKAGE_PROJECT_ROOT_PATH}/version.h.in

test/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ project(
99
)
1010

1111
if(TEST_INSTALLED_VERSION)
12-
find_package(dependency 1.2.3 REQUIRED)
12+
find_package(dependency 1.2 REQUIRED)
1313
find_package(namespaced_dependency 4.5.6 REQUIRED)
1414
find_package(transitive_dependency 7.8.9 REQUIRED)
1515
else()

test/dependency/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.14)
22

33
project(
44
dependency
5-
VERSION 1.2.3
5+
VERSION 1.2
66
LANGUAGES CXX
77
)
88

test/dependency/source/dependency.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,8 @@
44

55
void dependencyFunction() {
66
std::cout << "Using dependency version " << DEPENDENCY_VERSION << std::endl;
7+
std::cout << "Dependency version major: " << DEPENDENCY_VERSION_MAJOR << std::endl;
8+
std::cout << "Dependency version minor: " << DEPENDENCY_VERSION_MINOR << std::endl;
9+
std::cout << "Dependency version patch: " << DEPENDENCY_VERSION_PATCH << std::endl;
10+
std::cout << "Dependency version build: " << DEPENDENCY_VERSION_TWEAK << std::endl;
711
}

test/main.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,20 @@ int main() {
1212
ns::namespacedDependencyFunction();
1313
transitiveDependencyFunction();
1414
auto result = true;
15-
result &= DEPENDENCY_VERSION == std::string("1.2.3");
15+
result &= DEPENDENCY_VERSION == std::string("1.2");
16+
result &= DEPENDENCY_VERSION_MAJOR == 1;
17+
result &= DEPENDENCY_VERSION_MINOR == 2;
18+
result &= DEPENDENCY_VERSION_PATCH == 0;
19+
result &= DEPENDENCY_VERSION_TWEAK == 0;
1620
result &= NAMESPACED_DEPENDENCY_VERSION == std::string("4.5.6");
17-
result &= TRANSITIVE_DEPENDENCY_VERSION == std::string("7.8.9");
21+
result &= NAMESPACED_DEPENDENCY_VERSION_MAJOR == 4;
22+
result &= NAMESPACED_DEPENDENCY_VERSION_MINOR == 5;
23+
result &= NAMESPACED_DEPENDENCY_VERSION_PATCH == 6;
24+
result &= NAMESPACED_DEPENDENCY_VERSION_TWEAK == 0;
25+
result &= TRANSITIVE_DEPENDENCY_VERSION == std::string("7.8.9.21948124");
26+
result &= TRANSITIVE_DEPENDENCY_VERSION_MAJOR == 7;
27+
result &= TRANSITIVE_DEPENDENCY_VERSION_MINOR == 8;
28+
result &= TRANSITIVE_DEPENDENCY_VERSION_PATCH == 9;
29+
result &= TRANSITIVE_DEPENDENCY_VERSION_TWEAK == 21948124;
1830
return result ? 0 : 1;
1931
}

test/namespaced_dependency/source/namespaced_dependency.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,10 @@ namespace ns {
66
void namespacedDependencyFunction() {
77
std::cout << "Using namespaced_dependency version " << NAMESPACED_DEPENDENCY_VERSION
88
<< std::endl;
9+
10+
std::cout << "Dependency version major: " << NAMESPACED_DEPENDENCY_VERSION_MAJOR << std::endl;
11+
std::cout << "Dependency version minor: " << NAMESPACED_DEPENDENCY_VERSION_MINOR << std::endl;
12+
std::cout << "Dependency version patch: " << NAMESPACED_DEPENDENCY_VERSION_PATCH << std::endl;
13+
std::cout << "Dependency version build: " << NAMESPACED_DEPENDENCY_VERSION_TWEAK << std::endl;
914
}
1015
} // namespace ns

test/transitive_dependency/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.14)
22

33
project(
44
transitive_dependency
5-
VERSION 7.8.9
5+
VERSION 7.8.9.21948124
66
LANGUAGES CXX
77
)
88

test/transitive_dependency/source/transitive_dependency.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,8 @@
44

55
void TRANSITIVE_DEPENDENCY_EXPORT transitiveDependencyFunction() {
66
fmt::print("Using transitive_dependency version {}\n", TRANSITIVE_DEPENDENCY_VERSION);
7+
fmt::print("Dependency version major: {}\n", TRANSITIVE_DEPENDENCY_VERSION_MAJOR);
8+
fmt::print("Dependency version minor: {}\n", TRANSITIVE_DEPENDENCY_VERSION_MINOR);
9+
fmt::print("Dependency version patch: {}\n", TRANSITIVE_DEPENDENCY_VERSION_PATCH);
10+
fmt::print("Dependency version build: {}\n", TRANSITIVE_DEPENDENCY_VERSION_TWEAK);
711
}

version.h.in

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
#pragma once
22

33
#define @UPPERCASE_PROJECT_NAME@_VERSION "@PROJECT_VERSION@"
4+
5+
#define @UPPERCASE_PROJECT_NAME@_VERSION_MAJOR @PROJECT_VERSION_MAJOR@
6+
#define @UPPERCASE_PROJECT_NAME@_VERSION_MINOR @PROJECT_VERSION_MINOR@
7+
#define @UPPERCASE_PROJECT_NAME@_VERSION_PATCH @PROJECT_VERSION_PATCH@
8+
#define @UPPERCASE_PROJECT_NAME@_VERSION_TWEAK @PROJECT_VERSION_TWEAK@

0 commit comments

Comments
 (0)