Skip to content

Commit e976de6

Browse files
Set projet's version in CMake
the patch is based on pmem/pmemstream and pmem/pmemkv projects. VERSION is set via 'project' command. An extra UMF_SRC_VERSION is set via helper function parsing 'git describe' output.
1 parent 05456ea commit e976de6

File tree

3 files changed

+83
-8
lines changed

3 files changed

+83
-8
lines changed

CMakeLists.txt

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,22 @@ project(
88
VERSION 0.1.0
99
LANGUAGES C)
1010

11+
# needed when UMF is used as an external project
12+
set(UMF_CMAKE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
13+
14+
list(APPEND CMAKE_MODULE_PATH "${UMF_CMAKE_SOURCE_DIR}/cmake")
15+
include(helpers)
16+
17+
# CMAKE_PROJECT_VERSION[.MAJOR|MINOR|PATCH] is set via 'project' command - it
18+
# cannot contain any "pre-release" part, though. We use custom "UMF_SRC_VERSION"
19+
# to store more accurate version - this var should be used, e.g., for creating
20+
# packages.
21+
set_source_version()
22+
message(
23+
STATUS
24+
"UMF version: ${CMAKE_PROJECT_VERSION} (source version: ${UMF_SRC_VERSION})"
25+
)
26+
1127
# Build Options
1228
option(UMF_BUILD_SHARED_LIBRARY "Build UMF as shared library" OFF)
1329
option(UMF_BUILD_LEVEL_ZERO_PROVIDER "Build Level Zero memory provider" ON)
@@ -109,12 +125,6 @@ include(CMakePackageConfigHelpers)
109125
include(GNUInstallDirs)
110126
find_package(PkgConfig)
111127

112-
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
113-
include(helpers)
114-
115-
# needed when UMF is used as an external project
116-
set(UMF_CMAKE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
117-
118128
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
119129
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
120130
set(CMAKE_UMF_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

cmake/helpers.cmake

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,70 @@
1010
include(CheckCCompilerFlag)
1111
include(CheckCXXCompilerFlag)
1212

13+
# src version shows the current version, as reported by 'git describe', unless
14+
# 'git' is not available, then fall back to the top-level defined version
15+
function(set_source_version)
16+
execute_process(
17+
COMMAND git describe --always
18+
OUTPUT_VARIABLE GIT_VERSION
19+
WORKING_DIRECTORY ${UMF_CMAKE_SOURCE_DIR}
20+
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
21+
22+
if(GIT_VERSION)
23+
# 1.5.0 - we're on a tag
24+
string(REGEX MATCHALL "\^([0-9]+\.[0-9]+\.[0-9]+)\$" MATCHES
25+
${GIT_VERSION})
26+
if(MATCHES)
27+
set(UMF_SRC_VERSION
28+
"${CMAKE_MATCH_1}"
29+
PARENT_SCOPE)
30+
return()
31+
endif()
32+
33+
# 1.5.0-rc1 - we're on a RC tag
34+
string(REGEX MATCHALL "\^([0-9]+\.[0-9]+\.[0-9]+\-rc[0-9]+)\$" MATCHES
35+
${GIT_VERSION})
36+
if(MATCHES)
37+
set(UMF_SRC_VERSION
38+
"${CMAKE_MATCH_1}"
39+
PARENT_SCOPE)
40+
return()
41+
endif()
42+
43+
# 1.5.0-rc1-19-gb8f78a329 -> 1.5.0-rc1.git19.gb8f78a329
44+
string(REGEX MATCHALL "([0-9.]*)-rc([0-9]*)-([0-9]*)-([0-9a-g]*)"
45+
MATCHES ${GIT_VERSION})
46+
if(MATCHES)
47+
set(UMF_SRC_VERSION
48+
"${CMAKE_MATCH_1}-rc${CMAKE_MATCH_2}.git${CMAKE_MATCH_3}.${CMAKE_MATCH_4}"
49+
PARENT_SCOPE)
50+
return()
51+
endif()
52+
53+
# 1.5.0-19-gb8f78a329 -> 1.5.0-git19.gb8f78a329
54+
string(REGEX MATCHALL "([0-9.]*)-([0-9]*)-([0-9a-g]*)" MATCHES
55+
${GIT_VERSION})
56+
if(MATCHES)
57+
set(UMF_SRC_VERSION
58+
"${CMAKE_MATCH_1}-git${CMAKE_MATCH_2}.${CMAKE_MATCH_3}"
59+
PARENT_SCOPE)
60+
return()
61+
endif()
62+
63+
# no full version is available (e.g. only a hash commit) or a pattern
64+
# was not recognized
65+
set(UMF_SRC_VERSION
66+
"${CMAKE_PROJECT_VERSION}.git.${GIT_VERSION}"
67+
PARENT_SCOPE)
68+
else()
69+
# git reported no version. Use version set up in the top-level CMake
70+
# with a "devel" suffix
71+
set(UMF_SRC_VERSION
72+
"${CMAKE_PROJECT_VERSION}-devel"
73+
PARENT_SCOPE)
74+
endif()
75+
endfunction()
76+
1377
# Sets ${ret} to version of program specified by ${name} in major.minor format
1478
function(get_program_version_major_minor name ret)
1579
execute_process(

src/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,9 @@ if(UMF_BUILD_SHARED_LIBRARY)
114114
WINDOWS_DEF_FILE ${CMAKE_CURRENT_SOURCE_DIR}/libumf.def)
115115
set(UMF_PRIVATE_COMPILE_DEFINITIONS ${UMF_PRIVATE_COMPILE_DEFINITIONS}
116116
"UMF_SHARED_LIBRARY")
117-
set_target_properties(umf PROPERTIES RUNTIME_OUTPUT_DIRECTORY
118-
${CMAKE_UMF_OUTPUT_DIRECTORY})
117+
set_target_properties(
118+
umf PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_UMF_OUTPUT_DIRECTORY}
119+
VERSION ${CMAKE_PROJECT_VERSION})
119120
else()
120121
add_umf_library(
121122
NAME umf

0 commit comments

Comments
 (0)