mdbxmou 0.1.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +32 -0
- package/.github/workflows/publish.yml +27 -0
- package/.gitmodules +3 -0
- package/CMakeLists.txt +53 -0
- package/LICENSE +201 -0
- package/README.md +639 -0
- package/build.js +11 -0
- package/deps/libmdbx/.clang-format +3 -0
- package/deps/libmdbx/.cmake-format.yaml +3 -0
- package/deps/libmdbx/.le.ini +40 -0
- package/deps/libmdbx/CMakeLists.txt +1269 -0
- package/deps/libmdbx/COPYRIGHT +159 -0
- package/deps/libmdbx/ChangeLog.md +2786 -0
- package/deps/libmdbx/GNUmakefile +950 -0
- package/deps/libmdbx/LICENSE +177 -0
- package/deps/libmdbx/Makefile +16 -0
- package/deps/libmdbx/NOTICE +39 -0
- package/deps/libmdbx/README.md +863 -0
- package/deps/libmdbx/TODO.md +43 -0
- package/deps/libmdbx/cmake/compiler.cmake +1221 -0
- package/deps/libmdbx/cmake/profile.cmake +58 -0
- package/deps/libmdbx/cmake/utils.cmake +524 -0
- package/deps/libmdbx/conanfile.py +323 -0
- package/deps/libmdbx/docs/Doxyfile.in +2734 -0
- package/deps/libmdbx/docs/_preface.md +47 -0
- package/deps/libmdbx/docs/_restrictions.md +248 -0
- package/deps/libmdbx/docs/_starting.md +245 -0
- package/deps/libmdbx/docs/_toc.md +34 -0
- package/deps/libmdbx/docs/header.html +96 -0
- package/deps/libmdbx/example/CMakeLists.txt +6 -0
- package/deps/libmdbx/example/README.md +1 -0
- package/deps/libmdbx/example/example-mdbx.c +154 -0
- package/deps/libmdbx/example/sample-bdb.txt +77 -0
- package/deps/libmdbx/mdbx.h +6655 -0
- package/deps/libmdbx/mdbx.h++ +6428 -0
- package/deps/libmdbx/packages/buildroot/0001-package-libmdbx-new-package-library-database.patch +173 -0
- package/deps/libmdbx/src/alloy.c +54 -0
- package/deps/libmdbx/src/api-cold.c +543 -0
- package/deps/libmdbx/src/api-copy.c +912 -0
- package/deps/libmdbx/src/api-cursor.c +754 -0
- package/deps/libmdbx/src/api-dbi.c +315 -0
- package/deps/libmdbx/src/api-env.c +1434 -0
- package/deps/libmdbx/src/api-extra.c +165 -0
- package/deps/libmdbx/src/api-key-transform.c +197 -0
- package/deps/libmdbx/src/api-misc.c +286 -0
- package/deps/libmdbx/src/api-opts.c +575 -0
- package/deps/libmdbx/src/api-range-estimate.c +365 -0
- package/deps/libmdbx/src/api-txn-data.c +454 -0
- package/deps/libmdbx/src/api-txn.c +921 -0
- package/deps/libmdbx/src/atomics-ops.h +364 -0
- package/deps/libmdbx/src/atomics-types.h +97 -0
- package/deps/libmdbx/src/audit.c +109 -0
- package/deps/libmdbx/src/bits.md +34 -0
- package/deps/libmdbx/src/chk.c +1796 -0
- package/deps/libmdbx/src/cogs.c +309 -0
- package/deps/libmdbx/src/cogs.h +506 -0
- package/deps/libmdbx/src/coherency.c +170 -0
- package/deps/libmdbx/src/config.h.in +88 -0
- package/deps/libmdbx/src/cursor.c +2396 -0
- package/deps/libmdbx/src/cursor.h +391 -0
- package/deps/libmdbx/src/dbi.c +717 -0
- package/deps/libmdbx/src/dbi.h +142 -0
- package/deps/libmdbx/src/debug_begin.h +36 -0
- package/deps/libmdbx/src/debug_end.h +15 -0
- package/deps/libmdbx/src/dpl.c +486 -0
- package/deps/libmdbx/src/dpl.h +134 -0
- package/deps/libmdbx/src/dxb.c +1335 -0
- package/deps/libmdbx/src/env.c +607 -0
- package/deps/libmdbx/src/essentials.h +125 -0
- package/deps/libmdbx/src/gc-get.c +1345 -0
- package/deps/libmdbx/src/gc-put.c +970 -0
- package/deps/libmdbx/src/gc.h +40 -0
- package/deps/libmdbx/src/global.c +474 -0
- package/deps/libmdbx/src/internals.h +585 -0
- package/deps/libmdbx/src/layout-dxb.h +288 -0
- package/deps/libmdbx/src/layout-lck.h +289 -0
- package/deps/libmdbx/src/lck-posix.c +859 -0
- package/deps/libmdbx/src/lck-windows.c +607 -0
- package/deps/libmdbx/src/lck.c +174 -0
- package/deps/libmdbx/src/lck.h +110 -0
- package/deps/libmdbx/src/logging_and_debug.c +250 -0
- package/deps/libmdbx/src/logging_and_debug.h +159 -0
- package/deps/libmdbx/src/man1/mdbx_chk.1 +106 -0
- package/deps/libmdbx/src/man1/mdbx_copy.1 +95 -0
- package/deps/libmdbx/src/man1/mdbx_drop.1 +48 -0
- package/deps/libmdbx/src/man1/mdbx_dump.1 +101 -0
- package/deps/libmdbx/src/man1/mdbx_load.1 +105 -0
- package/deps/libmdbx/src/man1/mdbx_stat.1 +86 -0
- package/deps/libmdbx/src/mdbx.c++ +1837 -0
- package/deps/libmdbx/src/meta.c +656 -0
- package/deps/libmdbx/src/meta.h +168 -0
- package/deps/libmdbx/src/mvcc-readers.c +414 -0
- package/deps/libmdbx/src/node.c +365 -0
- package/deps/libmdbx/src/node.h +102 -0
- package/deps/libmdbx/src/ntdll.def +1246 -0
- package/deps/libmdbx/src/options.h +534 -0
- package/deps/libmdbx/src/osal.c +3485 -0
- package/deps/libmdbx/src/osal.h +587 -0
- package/deps/libmdbx/src/page-get.c +483 -0
- package/deps/libmdbx/src/page-iov.c +185 -0
- package/deps/libmdbx/src/page-iov.h +34 -0
- package/deps/libmdbx/src/page-ops.c +744 -0
- package/deps/libmdbx/src/page-ops.h +142 -0
- package/deps/libmdbx/src/pnl.c +236 -0
- package/deps/libmdbx/src/pnl.h +146 -0
- package/deps/libmdbx/src/preface.h +990 -0
- package/deps/libmdbx/src/proto.h +105 -0
- package/deps/libmdbx/src/refund.c +212 -0
- package/deps/libmdbx/src/sort.h +484 -0
- package/deps/libmdbx/src/spill.c +431 -0
- package/deps/libmdbx/src/spill.h +74 -0
- package/deps/libmdbx/src/table.c +107 -0
- package/deps/libmdbx/src/tls.c +551 -0
- package/deps/libmdbx/src/tls.h +43 -0
- package/deps/libmdbx/src/tools/chk.c +673 -0
- package/deps/libmdbx/src/tools/copy.c +166 -0
- package/deps/libmdbx/src/tools/drop.c +199 -0
- package/deps/libmdbx/src/tools/dump.c +515 -0
- package/deps/libmdbx/src/tools/load.c +831 -0
- package/deps/libmdbx/src/tools/stat.c +516 -0
- package/deps/libmdbx/src/tools/wingetopt.c +87 -0
- package/deps/libmdbx/src/tools/wingetopt.h +30 -0
- package/deps/libmdbx/src/tree-ops.c +1554 -0
- package/deps/libmdbx/src/tree-search.c +140 -0
- package/deps/libmdbx/src/txl.c +99 -0
- package/deps/libmdbx/src/txl.h +26 -0
- package/deps/libmdbx/src/txn.c +1083 -0
- package/deps/libmdbx/src/unaligned.h +205 -0
- package/deps/libmdbx/src/utils.c +32 -0
- package/deps/libmdbx/src/utils.h +76 -0
- package/deps/libmdbx/src/version.c.in +44 -0
- package/deps/libmdbx/src/walk.c +290 -0
- package/deps/libmdbx/src/walk.h +20 -0
- package/deps/libmdbx/src/windows-import.c +152 -0
- package/deps/libmdbx/src/windows-import.h +128 -0
- package/deps/libmdbx/test/CMakeLists.txt +317 -0
- package/deps/libmdbx/test/append.c++ +237 -0
- package/deps/libmdbx/test/base.h++ +92 -0
- package/deps/libmdbx/test/battery-tmux.sh +64 -0
- package/deps/libmdbx/test/cases.c++ +118 -0
- package/deps/libmdbx/test/chrono.c++ +134 -0
- package/deps/libmdbx/test/chrono.h++ +85 -0
- package/deps/libmdbx/test/config.c++ +643 -0
- package/deps/libmdbx/test/config.h++ +334 -0
- package/deps/libmdbx/test/copy.c++ +62 -0
- package/deps/libmdbx/test/dead.c++ +39 -0
- package/deps/libmdbx/test/dump-load.sh +40 -0
- package/deps/libmdbx/test/extra/crunched_delete.c++ +409 -0
- package/deps/libmdbx/test/extra/cursor_closing.c++ +410 -0
- package/deps/libmdbx/test/extra/dbi.c++ +229 -0
- package/deps/libmdbx/test/extra/doubtless_positioning.c++ +253 -0
- package/deps/libmdbx/test/extra/dupfix_addodd.c +94 -0
- package/deps/libmdbx/test/extra/dupfix_multiple.c++ +311 -0
- package/deps/libmdbx/test/extra/early_close_dbi.c++ +137 -0
- package/deps/libmdbx/test/extra/hex_base64_base58.c++ +118 -0
- package/deps/libmdbx/test/extra/maindb_ordinal.c++ +61 -0
- package/deps/libmdbx/test/extra/open.c++ +96 -0
- package/deps/libmdbx/test/extra/pcrf/README.md +2 -0
- package/deps/libmdbx/test/extra/pcrf/pcrf_test.c +380 -0
- package/deps/libmdbx/test/extra/probe.c++ +10 -0
- package/deps/libmdbx/test/extra/txn.c++ +407 -0
- package/deps/libmdbx/test/extra/upsert_alldups.c +193 -0
- package/deps/libmdbx/test/fork.c++ +263 -0
- package/deps/libmdbx/test/hill.c++ +447 -0
- package/deps/libmdbx/test/jitter.c++ +197 -0
- package/deps/libmdbx/test/keygen.c++ +393 -0
- package/deps/libmdbx/test/keygen.h++ +130 -0
- package/deps/libmdbx/test/log.c++ +358 -0
- package/deps/libmdbx/test/log.h++ +91 -0
- package/deps/libmdbx/test/main.c++ +706 -0
- package/deps/libmdbx/test/nested.c++ +318 -0
- package/deps/libmdbx/test/osal-unix.c++ +647 -0
- package/deps/libmdbx/test/osal-windows.c++ +440 -0
- package/deps/libmdbx/test/osal.h++ +41 -0
- package/deps/libmdbx/test/stochastic.sh +690 -0
- package/deps/libmdbx/test/stub/LICENSE +24 -0
- package/deps/libmdbx/test/stub/README.md +8 -0
- package/deps/libmdbx/test/stub/pthread_barrier.c +104 -0
- package/deps/libmdbx/test/stub/pthread_barrier.h +77 -0
- package/deps/libmdbx/test/test.c++ +1551 -0
- package/deps/libmdbx/test/test.h++ +298 -0
- package/deps/libmdbx/test/tmux.conf +3 -0
- package/deps/libmdbx/test/try.c++ +30 -0
- package/deps/libmdbx/test/ttl.c++ +240 -0
- package/deps/libmdbx/test/utils.c++ +203 -0
- package/deps/libmdbx/test/utils.h++ +326 -0
- package/deps/libmdbx/test/valgrind_suppress.txt +536 -0
- package/lib/mdbx_evn_async.js +211 -0
- package/lib/mdbx_worker.js +195 -0
- package/lib/nativemou.js +6 -0
- package/package.json +38 -0
- package/src/async/envmou_close.cpp +34 -0
- package/src/async/envmou_close.hpp +32 -0
- package/src/async/envmou_copy_to.cpp +29 -0
- package/src/async/envmou_copy_to.hpp +38 -0
- package/src/async/envmou_keys.cpp +201 -0
- package/src/async/envmou_keys.hpp +50 -0
- package/src/async/envmou_open.cpp +38 -0
- package/src/async/envmou_open.hpp +33 -0
- package/src/async/envmou_query.cpp +167 -0
- package/src/async/envmou_query.hpp +53 -0
- package/src/dbimou.cpp +522 -0
- package/src/dbimou.hpp +82 -0
- package/src/env_arg0.hpp +24 -0
- package/src/envmou.cpp +445 -0
- package/src/envmou.hpp +116 -0
- package/src/modulemou.cpp +113 -0
- package/src/querymou.cpp +177 -0
- package/src/querymou.hpp +93 -0
- package/src/txnmou.cpp +254 -0
- package/src/txnmou.hpp +122 -0
- package/src/typemou.hpp +239 -0
- package/src/valuemou.hpp +194 -0
- package/test/async.js +67 -0
- package/test/e3.js +38 -0
- package/test/e4.js +89 -0
- package/test/e5.js +162 -0
- package/test/test-batch-ops.js +243 -0
- package/test/test-cursor-mode.js +84 -0
- package/test/test-multi-mode.js +87 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Copyright (c) 2012-2025 Леонид Юрьев aka Leonid Yuriev <leo@yuriev.ru> ###############################################
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
if(CMAKE_VERSION VERSION_LESS 3.8.2)
|
|
5
|
+
cmake_minimum_required(VERSION 3.0.2)
|
|
6
|
+
elseif(CMAKE_VERSION VERSION_LESS 3.12)
|
|
7
|
+
cmake_minimum_required(VERSION 3.8.2)
|
|
8
|
+
else()
|
|
9
|
+
cmake_minimum_required(VERSION 3.12)
|
|
10
|
+
endif()
|
|
11
|
+
|
|
12
|
+
cmake_policy(PUSH)
|
|
13
|
+
cmake_policy(VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION})
|
|
14
|
+
|
|
15
|
+
unset(MEMCHECK_OPTION_NAME)
|
|
16
|
+
if(NOT DEFINED ENABLE_MEMCHECK)
|
|
17
|
+
if(DEFINED MDBX_USE_VALGRIND)
|
|
18
|
+
set(MEMCHECK_OPTION_NAME "MDBX_USE_VALGRIND")
|
|
19
|
+
elseif(DEFINED ENABLE_VALGRIND)
|
|
20
|
+
set(MEMCHECK_OPTION_NAME "ENABLE_VALGRIND")
|
|
21
|
+
else()
|
|
22
|
+
set(MEMCHECK_OPTION_NAME "ENABLE_MEMCHECK")
|
|
23
|
+
endif()
|
|
24
|
+
if(MEMCHECK_OPTION_NAME STREQUAL "ENABLE_MEMCHECK")
|
|
25
|
+
option(ENABLE_MEMCHECK "Enable integration with valgrind, a memory analyzing tool" OFF)
|
|
26
|
+
elseif(${MEMCHECK_OPTION_NAME})
|
|
27
|
+
set(ENABLE_MEMCHECK ON)
|
|
28
|
+
else()
|
|
29
|
+
set(ENABLE_MEMCHECK OFF)
|
|
30
|
+
endif()
|
|
31
|
+
endif()
|
|
32
|
+
|
|
33
|
+
include(CheckLibraryExists)
|
|
34
|
+
check_library_exists(gcov __gcov_flush "" HAVE_GCOV)
|
|
35
|
+
|
|
36
|
+
option(ENABLE_GCOV "Enable integration with gcov, a code coverage program" OFF)
|
|
37
|
+
|
|
38
|
+
option(ENABLE_GPROF "Enable integration with gprof, a performance analyzing tool" OFF)
|
|
39
|
+
|
|
40
|
+
option(ENABLE_ASAN "Enable AddressSanitizer, a fast memory error detector based on compiler instrumentation" OFF)
|
|
41
|
+
|
|
42
|
+
option(ENABLE_UBSAN
|
|
43
|
+
"Enable UndefinedBehaviorSanitizer, a fast undefined behavior detector based on compiler instrumentation" OFF)
|
|
44
|
+
|
|
45
|
+
if(ENABLE_MEMCHECK)
|
|
46
|
+
if(CMAKE_CXX_COMPILER_LOADED)
|
|
47
|
+
include(CheckIncludeFileCXX)
|
|
48
|
+
check_include_file_cxx(valgrind/memcheck.h HAVE_VALGRIND_MEMCHECK_H)
|
|
49
|
+
else()
|
|
50
|
+
include(CheckIncludeFile)
|
|
51
|
+
check_include_file(valgrind/memcheck.h HAVE_VALGRIND_MEMCHECK_H)
|
|
52
|
+
endif()
|
|
53
|
+
if(NOT HAVE_VALGRIND_MEMCHECK_H)
|
|
54
|
+
message(FATAL_ERROR "${MEMCHECK_OPTION_NAME} option is set but valgrind/memcheck.h is not found")
|
|
55
|
+
endif()
|
|
56
|
+
endif()
|
|
57
|
+
|
|
58
|
+
cmake_policy(POP)
|
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
# Copyright (c) 2012-2025 Леонид Юрьев aka Leonid Yuriev <leo@yuriev.ru> ###############################################
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
if(CMAKE_VERSION VERSION_LESS 3.8.2)
|
|
5
|
+
cmake_minimum_required(VERSION 3.0.2)
|
|
6
|
+
elseif(CMAKE_VERSION VERSION_LESS 3.12)
|
|
7
|
+
cmake_minimum_required(VERSION 3.8.2)
|
|
8
|
+
else()
|
|
9
|
+
cmake_minimum_required(VERSION 3.12)
|
|
10
|
+
endif()
|
|
11
|
+
|
|
12
|
+
cmake_policy(PUSH)
|
|
13
|
+
cmake_policy(VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION})
|
|
14
|
+
|
|
15
|
+
macro(add_option HIVE NAME DESCRIPTION DEFAULT)
|
|
16
|
+
list(APPEND ${HIVE}_BUILD_OPTIONS ${HIVE}_${NAME})
|
|
17
|
+
if(NOT ${DEFAULT} STREQUAL "AUTO")
|
|
18
|
+
option(${HIVE}_${NAME} "${DESCRIPTION}" ${DEFAULT})
|
|
19
|
+
elseif(NOT DEFINED ${HIVE}_${NAME})
|
|
20
|
+
set(${HIVE}_${NAME}_AUTO ON)
|
|
21
|
+
endif()
|
|
22
|
+
endmacro()
|
|
23
|
+
|
|
24
|
+
macro(set_if_undefined VARNAME)
|
|
25
|
+
if(NOT DEFINED "${VARNAME}")
|
|
26
|
+
set("${VARNAME}" ${ARGN})
|
|
27
|
+
endif()
|
|
28
|
+
endmacro()
|
|
29
|
+
|
|
30
|
+
macro(add_compile_flags languages)
|
|
31
|
+
foreach(_lang ${languages})
|
|
32
|
+
string(REPLACE ";" " " _flags "${ARGN}")
|
|
33
|
+
if(CMAKE_CXX_COMPILER_LOADED AND _lang STREQUAL "CXX")
|
|
34
|
+
set("${_lang}_FLAGS" "${${_lang}_FLAGS} ${_flags}")
|
|
35
|
+
endif()
|
|
36
|
+
if(CMAKE_C_COMPILER_LOADED AND _lang STREQUAL "C")
|
|
37
|
+
set("${_lang}_FLAGS" "${${_lang}_FLAGS} ${_flags}")
|
|
38
|
+
endif()
|
|
39
|
+
endforeach()
|
|
40
|
+
unset(_lang)
|
|
41
|
+
unset(_flags)
|
|
42
|
+
endmacro(add_compile_flags)
|
|
43
|
+
|
|
44
|
+
macro(remove_flag varname flag)
|
|
45
|
+
string(REGEX REPLACE "^(.*)( ${flag} )(.*)$" "\\1 \\3" ${varname} ${${varname}})
|
|
46
|
+
string(REGEX REPLACE "^((.+ )*)(${flag})(( .+)*)$" "\\1\\4" ${varname} ${${varname}})
|
|
47
|
+
endmacro(remove_flag)
|
|
48
|
+
|
|
49
|
+
macro(remove_compile_flag languages flag)
|
|
50
|
+
foreach(_lang ${languages})
|
|
51
|
+
if(CMAKE_CXX_COMPILER_LOADED AND _lang STREQUAL "CXX")
|
|
52
|
+
remove_flag(${_lang}_FLAGS ${flag})
|
|
53
|
+
endif()
|
|
54
|
+
if(CMAKE_C_COMPILER_LOADED AND _lang STREQUAL "C")
|
|
55
|
+
remove_flag(${_lang}_FLAGS ${flag})
|
|
56
|
+
endif()
|
|
57
|
+
endforeach()
|
|
58
|
+
unset(_lang)
|
|
59
|
+
endmacro(remove_compile_flag)
|
|
60
|
+
|
|
61
|
+
macro(set_source_files_compile_flags)
|
|
62
|
+
foreach(file ${ARGN})
|
|
63
|
+
get_filename_component(_file_ext ${file} EXT)
|
|
64
|
+
set(_lang "")
|
|
65
|
+
if("${_file_ext}" STREQUAL ".m")
|
|
66
|
+
set(_lang OBJC)
|
|
67
|
+
# CMake believes that Objective C is a flavor of C++, not C, and uses g++ compiler for .m files. LANGUAGE property
|
|
68
|
+
# forces CMake to use CC for ${file}
|
|
69
|
+
set_source_files_properties(${file} PROPERTIES LANGUAGE C)
|
|
70
|
+
elseif("${_file_ext}" STREQUAL ".mm")
|
|
71
|
+
set(_lang OBJCXX)
|
|
72
|
+
endif()
|
|
73
|
+
|
|
74
|
+
if(_lang)
|
|
75
|
+
get_source_file_property(_flags ${file} COMPILE_FLAGS)
|
|
76
|
+
if("${_flags}" STREQUAL "NOTFOUND")
|
|
77
|
+
set(_flags "${CMAKE_${_lang}_FLAGS}")
|
|
78
|
+
else()
|
|
79
|
+
set(_flags "${_flags} ${CMAKE_${_lang}_FLAGS}")
|
|
80
|
+
endif()
|
|
81
|
+
# message(STATUS "Set (${file} ${_flags}")
|
|
82
|
+
set_source_files_properties(${file} PROPERTIES COMPILE_FLAGS "${_flags}")
|
|
83
|
+
endif()
|
|
84
|
+
endforeach()
|
|
85
|
+
unset(_file_ext)
|
|
86
|
+
unset(_lang)
|
|
87
|
+
endmacro(set_source_files_compile_flags)
|
|
88
|
+
|
|
89
|
+
macro(semver_parse str)
|
|
90
|
+
set(_semver_ok FALSE)
|
|
91
|
+
set(_semver_err "")
|
|
92
|
+
set(_semver_major 0)
|
|
93
|
+
set(_semver_minor 0)
|
|
94
|
+
set(_semver_patch 0)
|
|
95
|
+
set(_semver_tweak_withdot "")
|
|
96
|
+
set(_semver_tweak "")
|
|
97
|
+
set(_semver_extra "")
|
|
98
|
+
set(_semver_prerelease_withdash "")
|
|
99
|
+
set(_semver_prerelease "")
|
|
100
|
+
set(_semver_buildmetadata_withplus "")
|
|
101
|
+
set(_semver_buildmetadata "")
|
|
102
|
+
if("${str}" MATCHES
|
|
103
|
+
"^v?(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(\\.(0|[1-9][0-9]*))?([-+]-*[0-9a-zA-Z]+.*)?$")
|
|
104
|
+
set(_semver_major ${CMAKE_MATCH_1})
|
|
105
|
+
set(_semver_minor ${CMAKE_MATCH_2})
|
|
106
|
+
set(_semver_patch ${CMAKE_MATCH_3})
|
|
107
|
+
set(_semver_tweak_withdot ${CMAKE_MATCH_4})
|
|
108
|
+
set(_semver_tweak ${CMAKE_MATCH_5})
|
|
109
|
+
set(_semver_extra "${CMAKE_MATCH_6}")
|
|
110
|
+
if("${_semver_extra}" STREQUAL "")
|
|
111
|
+
set(_semver_ok TRUE)
|
|
112
|
+
elseif("${_semver_extra}" MATCHES "^([.-][a-zA-Z0-9-]+)*(\\+[^+]+)?$")
|
|
113
|
+
set(_semver_prerelease_withdash "${CMAKE_MATCH_1}")
|
|
114
|
+
if(NOT "${_semver_prerelease_withdash}" STREQUAL "")
|
|
115
|
+
string(SUBSTRING "${_semver_prerelease_withdash}" 1 -1 _semver_prerelease)
|
|
116
|
+
endif()
|
|
117
|
+
set(_semver_buildmetadata_withplus "${CMAKE_MATCH_2}")
|
|
118
|
+
if(NOT "${_semver_buildmetadata_withplus}" STREQUAL "")
|
|
119
|
+
string(SUBSTRING "${_semver_buildmetadata_withplus}" 1 -1 _semver_buildmetadata)
|
|
120
|
+
endif()
|
|
121
|
+
set(_semver_ok TRUE)
|
|
122
|
+
else()
|
|
123
|
+
set(_semver_err
|
|
124
|
+
"Поля prerelease и/или buildmetadata (строка `-foo+bar` в составе `0.0.0[.0][-foo][+bar]`) не соответствуют SemVer-спецификации"
|
|
125
|
+
)
|
|
126
|
+
endif()
|
|
127
|
+
else()
|
|
128
|
+
set(_semver_err "Версионная отметка в целом не соответствует шаблону `0.0.0[.0][-foo][+bar]` SemVer-спецификации")
|
|
129
|
+
endif()
|
|
130
|
+
endmacro(semver_parse)
|
|
131
|
+
|
|
132
|
+
function(_semver_parse_probe str expect)
|
|
133
|
+
semver_parse(${str})
|
|
134
|
+
if(expect AND NOT _semver_ok)
|
|
135
|
+
message(FATAL_ERROR "semver_parse(${str}) expect SUCCESS, got ${_semver_ok}: ${_semver_err}")
|
|
136
|
+
elseif(NOT expect AND _semver_ok)
|
|
137
|
+
message(FATAL_ERROR "semver_parse(${str}) expect FAIL, got ${_semver_ok}")
|
|
138
|
+
endif()
|
|
139
|
+
endfunction()
|
|
140
|
+
|
|
141
|
+
function(semver_parse_selfcheck)
|
|
142
|
+
_semver_parse_probe("0.0.4" TRUE)
|
|
143
|
+
_semver_parse_probe("v1.2.3" TRUE)
|
|
144
|
+
_semver_parse_probe("10.20.30" TRUE)
|
|
145
|
+
_semver_parse_probe("10.20.30.42" TRUE)
|
|
146
|
+
_semver_parse_probe("1.1.2-prerelease+meta" TRUE)
|
|
147
|
+
_semver_parse_probe("1.1.2+meta" TRUE)
|
|
148
|
+
_semver_parse_probe("1.1.2+meta-valid" TRUE)
|
|
149
|
+
_semver_parse_probe("1.0.0-alpha" TRUE)
|
|
150
|
+
_semver_parse_probe("1.0.0-beta" TRUE)
|
|
151
|
+
_semver_parse_probe("1.0.0-alpha.beta" TRUE)
|
|
152
|
+
_semver_parse_probe("1.0.0-alpha.beta.1" TRUE)
|
|
153
|
+
_semver_parse_probe("1.0.0-alpha.1" TRUE)
|
|
154
|
+
_semver_parse_probe("1.0.0-alpha0.valid" TRUE)
|
|
155
|
+
_semver_parse_probe("1.0.0-alpha.0valid" TRUE)
|
|
156
|
+
_semver_parse_probe("1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay" TRUE)
|
|
157
|
+
_semver_parse_probe("1.0.0-rc.1+build.1" TRUE)
|
|
158
|
+
_semver_parse_probe("2.0.0-rc.1+build.123" TRUE)
|
|
159
|
+
_semver_parse_probe("1.2.3-beta" TRUE)
|
|
160
|
+
_semver_parse_probe("10.2.3-DEV-SNAPSHOT" TRUE)
|
|
161
|
+
_semver_parse_probe("1.2.3-SNAPSHOT-123" TRUE)
|
|
162
|
+
_semver_parse_probe("1.0.0" TRUE)
|
|
163
|
+
_semver_parse_probe("2.0.0" TRUE)
|
|
164
|
+
_semver_parse_probe("1.1.7" TRUE)
|
|
165
|
+
_semver_parse_probe("2.0.0+build.1848" TRUE)
|
|
166
|
+
_semver_parse_probe("2.0.1-alpha.1227" TRUE)
|
|
167
|
+
_semver_parse_probe("1.0.0-alpha+beta" TRUE)
|
|
168
|
+
_semver_parse_probe("1.2.3----RC-SNAPSHOT.12.9.1--.12+788" TRUE)
|
|
169
|
+
_semver_parse_probe("1.2.3----R-S.12.9.1--.12+meta" TRUE)
|
|
170
|
+
_semver_parse_probe("1.2.3----RC-SNAPSHOT.12.9.1--.12" TRUE)
|
|
171
|
+
_semver_parse_probe("1.0.0+0.build.1-rc.10000aaa-kk-0.1" TRUE)
|
|
172
|
+
_semver_parse_probe("99999999999999999999999.999999999999999999.99999999999999999" TRUE)
|
|
173
|
+
_semver_parse_probe("v1.0.0-0A.is.legal" TRUE)
|
|
174
|
+
|
|
175
|
+
_semver_parse_probe("1" FALSE)
|
|
176
|
+
_semver_parse_probe("1.2" FALSE)
|
|
177
|
+
# _semver_parse_probe("1.2.3-0123" FALSE) _semver_parse_probe("1.2.3-0123.0123" FALSE)
|
|
178
|
+
_semver_parse_probe("1.1.2+.123" FALSE)
|
|
179
|
+
_semver_parse_probe("+invalid" FALSE)
|
|
180
|
+
_semver_parse_probe("-invalid" FALSE)
|
|
181
|
+
_semver_parse_probe("-invalid+invalid" FALSE)
|
|
182
|
+
_semver_parse_probe("-invalid.01" FALSE)
|
|
183
|
+
_semver_parse_probe("alpha" FALSE)
|
|
184
|
+
_semver_parse_probe("alpha.beta" FALSE)
|
|
185
|
+
_semver_parse_probe("alpha.beta.1" FALSE)
|
|
186
|
+
_semver_parse_probe("alpha.1" FALSE)
|
|
187
|
+
_semver_parse_probe("alpha+beta" FALSE)
|
|
188
|
+
_semver_parse_probe("alpha_beta" FALSE)
|
|
189
|
+
_semver_parse_probe("alpha." FALSE)
|
|
190
|
+
_semver_parse_probe("alpha.." FALSE)
|
|
191
|
+
_semver_parse_probe("beta" FALSE)
|
|
192
|
+
_semver_parse_probe("1.0.0-alpha_beta" FALSE)
|
|
193
|
+
_semver_parse_probe("-alpha." FALSE)
|
|
194
|
+
_semver_parse_probe("1.0.0-alpha.." FALSE)
|
|
195
|
+
_semver_parse_probe("1.0.0-alpha..1" FALSE)
|
|
196
|
+
_semver_parse_probe("1.0.0-alpha...1" FALSE)
|
|
197
|
+
_semver_parse_probe("1.0.0-alpha....1" FALSE)
|
|
198
|
+
_semver_parse_probe("1.0.0-alpha.....1" FALSE)
|
|
199
|
+
_semver_parse_probe("1.0.0-alpha......1" FALSE)
|
|
200
|
+
_semver_parse_probe("1.0.0-alpha.......1" FALSE)
|
|
201
|
+
_semver_parse_probe("01.1.1" FALSE)
|
|
202
|
+
_semver_parse_probe("1.01.1" FALSE)
|
|
203
|
+
_semver_parse_probe("1.1.01" FALSE)
|
|
204
|
+
_semver_parse_probe("1.2" FALSE)
|
|
205
|
+
_semver_parse_probe("1.2.3.DEV" FALSE)
|
|
206
|
+
_semver_parse_probe("1.2-SNAPSHOT" FALSE)
|
|
207
|
+
_semver_parse_probe("1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788" FALSE)
|
|
208
|
+
_semver_parse_probe("1.2-RC-SNAPSHOT" FALSE)
|
|
209
|
+
_semver_parse_probe("-1.0.3-gamma+b7718" FALSE)
|
|
210
|
+
_semver_parse_probe("+justmeta" FALSE)
|
|
211
|
+
_semver_parse_probe("9.8.7+meta+meta" FALSE)
|
|
212
|
+
_semver_parse_probe("9.8.7-whatever+meta+meta" FALSE)
|
|
213
|
+
_semver_parse_probe(
|
|
214
|
+
"99999999999999999999999.999999999999999999.99999999999999999----RC-SNAPSHOT.12.09.1--------------------------------..12"
|
|
215
|
+
FALSE)
|
|
216
|
+
endfunction()
|
|
217
|
+
|
|
218
|
+
macro(git_get_versioninfo source_root_directory)
|
|
219
|
+
set(_git_describe "")
|
|
220
|
+
set(_git_timestamp "")
|
|
221
|
+
set(_git_tree "")
|
|
222
|
+
set(_git_commit "")
|
|
223
|
+
set(_git_last_vtag "")
|
|
224
|
+
set(_git_trailing_commits 0)
|
|
225
|
+
set(_git_is_dirty FALSE)
|
|
226
|
+
|
|
227
|
+
execute_process(
|
|
228
|
+
COMMAND ${GIT} show --no-patch --format=%cI HEAD
|
|
229
|
+
OUTPUT_VARIABLE _git_timestamp
|
|
230
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
231
|
+
WORKING_DIRECTORY ${source_root_directory}
|
|
232
|
+
RESULT_VARIABLE _rc)
|
|
233
|
+
if(_rc OR "${_git_timestamp}" STREQUAL "%cI")
|
|
234
|
+
execute_process(
|
|
235
|
+
COMMAND ${GIT} show --no-patch --format=%ci HEAD
|
|
236
|
+
OUTPUT_VARIABLE _git_timestamp
|
|
237
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
238
|
+
WORKING_DIRECTORY ${source_root_directory}
|
|
239
|
+
RESULT_VARIABLE _rc)
|
|
240
|
+
if(_rc OR "${_git_timestamp}" STREQUAL "%ci")
|
|
241
|
+
message(FATAL_ERROR "Please install latest version of git (`show --no-patch --format=%cI HEAD` failed)")
|
|
242
|
+
endif()
|
|
243
|
+
endif()
|
|
244
|
+
|
|
245
|
+
execute_process(
|
|
246
|
+
COMMAND ${GIT} show --no-patch --format=%T HEAD
|
|
247
|
+
OUTPUT_VARIABLE _git_tree
|
|
248
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
249
|
+
WORKING_DIRECTORY ${source_root_directory}
|
|
250
|
+
RESULT_VARIABLE _rc)
|
|
251
|
+
if(_rc OR "${_git_tree}" STREQUAL "")
|
|
252
|
+
message(FATAL_ERROR "Please install latest version of git (`show --no-patch --format=%T HEAD` failed)")
|
|
253
|
+
endif()
|
|
254
|
+
|
|
255
|
+
execute_process(
|
|
256
|
+
COMMAND ${GIT} show --no-patch --format=%H HEAD
|
|
257
|
+
OUTPUT_VARIABLE _git_commit
|
|
258
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
259
|
+
WORKING_DIRECTORY ${source_root_directory}
|
|
260
|
+
RESULT_VARIABLE _rc)
|
|
261
|
+
if(_rc OR "${_git_commit}" STREQUAL "")
|
|
262
|
+
message(FATAL_ERROR "Please install latest version of git (`show --no-patch --format=%H HEAD` failed)")
|
|
263
|
+
endif()
|
|
264
|
+
|
|
265
|
+
execute_process(
|
|
266
|
+
COMMAND ${GIT} status --untracked-files=no --porcelain
|
|
267
|
+
OUTPUT_VARIABLE _git_status
|
|
268
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
269
|
+
WORKING_DIRECTORY ${source_root_directory}
|
|
270
|
+
RESULT_VARIABLE _rc)
|
|
271
|
+
if(_rc)
|
|
272
|
+
message(FATAL_ERROR "Please install latest version of git (`status --untracked-files=no --porcelain` failed)")
|
|
273
|
+
endif()
|
|
274
|
+
if(NOT "${_git_status}" STREQUAL "")
|
|
275
|
+
set(_git_commit "DIRTY-${_git_commit}")
|
|
276
|
+
set(_git_is_dirty TRUE)
|
|
277
|
+
endif()
|
|
278
|
+
unset(_git_status)
|
|
279
|
+
|
|
280
|
+
execute_process(
|
|
281
|
+
COMMAND ${GIT} describe --tags --abbrev=0 "--match=v[0-9]*"
|
|
282
|
+
OUTPUT_VARIABLE _git_last_vtag
|
|
283
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
284
|
+
WORKING_DIRECTORY ${source_root_directory}
|
|
285
|
+
RESULT_VARIABLE _rc)
|
|
286
|
+
if(_rc OR "${_git_last_vtag}" STREQUAL "")
|
|
287
|
+
execute_process(
|
|
288
|
+
COMMAND ${GIT} tag
|
|
289
|
+
OUTPUT_VARIABLE _git_tags_dump
|
|
290
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
291
|
+
WORKING_DIRECTORY ${source_root_directory}
|
|
292
|
+
RESULT_VARIABLE _rc)
|
|
293
|
+
execute_process(
|
|
294
|
+
COMMAND ${GIT} rev-list --count --no-merges --remove-empty HEAD
|
|
295
|
+
OUTPUT_VARIABLE _git_whole_count
|
|
296
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
297
|
+
WORKING_DIRECTORY ${source_root_directory}
|
|
298
|
+
RESULT_VARIABLE _rc)
|
|
299
|
+
if(_rc)
|
|
300
|
+
message(
|
|
301
|
+
FATAL_ERROR
|
|
302
|
+
"Please install latest version of git (`git rev-list --count --no-merges --remove-empty HEAD` failed)")
|
|
303
|
+
endif()
|
|
304
|
+
if(_git_whole_count GREATER 42 AND "${_git_tags_dump}" STREQUAL "")
|
|
305
|
+
message(FATAL_ERROR "Please fetch tags (`describe --tags --abbrev=0 --match=v[0-9]*` failed)")
|
|
306
|
+
else()
|
|
307
|
+
message(NOTICE "Falling back to version `0.0.0` (have you made an initial release?")
|
|
308
|
+
endif()
|
|
309
|
+
set(_git_last_vtag "0.0.0")
|
|
310
|
+
set(_git_trailing_commits ${_git_whole_count})
|
|
311
|
+
execute_process(
|
|
312
|
+
COMMAND ${GIT} describe --tags --dirty --long --always
|
|
313
|
+
OUTPUT_VARIABLE _git_describe
|
|
314
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
315
|
+
WORKING_DIRECTORY ${source_root_directory}
|
|
316
|
+
RESULT_VARIABLE _rc)
|
|
317
|
+
if(_rc OR "${_git_describe}" STREQUAL "")
|
|
318
|
+
execute_process(
|
|
319
|
+
COMMAND ${GIT} describe --tags --all --dirty --long --always
|
|
320
|
+
OUTPUT_VARIABLE _git_describe
|
|
321
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
322
|
+
WORKING_DIRECTORY ${source_root_directory}
|
|
323
|
+
RESULT_VARIABLE _rc)
|
|
324
|
+
if(_rc OR "${_git_describe}" STREQUAL "")
|
|
325
|
+
message(FATAL_ERROR "Please install latest version of git (`describe --tags --all --long` failed)")
|
|
326
|
+
endif()
|
|
327
|
+
endif()
|
|
328
|
+
else()
|
|
329
|
+
execute_process(
|
|
330
|
+
COMMAND ${GIT} describe --tags --dirty --long "--match=v[0-9]*"
|
|
331
|
+
OUTPUT_VARIABLE _git_describe
|
|
332
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
333
|
+
WORKING_DIRECTORY ${source_root_directory}
|
|
334
|
+
RESULT_VARIABLE _rc)
|
|
335
|
+
if(_rc OR "${_git_describe}" STREQUAL "")
|
|
336
|
+
message(FATAL_ERROR "Please install latest version of git (`describe --tags --long --match=v[0-9]*`)")
|
|
337
|
+
endif()
|
|
338
|
+
execute_process(
|
|
339
|
+
COMMAND ${GIT} rev-list --count "${_git_last_vtag}..HEAD"
|
|
340
|
+
OUTPUT_VARIABLE _git_trailing_commits
|
|
341
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
342
|
+
WORKING_DIRECTORY ${source_root_directory}
|
|
343
|
+
RESULT_VARIABLE _rc)
|
|
344
|
+
if(_rc OR "${_git_trailing_commits}" STREQUAL "")
|
|
345
|
+
message(FATAL_ERROR "Please install latest version of git (`rev-list --count ${_git_last_vtag}..HEAD` failed)")
|
|
346
|
+
endif()
|
|
347
|
+
endif()
|
|
348
|
+
endmacro(git_get_versioninfo)
|
|
349
|
+
|
|
350
|
+
macro(semver_provide name source_root_directory build_directory_for_json_output build_metadata parent_scope)
|
|
351
|
+
set(_semver "")
|
|
352
|
+
set(_git_describe "")
|
|
353
|
+
set(_git_timestamp "")
|
|
354
|
+
set(_git_tree "")
|
|
355
|
+
set(_git_commit "")
|
|
356
|
+
set(_version_from "")
|
|
357
|
+
set(_git_root FALSE)
|
|
358
|
+
|
|
359
|
+
find_program(GIT git)
|
|
360
|
+
if(GIT)
|
|
361
|
+
execute_process(
|
|
362
|
+
COMMAND ${GIT} rev-parse --show-toplevel
|
|
363
|
+
OUTPUT_VARIABLE _git_root
|
|
364
|
+
ERROR_VARIABLE _git_root_error
|
|
365
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
366
|
+
WORKING_DIRECTORY ${source_root_directory}
|
|
367
|
+
RESULT_VARIABLE _rc)
|
|
368
|
+
if(_rc OR "${_git_root}" STREQUAL "")
|
|
369
|
+
if(EXISTS "${source_root_directory}/.git")
|
|
370
|
+
message(ERROR "`git rev-parse --show-toplevel` failed '${_git_root_error}'")
|
|
371
|
+
else()
|
|
372
|
+
message(VERBOSE "`git rev-parse --show-toplevel` failed '${_git_root_error}'")
|
|
373
|
+
endif()
|
|
374
|
+
else()
|
|
375
|
+
set(_source_root "${source_root_directory}")
|
|
376
|
+
if(NOT CMAKE_VERSION VERSION_LESS 3.19)
|
|
377
|
+
file(REAL_PATH "${_git_root}" _git_root)
|
|
378
|
+
file(REAL_PATH "${_source_root}" _source_root)
|
|
379
|
+
endif()
|
|
380
|
+
if(_source_root STREQUAL _git_root AND EXISTS "${_git_root}/VERSION.json")
|
|
381
|
+
message(
|
|
382
|
+
FATAL_ERROR
|
|
383
|
+
"Несколько источников информации о версии, допустим только один из: репозиторий git, либо файл VERSION.json"
|
|
384
|
+
)
|
|
385
|
+
endif()
|
|
386
|
+
endif()
|
|
387
|
+
endif()
|
|
388
|
+
|
|
389
|
+
if(EXISTS "${source_root_directory}/VERSION.json")
|
|
390
|
+
set(_version_from "${source_root_directory}/VERSION.json")
|
|
391
|
+
|
|
392
|
+
if(CMAKE_VERSION VERSION_LESS 3.19)
|
|
393
|
+
message(FATAL_ERROR "Требуется CMake версии >= 3.19 для чтения VERSION.json")
|
|
394
|
+
endif()
|
|
395
|
+
file(
|
|
396
|
+
STRINGS "${_version_from}" _versioninfo_json NEWLINE_CONSUME
|
|
397
|
+
LIMIT_COUNT 9
|
|
398
|
+
LIMIT_INPUT 999
|
|
399
|
+
ENCODING UTF-8)
|
|
400
|
+
string(JSON _git_describe GET ${_versioninfo_json} git_describe)
|
|
401
|
+
string(JSON _git_timestamp GET "${_versioninfo_json}" "git_timestamp")
|
|
402
|
+
string(JSON _git_tree GET "${_versioninfo_json}" "git_tree")
|
|
403
|
+
string(JSON _git_commit GET "${_versioninfo_json}" "git_commit")
|
|
404
|
+
string(JSON _semver GET "${_versioninfo_json}" "semver")
|
|
405
|
+
unset(_json_object)
|
|
406
|
+
if(NOT _semver)
|
|
407
|
+
message(FATAL_ERROR "Unable to retrieve ${name} version from \"${_version_from}\" file.")
|
|
408
|
+
endif()
|
|
409
|
+
semver_parse("${_semver}")
|
|
410
|
+
if(NOT _semver_ok)
|
|
411
|
+
message(FATAL_ERROR "SemVer `${_semver}` from ${_version_from}: ${_semver_err}")
|
|
412
|
+
endif()
|
|
413
|
+
elseif(_git_root AND _source_root STREQUAL _git_root)
|
|
414
|
+
set(_version_from git)
|
|
415
|
+
git_get_versioninfo(${source_root_directory})
|
|
416
|
+
semver_parse(${_git_last_vtag})
|
|
417
|
+
if(NOT _semver_ok)
|
|
418
|
+
message(FATAL_ERROR "Git tag `${_git_last_vtag}`: ${_semver_err}")
|
|
419
|
+
endif()
|
|
420
|
+
if(_git_trailing_commits GREATER 0 AND "${_semver_tweak}" STREQUAL "")
|
|
421
|
+
set(_semver_tweak ${_git_trailing_commits})
|
|
422
|
+
endif()
|
|
423
|
+
|
|
424
|
+
elseif(GIT)
|
|
425
|
+
message(
|
|
426
|
+
FATAL_ERROR
|
|
427
|
+
"Нет источника информации о версии (${source_root_directory}), требуется один из: репозиторий git, либо VERSION.json"
|
|
428
|
+
)
|
|
429
|
+
else()
|
|
430
|
+
message(FATAL_ERROR "Требуется git для получения информации о версии")
|
|
431
|
+
endif()
|
|
432
|
+
|
|
433
|
+
if(NOT _git_describe
|
|
434
|
+
OR NOT _git_timestamp
|
|
435
|
+
OR NOT _git_tree
|
|
436
|
+
OR NOT _git_commit
|
|
437
|
+
OR "${_semver_major}" STREQUAL ""
|
|
438
|
+
OR "${_semver_minor}" STREQUAL ""
|
|
439
|
+
OR "${_semver_patch}" STREQUAL "")
|
|
440
|
+
message(ERROR "Unable to retrieve ${name} version from ${_version_from}.")
|
|
441
|
+
endif()
|
|
442
|
+
|
|
443
|
+
set(_semver "${_semver_major}.${_semver_minor}.${_semver_patch}")
|
|
444
|
+
if("${_semver_tweak}" STREQUAL "")
|
|
445
|
+
set(_semver_tweak 0)
|
|
446
|
+
elseif(_semver_tweak GREATER 0)
|
|
447
|
+
string(APPEND _semver ".${_semver_tweak}")
|
|
448
|
+
endif()
|
|
449
|
+
if(NOT "${_semver_prerelease}" STREQUAL "")
|
|
450
|
+
string(APPEND _semver "-${_semver_prerelease}")
|
|
451
|
+
endif()
|
|
452
|
+
if(_git_is_dirty)
|
|
453
|
+
string(APPEND _semver "-DIRTY")
|
|
454
|
+
endif()
|
|
455
|
+
|
|
456
|
+
set(_semver_complete "${_semver}")
|
|
457
|
+
if(NOT "${build_metadata}" STREQUAL "")
|
|
458
|
+
string(APPEND _semver_complete "+${build_metadata}")
|
|
459
|
+
endif()
|
|
460
|
+
|
|
461
|
+
set(${name}_VERSION "${_semver_complete}")
|
|
462
|
+
set(${name}_VERSION_PURE "${_semver}")
|
|
463
|
+
set(${name}_VERSION_MAJOR ${_semver_major})
|
|
464
|
+
set(${name}_VERSION_MINOR ${_semver_minor})
|
|
465
|
+
set(${name}_VERSION_PATCH ${_semver_patch})
|
|
466
|
+
set(${name}_VERSION_TWEAK ${_semver_tweak})
|
|
467
|
+
set(${name}_VERSION_PRERELEASE "${_semver_prerelease}")
|
|
468
|
+
set(${name}_GIT_DESCRIBE "${_git_describe}")
|
|
469
|
+
set(${name}_GIT_TIMESTAMP "${_git_timestamp}")
|
|
470
|
+
set(${name}_GIT_TREE "${_git_tree}")
|
|
471
|
+
set(${name}_GIT_COMMIT "${_git_commit}")
|
|
472
|
+
|
|
473
|
+
if(${parent_scope})
|
|
474
|
+
set(${name}_VERSION
|
|
475
|
+
"${_semver_complete}"
|
|
476
|
+
PARENT_SCOPE)
|
|
477
|
+
set(${name}_VERSION_PURE
|
|
478
|
+
"${_semver}"
|
|
479
|
+
PARENT_SCOPE)
|
|
480
|
+
set(${name}_VERSION_MAJOR
|
|
481
|
+
${_semver_major}
|
|
482
|
+
PARENT_SCOPE)
|
|
483
|
+
set(${name}_VERSION_MINOR
|
|
484
|
+
${_semver_minor}
|
|
485
|
+
PARENT_SCOPE)
|
|
486
|
+
set(${name}_VERSION_PATCH
|
|
487
|
+
${_semver_patch}
|
|
488
|
+
PARENT_SCOPE)
|
|
489
|
+
set(${name}_VERSION_TWEAK
|
|
490
|
+
"${_semver_tweak}"
|
|
491
|
+
PARENT_SCOPE)
|
|
492
|
+
set(${name}_VERSION_PRERELEASE
|
|
493
|
+
"${_semver_prerelease}"
|
|
494
|
+
PARENT_SCOPE)
|
|
495
|
+
set(${name}_GIT_DESCRIBE
|
|
496
|
+
"${_git_describe}"
|
|
497
|
+
PARENT_SCOPE)
|
|
498
|
+
set(${name}_GIT_TIMESTAMP
|
|
499
|
+
"${_git_timestamp}"
|
|
500
|
+
PARENT_SCOPE)
|
|
501
|
+
set(${name}_GIT_TREE
|
|
502
|
+
"${_git_tree}"
|
|
503
|
+
PARENT_SCOPE)
|
|
504
|
+
set(${name}_GIT_COMMIT
|
|
505
|
+
"${_git_commit}"
|
|
506
|
+
PARENT_SCOPE)
|
|
507
|
+
endif()
|
|
508
|
+
|
|
509
|
+
if(_version_from STREQUAL "git")
|
|
510
|
+
string(
|
|
511
|
+
CONFIGURE
|
|
512
|
+
"{
|
|
513
|
+
\"git_describe\" : \"@_git_describe@\",
|
|
514
|
+
\"git_timestamp\" : \"@_git_timestamp@\",
|
|
515
|
+
\"git_tree\" : \"@_git_tree@\",
|
|
516
|
+
\"git_commit\" : \"@_git_commit@\",
|
|
517
|
+
\"semver\" : \"@_semver@\"\n}"
|
|
518
|
+
_versioninfo_json
|
|
519
|
+
@ONLY ESCAPE_QUOTES)
|
|
520
|
+
file(WRITE "${build_directory_for_json_output}/VERSION.json" "${_versioninfo_json}")
|
|
521
|
+
endif()
|
|
522
|
+
endmacro(semver_provide)
|
|
523
|
+
|
|
524
|
+
cmake_policy(POP)
|