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.
Files changed (220) hide show
  1. package/.github/workflows/ci.yml +32 -0
  2. package/.github/workflows/publish.yml +27 -0
  3. package/.gitmodules +3 -0
  4. package/CMakeLists.txt +53 -0
  5. package/LICENSE +201 -0
  6. package/README.md +639 -0
  7. package/build.js +11 -0
  8. package/deps/libmdbx/.clang-format +3 -0
  9. package/deps/libmdbx/.cmake-format.yaml +3 -0
  10. package/deps/libmdbx/.le.ini +40 -0
  11. package/deps/libmdbx/CMakeLists.txt +1269 -0
  12. package/deps/libmdbx/COPYRIGHT +159 -0
  13. package/deps/libmdbx/ChangeLog.md +2786 -0
  14. package/deps/libmdbx/GNUmakefile +950 -0
  15. package/deps/libmdbx/LICENSE +177 -0
  16. package/deps/libmdbx/Makefile +16 -0
  17. package/deps/libmdbx/NOTICE +39 -0
  18. package/deps/libmdbx/README.md +863 -0
  19. package/deps/libmdbx/TODO.md +43 -0
  20. package/deps/libmdbx/cmake/compiler.cmake +1221 -0
  21. package/deps/libmdbx/cmake/profile.cmake +58 -0
  22. package/deps/libmdbx/cmake/utils.cmake +524 -0
  23. package/deps/libmdbx/conanfile.py +323 -0
  24. package/deps/libmdbx/docs/Doxyfile.in +2734 -0
  25. package/deps/libmdbx/docs/_preface.md +47 -0
  26. package/deps/libmdbx/docs/_restrictions.md +248 -0
  27. package/deps/libmdbx/docs/_starting.md +245 -0
  28. package/deps/libmdbx/docs/_toc.md +34 -0
  29. package/deps/libmdbx/docs/header.html +96 -0
  30. package/deps/libmdbx/example/CMakeLists.txt +6 -0
  31. package/deps/libmdbx/example/README.md +1 -0
  32. package/deps/libmdbx/example/example-mdbx.c +154 -0
  33. package/deps/libmdbx/example/sample-bdb.txt +77 -0
  34. package/deps/libmdbx/mdbx.h +6655 -0
  35. package/deps/libmdbx/mdbx.h++ +6428 -0
  36. package/deps/libmdbx/packages/buildroot/0001-package-libmdbx-new-package-library-database.patch +173 -0
  37. package/deps/libmdbx/src/alloy.c +54 -0
  38. package/deps/libmdbx/src/api-cold.c +543 -0
  39. package/deps/libmdbx/src/api-copy.c +912 -0
  40. package/deps/libmdbx/src/api-cursor.c +754 -0
  41. package/deps/libmdbx/src/api-dbi.c +315 -0
  42. package/deps/libmdbx/src/api-env.c +1434 -0
  43. package/deps/libmdbx/src/api-extra.c +165 -0
  44. package/deps/libmdbx/src/api-key-transform.c +197 -0
  45. package/deps/libmdbx/src/api-misc.c +286 -0
  46. package/deps/libmdbx/src/api-opts.c +575 -0
  47. package/deps/libmdbx/src/api-range-estimate.c +365 -0
  48. package/deps/libmdbx/src/api-txn-data.c +454 -0
  49. package/deps/libmdbx/src/api-txn.c +921 -0
  50. package/deps/libmdbx/src/atomics-ops.h +364 -0
  51. package/deps/libmdbx/src/atomics-types.h +97 -0
  52. package/deps/libmdbx/src/audit.c +109 -0
  53. package/deps/libmdbx/src/bits.md +34 -0
  54. package/deps/libmdbx/src/chk.c +1796 -0
  55. package/deps/libmdbx/src/cogs.c +309 -0
  56. package/deps/libmdbx/src/cogs.h +506 -0
  57. package/deps/libmdbx/src/coherency.c +170 -0
  58. package/deps/libmdbx/src/config.h.in +88 -0
  59. package/deps/libmdbx/src/cursor.c +2396 -0
  60. package/deps/libmdbx/src/cursor.h +391 -0
  61. package/deps/libmdbx/src/dbi.c +717 -0
  62. package/deps/libmdbx/src/dbi.h +142 -0
  63. package/deps/libmdbx/src/debug_begin.h +36 -0
  64. package/deps/libmdbx/src/debug_end.h +15 -0
  65. package/deps/libmdbx/src/dpl.c +486 -0
  66. package/deps/libmdbx/src/dpl.h +134 -0
  67. package/deps/libmdbx/src/dxb.c +1335 -0
  68. package/deps/libmdbx/src/env.c +607 -0
  69. package/deps/libmdbx/src/essentials.h +125 -0
  70. package/deps/libmdbx/src/gc-get.c +1345 -0
  71. package/deps/libmdbx/src/gc-put.c +970 -0
  72. package/deps/libmdbx/src/gc.h +40 -0
  73. package/deps/libmdbx/src/global.c +474 -0
  74. package/deps/libmdbx/src/internals.h +585 -0
  75. package/deps/libmdbx/src/layout-dxb.h +288 -0
  76. package/deps/libmdbx/src/layout-lck.h +289 -0
  77. package/deps/libmdbx/src/lck-posix.c +859 -0
  78. package/deps/libmdbx/src/lck-windows.c +607 -0
  79. package/deps/libmdbx/src/lck.c +174 -0
  80. package/deps/libmdbx/src/lck.h +110 -0
  81. package/deps/libmdbx/src/logging_and_debug.c +250 -0
  82. package/deps/libmdbx/src/logging_and_debug.h +159 -0
  83. package/deps/libmdbx/src/man1/mdbx_chk.1 +106 -0
  84. package/deps/libmdbx/src/man1/mdbx_copy.1 +95 -0
  85. package/deps/libmdbx/src/man1/mdbx_drop.1 +48 -0
  86. package/deps/libmdbx/src/man1/mdbx_dump.1 +101 -0
  87. package/deps/libmdbx/src/man1/mdbx_load.1 +105 -0
  88. package/deps/libmdbx/src/man1/mdbx_stat.1 +86 -0
  89. package/deps/libmdbx/src/mdbx.c++ +1837 -0
  90. package/deps/libmdbx/src/meta.c +656 -0
  91. package/deps/libmdbx/src/meta.h +168 -0
  92. package/deps/libmdbx/src/mvcc-readers.c +414 -0
  93. package/deps/libmdbx/src/node.c +365 -0
  94. package/deps/libmdbx/src/node.h +102 -0
  95. package/deps/libmdbx/src/ntdll.def +1246 -0
  96. package/deps/libmdbx/src/options.h +534 -0
  97. package/deps/libmdbx/src/osal.c +3485 -0
  98. package/deps/libmdbx/src/osal.h +587 -0
  99. package/deps/libmdbx/src/page-get.c +483 -0
  100. package/deps/libmdbx/src/page-iov.c +185 -0
  101. package/deps/libmdbx/src/page-iov.h +34 -0
  102. package/deps/libmdbx/src/page-ops.c +744 -0
  103. package/deps/libmdbx/src/page-ops.h +142 -0
  104. package/deps/libmdbx/src/pnl.c +236 -0
  105. package/deps/libmdbx/src/pnl.h +146 -0
  106. package/deps/libmdbx/src/preface.h +990 -0
  107. package/deps/libmdbx/src/proto.h +105 -0
  108. package/deps/libmdbx/src/refund.c +212 -0
  109. package/deps/libmdbx/src/sort.h +484 -0
  110. package/deps/libmdbx/src/spill.c +431 -0
  111. package/deps/libmdbx/src/spill.h +74 -0
  112. package/deps/libmdbx/src/table.c +107 -0
  113. package/deps/libmdbx/src/tls.c +551 -0
  114. package/deps/libmdbx/src/tls.h +43 -0
  115. package/deps/libmdbx/src/tools/chk.c +673 -0
  116. package/deps/libmdbx/src/tools/copy.c +166 -0
  117. package/deps/libmdbx/src/tools/drop.c +199 -0
  118. package/deps/libmdbx/src/tools/dump.c +515 -0
  119. package/deps/libmdbx/src/tools/load.c +831 -0
  120. package/deps/libmdbx/src/tools/stat.c +516 -0
  121. package/deps/libmdbx/src/tools/wingetopt.c +87 -0
  122. package/deps/libmdbx/src/tools/wingetopt.h +30 -0
  123. package/deps/libmdbx/src/tree-ops.c +1554 -0
  124. package/deps/libmdbx/src/tree-search.c +140 -0
  125. package/deps/libmdbx/src/txl.c +99 -0
  126. package/deps/libmdbx/src/txl.h +26 -0
  127. package/deps/libmdbx/src/txn.c +1083 -0
  128. package/deps/libmdbx/src/unaligned.h +205 -0
  129. package/deps/libmdbx/src/utils.c +32 -0
  130. package/deps/libmdbx/src/utils.h +76 -0
  131. package/deps/libmdbx/src/version.c.in +44 -0
  132. package/deps/libmdbx/src/walk.c +290 -0
  133. package/deps/libmdbx/src/walk.h +20 -0
  134. package/deps/libmdbx/src/windows-import.c +152 -0
  135. package/deps/libmdbx/src/windows-import.h +128 -0
  136. package/deps/libmdbx/test/CMakeLists.txt +317 -0
  137. package/deps/libmdbx/test/append.c++ +237 -0
  138. package/deps/libmdbx/test/base.h++ +92 -0
  139. package/deps/libmdbx/test/battery-tmux.sh +64 -0
  140. package/deps/libmdbx/test/cases.c++ +118 -0
  141. package/deps/libmdbx/test/chrono.c++ +134 -0
  142. package/deps/libmdbx/test/chrono.h++ +85 -0
  143. package/deps/libmdbx/test/config.c++ +643 -0
  144. package/deps/libmdbx/test/config.h++ +334 -0
  145. package/deps/libmdbx/test/copy.c++ +62 -0
  146. package/deps/libmdbx/test/dead.c++ +39 -0
  147. package/deps/libmdbx/test/dump-load.sh +40 -0
  148. package/deps/libmdbx/test/extra/crunched_delete.c++ +409 -0
  149. package/deps/libmdbx/test/extra/cursor_closing.c++ +410 -0
  150. package/deps/libmdbx/test/extra/dbi.c++ +229 -0
  151. package/deps/libmdbx/test/extra/doubtless_positioning.c++ +253 -0
  152. package/deps/libmdbx/test/extra/dupfix_addodd.c +94 -0
  153. package/deps/libmdbx/test/extra/dupfix_multiple.c++ +311 -0
  154. package/deps/libmdbx/test/extra/early_close_dbi.c++ +137 -0
  155. package/deps/libmdbx/test/extra/hex_base64_base58.c++ +118 -0
  156. package/deps/libmdbx/test/extra/maindb_ordinal.c++ +61 -0
  157. package/deps/libmdbx/test/extra/open.c++ +96 -0
  158. package/deps/libmdbx/test/extra/pcrf/README.md +2 -0
  159. package/deps/libmdbx/test/extra/pcrf/pcrf_test.c +380 -0
  160. package/deps/libmdbx/test/extra/probe.c++ +10 -0
  161. package/deps/libmdbx/test/extra/txn.c++ +407 -0
  162. package/deps/libmdbx/test/extra/upsert_alldups.c +193 -0
  163. package/deps/libmdbx/test/fork.c++ +263 -0
  164. package/deps/libmdbx/test/hill.c++ +447 -0
  165. package/deps/libmdbx/test/jitter.c++ +197 -0
  166. package/deps/libmdbx/test/keygen.c++ +393 -0
  167. package/deps/libmdbx/test/keygen.h++ +130 -0
  168. package/deps/libmdbx/test/log.c++ +358 -0
  169. package/deps/libmdbx/test/log.h++ +91 -0
  170. package/deps/libmdbx/test/main.c++ +706 -0
  171. package/deps/libmdbx/test/nested.c++ +318 -0
  172. package/deps/libmdbx/test/osal-unix.c++ +647 -0
  173. package/deps/libmdbx/test/osal-windows.c++ +440 -0
  174. package/deps/libmdbx/test/osal.h++ +41 -0
  175. package/deps/libmdbx/test/stochastic.sh +690 -0
  176. package/deps/libmdbx/test/stub/LICENSE +24 -0
  177. package/deps/libmdbx/test/stub/README.md +8 -0
  178. package/deps/libmdbx/test/stub/pthread_barrier.c +104 -0
  179. package/deps/libmdbx/test/stub/pthread_barrier.h +77 -0
  180. package/deps/libmdbx/test/test.c++ +1551 -0
  181. package/deps/libmdbx/test/test.h++ +298 -0
  182. package/deps/libmdbx/test/tmux.conf +3 -0
  183. package/deps/libmdbx/test/try.c++ +30 -0
  184. package/deps/libmdbx/test/ttl.c++ +240 -0
  185. package/deps/libmdbx/test/utils.c++ +203 -0
  186. package/deps/libmdbx/test/utils.h++ +326 -0
  187. package/deps/libmdbx/test/valgrind_suppress.txt +536 -0
  188. package/lib/mdbx_evn_async.js +211 -0
  189. package/lib/mdbx_worker.js +195 -0
  190. package/lib/nativemou.js +6 -0
  191. package/package.json +38 -0
  192. package/src/async/envmou_close.cpp +34 -0
  193. package/src/async/envmou_close.hpp +32 -0
  194. package/src/async/envmou_copy_to.cpp +29 -0
  195. package/src/async/envmou_copy_to.hpp +38 -0
  196. package/src/async/envmou_keys.cpp +201 -0
  197. package/src/async/envmou_keys.hpp +50 -0
  198. package/src/async/envmou_open.cpp +38 -0
  199. package/src/async/envmou_open.hpp +33 -0
  200. package/src/async/envmou_query.cpp +167 -0
  201. package/src/async/envmou_query.hpp +53 -0
  202. package/src/dbimou.cpp +522 -0
  203. package/src/dbimou.hpp +82 -0
  204. package/src/env_arg0.hpp +24 -0
  205. package/src/envmou.cpp +445 -0
  206. package/src/envmou.hpp +116 -0
  207. package/src/modulemou.cpp +113 -0
  208. package/src/querymou.cpp +177 -0
  209. package/src/querymou.hpp +93 -0
  210. package/src/txnmou.cpp +254 -0
  211. package/src/txnmou.hpp +122 -0
  212. package/src/typemou.hpp +239 -0
  213. package/src/valuemou.hpp +194 -0
  214. package/test/async.js +67 -0
  215. package/test/e3.js +38 -0
  216. package/test/e4.js +89 -0
  217. package/test/e5.js +162 -0
  218. package/test/test-batch-ops.js +243 -0
  219. package/test/test-cursor-mode.js +84 -0
  220. package/test/test-multi-mode.js +87 -0
@@ -0,0 +1,1269 @@
1
+ # Copyright (c) 2020-2025 Леонид Юрьев aka Leonid Yuriev <leo@yuriev.ru> ###############################################
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Donations are welcome to ETH `0xD104d8f8B2dC312aaD74899F83EBf3EEBDC1EA3A`. Всё будет хорошо!
5
+
6
+ # libmdbx = { Revised and extended descendant of Symas LMDB. } Please see README.md at
7
+ # https://gitflic.ru/project/erthink/libmdbx
8
+ #
9
+ # Libmdbx is superior to LMDB in terms of features and reliability, not inferior in performance. libmdbx works on Linux,
10
+ # FreeBSD, MacOS X and other systems compliant with POSIX.1-2008, but also support Windows as a complementary platform.
11
+ #
12
+ # The next version is under active non-public development and will be released as MithrilDB and libmithrildb for
13
+ # libraries & packages. Admittedly mythical Mithril is resembling silver but being stronger and lighter than steel.
14
+ # Therefore MithrilDB is rightly relevant name.
15
+ #
16
+ # MithrilDB will be radically different from libmdbx by the new database format and API based on C++17, as well as the
17
+ # Apache 2.0 License. The goal of this revolution is to provide a clearer and robust API, add more features and new
18
+ # valuable properties of database.
19
+
20
+ if(CMAKE_VERSION VERSION_LESS 3.8.2)
21
+ cmake_minimum_required(VERSION 3.0.2)
22
+ elseif(CMAKE_VERSION VERSION_LESS 3.12)
23
+ cmake_minimum_required(VERSION 3.8.2)
24
+ else()
25
+ cmake_minimum_required(VERSION 3.12)
26
+ endif()
27
+
28
+ cmake_policy(PUSH)
29
+ cmake_policy(VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION})
30
+ if(NOT CMAKE_VERSION VERSION_LESS 3.21)
31
+ cmake_policy(SET CMP0126 NEW)
32
+ endif()
33
+ if(NOT CMAKE_VERSION VERSION_LESS 3.17)
34
+ cmake_policy(SET CMP0102 NEW)
35
+ endif()
36
+ if(NOT CMAKE_VERSION VERSION_LESS 3.15)
37
+ cmake_policy(SET CMP0091 NEW)
38
+ endif()
39
+ if(NOT CMAKE_VERSION VERSION_LESS 3.13)
40
+ cmake_policy(SET CMP0077 NEW)
41
+ endif()
42
+ if(NOT CMAKE_VERSION VERSION_LESS 3.12)
43
+ cmake_policy(SET CMP0075 NEW)
44
+ endif()
45
+ if(NOT CMAKE_VERSION VERSION_LESS 3.9)
46
+ cmake_policy(SET CMP0068 NEW)
47
+ cmake_policy(SET CMP0069 NEW)
48
+ include(CheckIPOSupported)
49
+ check_ipo_supported(RESULT CMAKE_INTERPROCEDURAL_OPTIMIZATION_AVAILABLE)
50
+ else()
51
+ set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_AVAILABLE FALSE)
52
+ endif()
53
+
54
+ cmake_policy(SET CMP0054 NEW)
55
+
56
+ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git"
57
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/COPYRIGHT"
58
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE"
59
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/NOTICE"
60
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/README.md"
61
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.h"
62
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.h++"
63
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/alloy.c"
64
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-cold.c"
65
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-copy.c"
66
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-cursor.c"
67
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-dbi.c"
68
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-env.c"
69
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-extra.c"
70
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-key-transform.c"
71
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-misc.c"
72
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-opts.c"
73
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-range-estimate.c"
74
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-txn-data.c"
75
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-txn.c"
76
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/atomics-ops.h"
77
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/atomics-types.h"
78
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/audit.c"
79
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/chk.c"
80
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/cogs.c"
81
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/cogs.h"
82
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/coherency.c"
83
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in"
84
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/cursor.c"
85
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/cursor.h"
86
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/dbi.c"
87
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/dbi.h"
88
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/debug_begin.h"
89
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/debug_end.h"
90
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/dpl.c"
91
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/dpl.h"
92
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/dxb.c"
93
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/env.c"
94
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/essentials.h"
95
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/gc-get.c"
96
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/gc-put.c"
97
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/gc.h"
98
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/global.c"
99
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/internals.h"
100
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/layout-dxb.h"
101
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/layout-lck.h"
102
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/lck-posix.c"
103
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/lck-windows.c"
104
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/lck.c"
105
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/lck.h"
106
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/logging_and_debug.c"
107
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/logging_and_debug.h"
108
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/man1/mdbx_chk.1"
109
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/man1/mdbx_copy.1"
110
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/man1/mdbx_drop.1"
111
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/man1/mdbx_dump.1"
112
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/man1/mdbx_load.1"
113
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/man1/mdbx_stat.1"
114
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/mdbx.c++"
115
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/meta.c"
116
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/meta.h"
117
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/mvcc-readers.c"
118
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/node.c"
119
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/node.h"
120
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/ntdll.def"
121
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/options.h"
122
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/osal.c"
123
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/osal.h"
124
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/page-get.c"
125
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/page-iov.c"
126
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/page-iov.h"
127
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/page-ops.c"
128
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/page-ops.h"
129
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tree-search.c"
130
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/pnl.c"
131
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/pnl.h"
132
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/preface.h"
133
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/proto.h"
134
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/refund.c"
135
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/sort.h"
136
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/spill.c"
137
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/spill.h"
138
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/table.c"
139
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tls.c"
140
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tls.h"
141
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/chk.c"
142
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/copy.c"
143
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/drop.c"
144
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/dump.c"
145
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/load.c"
146
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/stat.c"
147
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/wingetopt.c"
148
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tools/wingetopt.h"
149
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tree-ops.c"
150
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/txl.c"
151
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/txl.h"
152
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/txn.c"
153
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/unaligned.h"
154
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/utils.c"
155
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/utils.h"
156
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/version.c.in"
157
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/walk.c"
158
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/walk.h"
159
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/windows-import.c"
160
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/windows-import.h"
161
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
162
+ set(MDBX_AMALGAMATED_SOURCE FALSE)
163
+ find_program(GIT git)
164
+ if(NOT GIT)
165
+ message(SEND_ERROR "Git command-line tool not found")
166
+ endif()
167
+ set(MDBX_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
168
+ elseif(
169
+ EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION.json"
170
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE"
171
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/NOTICE"
172
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.c"
173
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.c++"
174
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.h"
175
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.h++"
176
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_chk.c"
177
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_copy.c"
178
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_dump.c"
179
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_load.c"
180
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_stat.c"
181
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_drop.c"
182
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ntdll.def"
183
+ AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/config.h.in")
184
+ set(MDBX_AMALGAMATED_SOURCE TRUE)
185
+ set(MDBX_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
186
+ else()
187
+ message(
188
+ FATAL_ERROR
189
+ "\nThe set of libmdbx source code files is incomplete! "
190
+ "Instead just follow the https://libmdbx.dqdkfa.ru/usage.html " "PLEASE, AVOID USING ANY OTHER TECHNIQUES.")
191
+ endif()
192
+
193
+ # Provide version
194
+ include(cmake/utils.cmake)
195
+ set(MDBX_BUILD_METADATA
196
+ "${MDBX_BUILD_METADATA}"
197
+ CACHE STRING "An extra/custom information provided during libmdbx build")
198
+ semver_provide(MDBX "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" "${MDBX_BUILD_METADATA}" FALSE)
199
+ message(STATUS "libmdbx version is ${MDBX_VERSION}")
200
+
201
+ if(DEFINED PROJECT_NAME)
202
+ option(MDBX_FORCE_BUILD_AS_MAIN_PROJECT
203
+ "Force libmdbx to full control build options even it added as a subdirectory to your project." OFF)
204
+ endif()
205
+
206
+ if(DEFINED PROJECT_NAME AND NOT MDBX_FORCE_BUILD_AS_MAIN_PROJECT)
207
+ set(SUBPROJECT ON)
208
+ set(NOT_SUBPROJECT OFF)
209
+ if(NOT MDBX_AMALGAMATED_SOURCE AND NOT DEFINED BUILD_TESTING)
210
+ set(BUILD_TESTING OFF)
211
+ endif()
212
+ enable_language(C)
213
+ else()
214
+ set(SUBPROJECT OFF)
215
+ set(NOT_SUBPROJECT ON)
216
+
217
+ # Setup Apple stuff which should be set prior to the first project() or enable_language()
218
+ if(APPLE)
219
+ # Enable universal binaries for macOS (target arm64 and x86_64)
220
+ if(NOT DEFINED CMAKE_OSX_ARCHITECTURES)
221
+ set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64")
222
+ endif()
223
+
224
+ # Set the minimum macOS deployment target if not already defined
225
+ if(NOT DEFINED CMAKE_OSX_DEPLOYMENT_TARGET)
226
+ set(CMAKE_OSX_DEPLOYMENT_TARGET "13.0")
227
+ endif()
228
+ endif()
229
+
230
+ project(libmdbx C)
231
+ if(NOT MDBX_AMALGAMATED_SOURCE AND NOT DEFINED BUILD_TESTING)
232
+ set(BUILD_TESTING ON)
233
+ endif()
234
+ endif()
235
+
236
+ if(NOT MDBX_AMALGAMATED_SOURCE)
237
+ include(CTest)
238
+ option(MDBX_ENABLE_TESTS "Build libmdbx tests." ${BUILD_TESTING})
239
+ elseif(DEFINED MDBX_ENABLE_TESTS AND MDBX_ENABLE_TESTS)
240
+ message(WARNING "MDBX_ENABLE_TESTS=${MDBX_ENABLE_TESTS}: But amalgamated source code don't includes tests.")
241
+ set(MDBX_ENABLE_TESTS OFF)
242
+ endif()
243
+
244
+ # Try to find a C++ compiler unless sure that this is unnecessary.
245
+ if(NOT CMAKE_CXX_COMPILER_LOADED)
246
+ include(CheckLanguage)
247
+ if(NOT DEFINED MDBX_BUILD_CXX
248
+ OR MDBX_BUILD_CXX
249
+ OR (NOT MDBX_AMALGAMATED_SOURCE AND (NOT DEFINED MDBX_ENABLE_TESTS OR MDBX_ENABLE_TESTS)))
250
+ check_language(CXX)
251
+ if(CMAKE_CXX_COMPILER)
252
+ enable_language(CXX)
253
+ endif()
254
+ endif()
255
+ else()
256
+ enable_language(CXX)
257
+ endif()
258
+
259
+ # Set default build type to Release. This is to ease a User's life.
260
+ if(NOT CMAKE_BUILD_TYPE)
261
+ set(CMAKE_BUILD_TYPE
262
+ Release
263
+ CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
264
+ endif()
265
+ string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPPERCASE)
266
+
267
+ if(NOT_SUBPROJECT AND (CMAKE_CROSSCOMPILING OR IOS))
268
+ set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
269
+ endif()
270
+
271
+ if(NOT "$ENV{TEAMCITY_PROCESS_FLOW_ID}" STREQUAL "")
272
+ set(CI TEAMCITY)
273
+ message(STATUS "TeamCity CI")
274
+ elseif(NOT "$ENV{TRAVIS}" STREQUAL "")
275
+ set(CI TRAVIS)
276
+ message(STATUS "Travis CI")
277
+ elseif(NOT "$ENV{CIRCLECI}" STREQUAL "")
278
+ set(CI CIRCLE)
279
+ message(STATUS "Circle CI")
280
+ elseif(NOT "$ENV{APPVEYOR}" STREQUAL "")
281
+ set(CI APPVEYOR)
282
+ message(STATUS "AppVeyor CI")
283
+ elseif(NOT "$ENV{CI}" STREQUAL "")
284
+ set(CI "$ENV{CI}")
285
+ message(STATUS "Other CI (${CI})")
286
+ else()
287
+ message(STATUS "Assume No any CI environment")
288
+ unset(CI)
289
+ endif()
290
+
291
+ # output all mdbx-related targets in single directory
292
+ if(NOT DEFINED MDBX_OUTPUT_DIR)
293
+ set(MDBX_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
294
+ endif()
295
+ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${MDBX_OUTPUT_DIR})
296
+ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${MDBX_OUTPUT_DIR})
297
+ set(CMAKE_PDB_OUTPUT_DIRECTORY ${MDBX_OUTPUT_DIR})
298
+ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${MDBX_OUTPUT_DIR})
299
+
300
+ include(CheckFunctionExists)
301
+ include(FindPackageMessage)
302
+ include(GNUInstallDirs)
303
+
304
+ if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND MSVC_VERSION LESS 1900)
305
+ message(
306
+ SEND_ERROR "MSVC compiler ${MSVC_VERSION} is too old for building MDBX."
307
+ " At least \"Microsoft C/C++ Compiler\" version 19.0.24234.1 (Visual Studio 2015 Update 3) is required.")
308
+ endif()
309
+
310
+ if(NOT DEFINED THREADS_PREFER_PTHREAD_FLAG)
311
+ set(THREADS_PREFER_PTHREAD_FLAG TRUE)
312
+ endif()
313
+ find_package(Threads REQUIRED)
314
+
315
+ include(cmake/compiler.cmake)
316
+ include(cmake/profile.cmake)
317
+
318
+ # Workaround for `-pthread` toolchain/cmake bug
319
+ if(NOT APPLE
320
+ AND NOT MSVC
321
+ AND CMAKE_USE_PTHREADS_INIT
322
+ AND NOT CMAKE_THREAD_LIBS_INIT
323
+ AND (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG))
324
+ check_compiler_flag("-pthread" CC_HAS_PTHREAD)
325
+ if(CC_HAS_PTHREAD AND NOT CMAKE_EXE_LINKER_FLAGS MATCHES "-pthread")
326
+ message(STATUS "Force add -pthread for linker flags to avoid troubles")
327
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")
328
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pthread")
329
+ set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -pthread")
330
+ endif()
331
+ endif()
332
+
333
+ check_function_exists(pow NOT_NEED_LIBM)
334
+ if(NOT_NEED_LIBM)
335
+ set(LIB_MATH "")
336
+ else()
337
+ set(CMAKE_REQUIRED_LIBRARIES m)
338
+ check_function_exists(pow HAVE_LIBM)
339
+ if(HAVE_LIBM)
340
+ set(LIB_MATH m)
341
+ else()
342
+ message(FATAL_ERROR "No libm found for math support")
343
+ endif()
344
+ endif()
345
+
346
+ if(SUBPROJECT)
347
+ if(NOT DEFINED BUILD_SHARED_LIBS)
348
+ option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)" OFF)
349
+ endif()
350
+ if(NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE)
351
+ option(CMAKE_POSITION_INDEPENDENT_CODE "Generate position independent (PIC)" ON)
352
+ endif()
353
+ set(MDBX_MANAGE_BUILD_FLAGS_DEFAULT OFF)
354
+ else()
355
+ option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)" ON)
356
+ option(CMAKE_POSITION_INDEPENDENT_CODE "Generate position independent (PIC)" ON)
357
+ if(CC_HAS_ARCH_NATIVE)
358
+ option(BUILD_FOR_NATIVE_CPU "Generate code for the compiling machine CPU" OFF)
359
+ endif()
360
+
361
+ if(CMAKE_INTERPROCEDURAL_OPTIMIZATION_AVAILABLE
362
+ OR GCC_LTO_AVAILABLE
363
+ OR MSVC_LTO_AVAILABLE
364
+ OR CLANG_LTO_AVAILABLE)
365
+ if((CMAKE_CONFIGURATION_TYPES OR NOT CMAKE_BUILD_TYPE_UPPERCASE STREQUAL "DEBUG")
366
+ AND ((MSVC_LTO_AVAILABLE AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 19)
367
+ OR (GCC_LTO_AVAILABLE AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 7)
368
+ OR (CLANG_LTO_AVAILABLE AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5)))
369
+ set(INTERPROCEDURAL_OPTIMIZATION_DEFAULT ON)
370
+ else()
371
+ set(INTERPROCEDURAL_OPTIMIZATION_DEFAULT OFF)
372
+ endif()
373
+ option(INTERPROCEDURAL_OPTIMIZATION "Enable interprocedural/LTO optimization."
374
+ ${INTERPROCEDURAL_OPTIMIZATION_DEFAULT})
375
+ endif()
376
+
377
+ if(INTERPROCEDURAL_OPTIMIZATION)
378
+ if(GCC_LTO_AVAILABLE)
379
+ set(LTO_ENABLED TRUE)
380
+ set(CMAKE_AR
381
+ ${CMAKE_GCC_AR}
382
+ CACHE PATH "Path to ar program with LTO-plugin" FORCE)
383
+ set(CMAKE_C_COMPILER_AR
384
+ ${CMAKE_AR}
385
+ CACHE PATH "Path to ar program with LTO-plugin" FORCE)
386
+ set(CMAKE_CXX_COMPILER_AR
387
+ ${CMAKE_AR}
388
+ CACHE PATH "Path to ar program with LTO-plugin" FORCE)
389
+ set(CMAKE_NM
390
+ ${CMAKE_GCC_NM}
391
+ CACHE PATH "Path to nm program with LTO-plugin" FORCE)
392
+ set(CMAKE_RANLIB
393
+ ${CMAKE_GCC_RANLIB}
394
+ CACHE PATH "Path to ranlib program with LTO-plugin" FORCE)
395
+ set(CMAKE_C_COMPILER_RANLIB
396
+ ${CMAKE_RANLIB}
397
+ CACHE PATH "Path to ranlib program with LTO-plugin" FORCE)
398
+ set(CMAKE_CXX_COMPILER_RANLIB
399
+ ${CMAKE_RANLIB}
400
+ CACHE PATH "Path to ranlib program with LTO-plugin" FORCE)
401
+ message(STATUS "MDBX indulge Link-Time Optimization by GCC")
402
+ elseif(CLANG_LTO_AVAILABLE)
403
+ set(LTO_ENABLED TRUE)
404
+ if(CMAKE_CLANG_LD)
405
+ set(CMAKE_LINKER
406
+ ${CMAKE_CLANG_LD}
407
+ CACHE PATH "Path to lld or ld program with LTO-plugin" FORCE)
408
+ endif()
409
+ set(CMAKE_AR
410
+ ${CMAKE_CLANG_AR}
411
+ CACHE PATH "Path to ar program with LTO-plugin" FORCE)
412
+ set(CMAKE_C_COMPILER_AR
413
+ ${CMAKE_AR}
414
+ CACHE PATH "Path to ar program with LTO-plugin" FORCE)
415
+ set(CMAKE_CXX_COMPILER_AR
416
+ ${CMAKE_AR}
417
+ CACHE PATH "Path to ar program with LTO-plugin" FORCE)
418
+ set(CMAKE_NM
419
+ ${CMAKE_CLANG_NM}
420
+ CACHE PATH "Path to nm program with LTO-plugin" FORCE)
421
+ set(CMAKE_RANLIB
422
+ ${CMAKE_CLANG_RANLIB}
423
+ CACHE PATH "Path to ranlib program with LTO-plugin" FORCE)
424
+ set(CMAKE_C_COMPILER_RANLIB
425
+ ${CMAKE_RANLIB}
426
+ CACHE PATH "Path to ranlib program with LTO-plugin" FORCE)
427
+ set(CMAKE_CXX_COMPILER_RANLIB
428
+ ${CMAKE_RANLIB}
429
+ CACHE PATH "Path to ranlib program with LTO-plugin" FORCE)
430
+ message(STATUS "MDBX indulge Link-Time Optimization by CLANG")
431
+ elseif(MSVC_LTO_AVAILABLE)
432
+ set(LTO_ENABLED TRUE)
433
+ message(STATUS "MDBX indulge Link-Time Optimization by MSVC")
434
+ elseif(CMAKE_INTERPROCEDURAL_OPTIMIZATION_AVAILABLE)
435
+ message(STATUS "MDBX indulge Interprocedural Optimization by CMake")
436
+ set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
437
+ set(LTO_ENABLED TRUE)
438
+ else()
439
+ message(WARNING "Unable to engage interprocedural/LTO optimization.")
440
+ endif()
441
+ else()
442
+ set(CMAKE_INTERPROCEDURAL_OPTIMIZATION FALSE)
443
+ set(LTO_ENABLED FALSE)
444
+ endif()
445
+
446
+ if(NOT MDBX_AMALGAMATED_SOURCE)
447
+ find_program(VALGRIND valgrind)
448
+ if(VALGRIND)
449
+ # (LY) cmake is ugly and nasty. Therefore memcheck-options should be defined before including ctest. Otherwise
450
+ # ctest may ignore it.
451
+ set(MEMORYCHECK_SUPPRESSIONS_FILE
452
+ "${CMAKE_CURRENT_SOURCE_DIR}/test/valgrind_suppress.txt"
453
+ CACHE FILEPATH "Suppressions file for Valgrind" FORCE)
454
+ set(MEMORYCHECK_COMMAND_OPTIONS
455
+ "--trace-children=yes --leak-check=full --track-origins=yes --track-origins=yes --error-exitcode=42 --error-markers=@ --errors-for-leak-kinds=definite --fair-sched=yes --suppressions=${MEMORYCHECK_SUPPRESSIONS_FILE}"
456
+ CACHE STRING "Valgrind options" FORCE)
457
+ set(VALGRIND_COMMAND_OPTIONS
458
+ "${MEMORYCHECK_COMMAND_OPTIONS}"
459
+ CACHE STRING "Valgrind options" FORCE)
460
+ endif()
461
+
462
+ # Enable 'make tags' target.
463
+ find_program(CTAGS ctags)
464
+ if(CTAGS)
465
+ add_custom_target(
466
+ tags
467
+ COMMAND ${CTAGS} -R -f tags
468
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
469
+ add_custom_target(ctags DEPENDS tags)
470
+ endif(CTAGS)
471
+
472
+ if(UNIX)
473
+ find_program(CLANG_FORMAT NAMES clang-format-13 clang-format)
474
+ if(CLANG_FORMAT)
475
+ execute_process(COMMAND ${CLANG_FORMAT} "--version" OUTPUT_VARIABLE clang_format_version_info)
476
+ string(REGEX MATCH "version ([0-9]+)\\.([0-9]+)\\.([0-9]+)(.*)?" clang_format_version_info CLANG_FORMAT_VERSION)
477
+ if(clang_format_version_info AND NOT CLANG_FORMAT_VERSION VERSION_LESS 13.0)
478
+ # Enable 'make reformat' target.
479
+ add_custom_target(
480
+ reformat
481
+ VERBATIM
482
+ COMMAND git ls-files | grep -E \\.\(c|cxx|cc|cpp|h|hxx|hpp\)\(\\.in\)?\$ | xargs ${CLANG_FORMAT} -i
483
+ --style=file
484
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
485
+ endif()
486
+ endif()
487
+ endif()
488
+
489
+ if(NOT "${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
490
+ add_custom_target(distclean)
491
+ add_custom_command(
492
+ TARGET distclean
493
+ POST_BUILD
494
+ COMMAND ${CMAKE_COMMAND} -E remove_directory "${PROJECT_BINARY_DIR}"
495
+ COMMENT "Removing the build directory and its content")
496
+ elseif(IS_DIRECTORY .git AND GIT)
497
+ add_custom_target(distclean)
498
+ add_custom_command(
499
+ TARGET distclean
500
+ POST_BUILD
501
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
502
+ COMMAND ${GIT} submodule foreach --recursive git clean -f -X -d
503
+ COMMAND ${GIT} clean -f -X -d
504
+ COMMENT "Removing all build files from the source directory")
505
+ endif()
506
+ endif(NOT MDBX_AMALGAMATED_SOURCE)
507
+
508
+ set(MDBX_MANAGE_BUILD_FLAGS_DEFAULT ON)
509
+ endif(SUBPROJECT)
510
+
511
+ option(MDBX_MANAGE_BUILD_FLAGS "Allow libmdbx to configure/manage/override its own build flags"
512
+ ${MDBX_MANAGE_BUILD_FLAGS_DEFAULT})
513
+ if(MDBX_MANAGE_BUILD_FLAGS)
514
+ setup_compile_flags()
515
+ endif()
516
+
517
+ list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_11 HAS_CXX11)
518
+ list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_14 HAS_CXX14)
519
+ list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_17 HAS_CXX17)
520
+ list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_20 HAS_CXX20)
521
+ list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_23 HAS_CXX23)
522
+ if(NOT DEFINED MDBX_CXX_STANDARD)
523
+ if(DEFINED ENV{CMAKE_CXX_STANDARD})
524
+ set(CMAKE_CXX_STANDARD $ENV{CMAKE_CXX_STANDARD})
525
+ endif()
526
+ if(DEFINED CMAKE_CXX_STANDARD)
527
+ set(MDBX_CXX_STANDARD ${CMAKE_CXX_STANDARD})
528
+ elseif(NOT HAS_CXX23 LESS 0 AND NOT (CMAKE_COMPILER_IS_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12))
529
+ set(MDBX_CXX_STANDARD 23)
530
+ elseif(NOT HAS_CXX20 LESS 0 AND NOT (CMAKE_COMPILER_IS_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10))
531
+ set(MDBX_CXX_STANDARD 20)
532
+ elseif(NOT HAS_CXX17 LESS 0 AND NOT (CMAKE_COMPILER_IS_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5))
533
+ set(MDBX_CXX_STANDARD 17)
534
+ elseif(NOT HAS_CXX14 LESS 0)
535
+ set(MDBX_CXX_STANDARD 14)
536
+ elseif(NOT HAS_CXX11 LESS 0)
537
+ set(MDBX_CXX_STANDARD 11)
538
+ elseif(CXX_FALLBACK_GNU11 OR CXX_FALLBACK_11)
539
+ set(MDBX_CXX_STANDARD 11)
540
+ else()
541
+ set(MDBX_CXX_STANDARD 98)
542
+ endif()
543
+ endif()
544
+
545
+ list(FIND CMAKE_C_COMPILE_FEATURES c_std_11 HAS_C11)
546
+ list(FIND CMAKE_C_COMPILE_FEATURES c_std_23 HAS_C23)
547
+ if(NOT DEFINED MDBX_C_STANDARD)
548
+ if(DEFINED ENV{CMAKE_C_STANDARD})
549
+ set(CMAKE_C_STANDARD $ENV{CMAKE_C_STANDARD})
550
+ endif()
551
+ if(DEFINED CMAKE_C_STANDARD)
552
+ set(MDBX_C_STANDARD ${CMAKE_C_STANDARD})
553
+ elseif(
554
+ MSVC
555
+ # MSVC >= 19.28 (Microsoft Visual Studio 16.8) is mad! It unable process Windows SDK headers in the C11 mode!
556
+ AND MSVC_VERSION GREATER 1927
557
+ AND NOT MSVC_VERSION GREATER 1929)
558
+ set(MDBX_C_STANDARD 99)
559
+ set(C_FALLBACK_11 OFF)
560
+ set(C_FALLBACK_GNU11 OFF)
561
+ elseif(NOT HAS_C23 LESS 0)
562
+ set(MDBX_C_STANDARD 23)
563
+ elseif(
564
+ HAS_C11 LESS 0
565
+ AND NOT C_FALLBACK_GNU11
566
+ AND NOT C_FALLBACK_11)
567
+ set(MDBX_C_STANDARD 99)
568
+ else()
569
+ set(MDBX_C_STANDARD 11)
570
+ endif()
571
+ endif()
572
+
573
+ if(WIN32 AND EXISTS "${MDBX_SOURCE_DIR}/ntdll.def")
574
+ if(MSVC)
575
+ if(NOT MSVC_LIB_EXE)
576
+ # Find lib.exe
577
+ get_filename_component(CL_NAME ${CMAKE_C_COMPILER} NAME)
578
+ string(REPLACE cl.exe lib.exe MSVC_LIB_EXE ${CL_NAME})
579
+ find_program(MSVC_LIB_EXE ${MSVC_LIB_EXE})
580
+ endif()
581
+ if(MSVC_LIB_EXE)
582
+ message(STATUS "Found MSVC's lib tool: ${MSVC_LIB_EXE}")
583
+ set(MDBX_NTDLL_EXTRA_IMPLIB "${CMAKE_CURRENT_BINARY_DIR}/mdbx_ntdll_extra.lib")
584
+ add_custom_command(
585
+ OUTPUT "${MDBX_NTDLL_EXTRA_IMPLIB}"
586
+ COMMENT "Create extra-import-library for ntdll.dll"
587
+ MAIN_DEPENDENCY "${MDBX_SOURCE_DIR}/ntdll.def"
588
+ COMMAND ${MSVC_LIB_EXE} /def:"${MDBX_SOURCE_DIR}/ntdll.def" /out:"${MDBX_NTDLL_EXTRA_IMPLIB}"
589
+ ${INITIAL_CMAKE_STATIC_LINKER_FLAGS})
590
+ else()
591
+ message(WARNING "MSVC's lib tool not found")
592
+ endif()
593
+ elseif(MINGW OR MINGW64)
594
+ if(NOT DLLTOOL)
595
+ # Find dlltool
596
+ get_filename_component(GCC_NAME ${CMAKE_C_COMPILER} NAME)
597
+ string(REPLACE gcc dlltool DLLTOOL_NAME ${GCC_NAME})
598
+ find_program(DLLTOOL NAMES ${DLLTOOL_NAME})
599
+ endif()
600
+ if(DLLTOOL)
601
+ message(STATUS "Found dlltool: ${DLLTOOL}")
602
+ set(MDBX_NTDLL_EXTRA_IMPLIB "${CMAKE_CURRENT_BINARY_DIR}/mdbx_ntdll_extra.a")
603
+ add_custom_command(
604
+ OUTPUT "${MDBX_NTDLL_EXTRA_IMPLIB}"
605
+ COMMENT "Create extra-import-library for ntdll.dll"
606
+ MAIN_DEPENDENCY "${MDBX_SOURCE_DIR}/ntdll.def"
607
+ COMMAND ${DLLTOOL} -d "${MDBX_SOURCE_DIR}/ntdll.def" -l "${MDBX_NTDLL_EXTRA_IMPLIB}")
608
+ else()
609
+ message(WARNING "dlltool not found")
610
+ endif()
611
+ endif()
612
+
613
+ if(MDBX_NTDLL_EXTRA_IMPLIB)
614
+ # Sometimes CMake requires a nightmarish magic for simple things.
615
+ #
616
+ # (1) create a target out of the library compilation result
617
+ add_custom_target(ntdll_extra_target DEPENDS "${MDBX_NTDLL_EXTRA_IMPLIB}")
618
+ # (2) create an library target out of the library compilation result
619
+ add_library(ntdll_extra STATIC IMPORTED GLOBAL)
620
+ add_dependencies(ntdll_extra ntdll_extra_target)
621
+ # (3) specify where the library is (and where to find the headers)
622
+ set_target_properties(ntdll_extra PROPERTIES IMPORTED_LOCATION "${MDBX_NTDLL_EXTRA_IMPLIB}")
623
+ endif()
624
+ endif()
625
+
626
+ # ######################################################################################################################
627
+ # ~~~
628
+ #
629
+ # #### ##### ##### # #### # # ####
630
+ # # # # # # # # # ## # #
631
+ # # # # # # # # # # # # ####
632
+ # # # ##### # # # # # # # #
633
+ # # # # # # # # # ## # #
634
+ # #### # # # #### # # ####
635
+ #
636
+ # ~~~
637
+ # ######################################################################################################################
638
+
639
+ set(MDBX_BUILD_OPTIONS ENABLE_UBSAN ENABLE_ASAN ENABLE_MEMCHECK ENABLE_GPROF ENABLE_GCOV)
640
+
641
+ if(IOS)
642
+ set(MDBX_BUILD_TOOLS_DEFAULT OFF)
643
+ if(NOT_SUBPROJECT)
644
+ cmake_policy(SET CMP0006 OLD)
645
+ set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED NO)
646
+ endif()
647
+ else()
648
+ set(MDBX_BUILD_TOOLS_DEFAULT ON)
649
+ endif()
650
+
651
+ add_option(MDBX INSTALL_STATIC "Build and install libmdbx for static linking" OFF)
652
+ add_option(MDBX BUILD_SHARED_LIBRARY "Build libmdbx as shared library (DLL)" ${BUILD_SHARED_LIBS})
653
+ add_option(MDBX BUILD_TOOLS "Build MDBX tools (mdbx_chk/stat/dump/load/copy/drop)" ${MDBX_BUILD_TOOLS_DEFAULT})
654
+ cmake_dependent_option(MDBX_INSTALL_MANPAGES "Install man-pages for MDBX tools (mdbx_chk/stat/dump/load/copy)" ON
655
+ MDBX_BUILD_TOOLS OFF)
656
+ add_option(MDBX TXN_CHECKOWNER "Checking transaction matches the calling thread inside libmdbx's API" ON)
657
+ add_option(MDBX ENV_CHECKPID "Checking PID inside libmdbx's API against reuse DB environment after the fork()" AUTO)
658
+ mark_as_advanced(MDBX_ENV_CHECKPID)
659
+ if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
660
+ add_option(MDBX DISABLE_GNU_SOURCE "Don't use GNU/Linux libc extensions" OFF)
661
+ mark_as_advanced(MDBX_DISABLE_GNU_SOURCE)
662
+ endif()
663
+ if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR IOS)
664
+ add_option(MDBX APPLE_SPEED_INSTEADOF_DURABILITY "Disable use fcntl(F_FULLFSYNC) in favor of speed" OFF)
665
+ mark_as_advanced(MDBX_APPLE_SPEED_INSTEADOF_DURABILITY)
666
+ endif()
667
+ if(WIN32)
668
+ if(MDBX_NTDLL_EXTRA_IMPLIB)
669
+ add_option(MDBX WITHOUT_MSVC_CRT "Avoid dependence from MSVC CRT and use ntdll.dll instead" OFF)
670
+ endif()
671
+ set(MDBX_AVOID_MSYNC_DEFAULT ON)
672
+ else()
673
+ add_option(MDBX USE_OFDLOCKS "Use Open file description locks (aka OFD locks, non-POSIX)" AUTO)
674
+ mark_as_advanced(MDBX_USE_OFDLOCKS)
675
+ add_option(MDBX USE_MINCORE "Use Unix' mincore() to determine whether DB-pages are resident in memory" ON)
676
+ mark_as_advanced(MDBX_USE_MINCORE)
677
+ set(MDBX_AVOID_MSYNC_DEFAULT OFF)
678
+ endif()
679
+ add_option(
680
+ MDBX AVOID_MSYNC
681
+ "Disable in-memory database updating with consequent flush-to-disk/msync syscall in `MDBX_WRITEMAP` mode"
682
+ ${MDBX_AVOID_MSYNC_DEFAULT})
683
+ add_option(MDBX MMAP_NEEDS_JOLT "Assume system needs explicit syscall to sync/flush/write modified mapped memory" AUTO)
684
+ mark_as_advanced(MDBX_MMAP_NEEDS_JOLT)
685
+ add_option(MDBX LOCKING "Locking method (Windows=-1, SystemV=5, POSIX=1988, POSIX=2001, POSIX=2008)" AUTO)
686
+ mark_as_advanced(MDBX_LOCKING)
687
+ add_option(MDBX TRUST_RTC "Does a system have battery-backed Real-Time Clock or just a fake" AUTO)
688
+ mark_as_advanced(MDBX_TRUST_RTC)
689
+ add_option(MDBX FORCE_ASSERTIONS "Force enable assertion checking" OFF)
690
+ add_option(
691
+ MDBX
692
+ DISABLE_VALIDATION
693
+ "Disable some checks to reduce an overhead and detection probability of database corruption to a values closer to the LMDB"
694
+ OFF)
695
+ mark_as_advanced(MDBX_DISABLE_VALIDATION)
696
+ add_option(MDBX ENABLE_REFUND "Zerocost auto-compactification during write-transactions" ON)
697
+ add_option(MDBX ENABLE_BIGFOOT
698
+ "Chunking long list of retired pages during huge transactions commit to avoid use sequences of pages" ON)
699
+ add_option(MDBX ENABLE_PGOP_STAT "Gathering statistics for page operations" ON)
700
+ add_option(MDBX ENABLE_PROFGC "Profiling of GC search and updates" OFF)
701
+ mark_as_advanced(MDBX_ENABLE_PROFGC)
702
+ add_option(MDBX ENABLE_DBI_SPARSE
703
+ "Support for sparse sets of DBI handles to reduce overhead when starting and processing transactions" ON)
704
+ add_option(MDBX ENABLE_DBI_LOCKFREE "Support for deferred releasing and a lockfree path to quickly open DBI handles" ON)
705
+
706
+ if(NOT MDBX_AMALGAMATED_SOURCE)
707
+ if(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE_UPPERCASE STREQUAL "DEBUG")
708
+ set(MDBX_ALLOY_BUILD_DEFAULT OFF)
709
+ else()
710
+ set(MDBX_ALLOY_BUILD_DEFAULT ON)
711
+ endif()
712
+ add_option(MDBX ALLOY_BUILD "Build MDBX library through single/alloyed object file" ${MDBX_ALLOY_BUILD_DEFAULT})
713
+ endif()
714
+
715
+ if((MDBX_BUILD_TOOLS OR MDBX_ENABLE_TESTS) AND MDBX_BUILD_SHARED_LIBRARY)
716
+ add_option(MDBX LINK_TOOLS_NONSTATIC "Link MDBX tools with non-static libmdbx" OFF)
717
+ else()
718
+ unset(MDBX_LINK_TOOLS_NONSTATIC CACHE)
719
+ endif()
720
+
721
+ if(CMAKE_CXX_COMPILER_LOADED
722
+ AND MDBX_CXX_STANDARD LESS 83
723
+ AND NOT MDBX_CXX_STANDARD LESS 11)
724
+ if(NOT MDBX_AMALGAMATED_SOURCE)
725
+ option(MDBX_ENABLE_TESTS "Build MDBX tests" ${BUILD_TESTING})
726
+ endif()
727
+ if(NOT MDBX_WITHOUT_MSVC_CRT
728
+ AND NOT (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
729
+ AND NOT (CMAKE_COMPILER_IS_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.9)
730
+ AND NOT (MSVC AND MSVC_VERSION LESS 1900))
731
+ option(MDBX_BUILD_CXX "Build C++ portion" ON)
732
+ else()
733
+ set(MDBX_BUILD_CXX FALSE)
734
+ endif()
735
+ else()
736
+ set(MDBX_BUILD_CXX FALSE)
737
+ set(MDBX_ENABLE_TESTS FALSE)
738
+ endif()
739
+
740
+ if(CI)
741
+ add_definitions(-DMDBX_CI="${CI}")
742
+ endif()
743
+
744
+ # ######################################################################################################################
745
+
746
+ if(MDBX_BUILD_CXX AND NOT CMAKE_CXX_COMPILER_LOADED)
747
+ message(FATAL_ERROR "MDBX_BUILD_CXX=${MDBX_BUILD_CXX}: The C++ compiler is required to build the C++API.")
748
+ endif()
749
+
750
+ if(MDBX_BUILD_CXX)
751
+ # determine library for C++ std::filesystem
752
+ probe_libcxx_filesystem()
753
+ endif()
754
+
755
+ # sources list
756
+ set(LIBMDBX_PUBLIC_HEADERS mdbx.h)
757
+ set(LIBMDBX_SOURCES mdbx.h "${CMAKE_CURRENT_BINARY_DIR}/config.h")
758
+ if(MDBX_AMALGAMATED_SOURCE)
759
+ list(APPEND LIBMDBX_SOURCES mdbx.c)
760
+ else()
761
+ # generate version file
762
+ configure_file("${MDBX_SOURCE_DIR}/version.c.in" "${CMAKE_CURRENT_BINARY_DIR}/version.c" ESCAPE_QUOTES)
763
+ file(SHA256 "${CMAKE_CURRENT_BINARY_DIR}/version.c" MDBX_SOURCERY_DIGEST)
764
+ string(MAKE_C_IDENTIFIER "${MDBX_GIT_DESCRIBE}" MDBX_SOURCERY_SUFFIX)
765
+ set(MDBX_BUILD_SOURCERY "${MDBX_SOURCERY_DIGEST}_${MDBX_SOURCERY_SUFFIX}")
766
+
767
+ if(MDBX_ALLOY_BUILD)
768
+ list(APPEND LIBMDBX_SOURCES "${MDBX_SOURCE_DIR}/alloy.c")
769
+ include_directories("${MDBX_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}")
770
+ else()
771
+ list(
772
+ APPEND
773
+ LIBMDBX_SOURCES
774
+ "${MDBX_SOURCE_DIR}/api-cold.c"
775
+ "${MDBX_SOURCE_DIR}/api-copy.c"
776
+ "${MDBX_SOURCE_DIR}/api-cursor.c"
777
+ "${MDBX_SOURCE_DIR}/api-dbi.c"
778
+ "${MDBX_SOURCE_DIR}/api-env.c"
779
+ "${MDBX_SOURCE_DIR}/api-extra.c"
780
+ "${MDBX_SOURCE_DIR}/api-key-transform.c"
781
+ "${MDBX_SOURCE_DIR}/api-misc.c"
782
+ "${MDBX_SOURCE_DIR}/api-opts.c"
783
+ "${MDBX_SOURCE_DIR}/api-range-estimate.c"
784
+ "${MDBX_SOURCE_DIR}/api-txn-data.c"
785
+ "${MDBX_SOURCE_DIR}/api-txn.c"
786
+ "${MDBX_SOURCE_DIR}/atomics-ops.h"
787
+ "${MDBX_SOURCE_DIR}/atomics-types.h"
788
+ "${MDBX_SOURCE_DIR}/audit.c"
789
+ "${MDBX_SOURCE_DIR}/chk.c"
790
+ "${MDBX_SOURCE_DIR}/cogs.c"
791
+ "${MDBX_SOURCE_DIR}/cogs.h"
792
+ "${MDBX_SOURCE_DIR}/coherency.c"
793
+ "${MDBX_SOURCE_DIR}/cursor.c"
794
+ "${MDBX_SOURCE_DIR}/cursor.h"
795
+ "${MDBX_SOURCE_DIR}/dbi.c"
796
+ "${MDBX_SOURCE_DIR}/dbi.h"
797
+ "${MDBX_SOURCE_DIR}/dpl.c"
798
+ "${MDBX_SOURCE_DIR}/dpl.h"
799
+ "${MDBX_SOURCE_DIR}/dxb.c"
800
+ "${MDBX_SOURCE_DIR}/env.c"
801
+ "${MDBX_SOURCE_DIR}/essentials.h"
802
+ "${MDBX_SOURCE_DIR}/gc-get.c"
803
+ "${MDBX_SOURCE_DIR}/gc-put.c"
804
+ "${MDBX_SOURCE_DIR}/gc.h"
805
+ "${MDBX_SOURCE_DIR}/global.c"
806
+ "${MDBX_SOURCE_DIR}/internals.h"
807
+ "${MDBX_SOURCE_DIR}/layout-dxb.h"
808
+ "${MDBX_SOURCE_DIR}/layout-lck.h"
809
+ "${MDBX_SOURCE_DIR}/lck.c"
810
+ "${MDBX_SOURCE_DIR}/lck.h"
811
+ "${MDBX_SOURCE_DIR}/logging_and_debug.c"
812
+ "${MDBX_SOURCE_DIR}/logging_and_debug.h"
813
+ "${MDBX_SOURCE_DIR}/meta.c"
814
+ "${MDBX_SOURCE_DIR}/meta.h"
815
+ "${MDBX_SOURCE_DIR}/mvcc-readers.c"
816
+ "${MDBX_SOURCE_DIR}/node.c"
817
+ "${MDBX_SOURCE_DIR}/node.h"
818
+ "${MDBX_SOURCE_DIR}/options.h"
819
+ "${MDBX_SOURCE_DIR}/osal.c"
820
+ "${MDBX_SOURCE_DIR}/osal.h"
821
+ "${MDBX_SOURCE_DIR}/page-get.c"
822
+ "${MDBX_SOURCE_DIR}/page-iov.c"
823
+ "${MDBX_SOURCE_DIR}/page-iov.h"
824
+ "${MDBX_SOURCE_DIR}/page-ops.c"
825
+ "${MDBX_SOURCE_DIR}/page-ops.h"
826
+ "${MDBX_SOURCE_DIR}/tree-search.c"
827
+ "${MDBX_SOURCE_DIR}/pnl.c"
828
+ "${MDBX_SOURCE_DIR}/pnl.h"
829
+ "${MDBX_SOURCE_DIR}/preface.h"
830
+ "${MDBX_SOURCE_DIR}/proto.h"
831
+ "${MDBX_SOURCE_DIR}/refund.c"
832
+ "${MDBX_SOURCE_DIR}/sort.h"
833
+ "${MDBX_SOURCE_DIR}/spill.c"
834
+ "${MDBX_SOURCE_DIR}/spill.h"
835
+ "${MDBX_SOURCE_DIR}/table.c"
836
+ "${MDBX_SOURCE_DIR}/tls.c"
837
+ "${MDBX_SOURCE_DIR}/tls.h"
838
+ "${MDBX_SOURCE_DIR}/tree-ops.c"
839
+ "${MDBX_SOURCE_DIR}/txl.c"
840
+ "${MDBX_SOURCE_DIR}/txl.h"
841
+ "${MDBX_SOURCE_DIR}/txn.c"
842
+ "${MDBX_SOURCE_DIR}/unaligned.h"
843
+ "${MDBX_SOURCE_DIR}/utils.c"
844
+ "${MDBX_SOURCE_DIR}/utils.h"
845
+ "${MDBX_SOURCE_DIR}/walk.c"
846
+ "${MDBX_SOURCE_DIR}/walk.h"
847
+ "${CMAKE_CURRENT_BINARY_DIR}/version.c")
848
+ if(NOT MSVC)
849
+ list(APPEND LIBMDBX_SOURCES "${MDBX_SOURCE_DIR}/lck-posix.c")
850
+ endif()
851
+ if(NOT APPLE)
852
+ list(APPEND LIBMDBX_SOURCES "${MDBX_SOURCE_DIR}/windows-import.h" "${MDBX_SOURCE_DIR}/windows-import.c"
853
+ "${MDBX_SOURCE_DIR}/lck-windows.c")
854
+ endif()
855
+ include_directories("${MDBX_SOURCE_DIR}")
856
+ endif()
857
+ endif(MDBX_AMALGAMATED_SOURCE)
858
+ if(MDBX_BUILD_CXX)
859
+ message(STATUS "Use C${MDBX_C_STANDARD} and C++${MDBX_CXX_STANDARD} for libmdbx")
860
+ list(APPEND LIBMDBX_PUBLIC_HEADERS mdbx.h++)
861
+ list(APPEND LIBMDBX_SOURCES "${MDBX_SOURCE_DIR}/mdbx.c++" mdbx.h++)
862
+ else()
863
+ message(STATUS "Use C${MDBX_C_STANDARD} for libmdbx but C++ portion is disabled")
864
+ endif()
865
+
866
+ if(MSVC)
867
+ add_compile_options("/utf-8")
868
+ endif()
869
+
870
+ macro(target_setup_options TARGET)
871
+ if(DEFINED INTERPROCEDURAL_OPTIMIZATION)
872
+ set_target_properties(${TARGET} PROPERTIES INTERPROCEDURAL_OPTIMIZATION $<BOOL:${INTERPROCEDURAL_OPTIMIZATION}>)
873
+ endif()
874
+ if(NOT C_FALLBACK_GNU11 AND NOT C_FALLBACK_11)
875
+ set_target_properties(${TARGET} PROPERTIES C_STANDARD ${MDBX_C_STANDARD} C_STANDARD_REQUIRED ON)
876
+ endif()
877
+ if(MDBX_BUILD_CXX)
878
+ if(NOT CXX_FALLBACK_GNU11 AND NOT CXX_FALLBACK_11)
879
+ set_target_properties(${TARGET} PROPERTIES CXX_STANDARD ${MDBX_CXX_STANDARD} CXX_STANDARD_REQUIRED ON)
880
+ endif()
881
+ if(MSVC AND NOT MSVC_VERSION LESS 1910)
882
+ target_compile_options(${TARGET} INTERFACE "/Zc:__cplusplus")
883
+ endif()
884
+ endif()
885
+ if(CC_HAS_FASTMATH AND NOT (CMAKE_COMPILER_IS_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10))
886
+ target_compile_options(${TARGET} PRIVATE "-ffast-math")
887
+ endif()
888
+ if(CC_HAS_VISIBILITY)
889
+ target_compile_options(${TARGET} PRIVATE "-fvisibility=hidden")
890
+ endif()
891
+ if(BUILD_FOR_NATIVE_CPU AND CC_HAS_ARCH_NATIVE)
892
+ target_compile_options(${TARGET} PRIVATE "-march=native")
893
+ endif()
894
+ endmacro()
895
+
896
+ macro(libmdbx_setup_libs TARGET MODE)
897
+ if(CMAKE_VERSION VERSION_LESS 3.1)
898
+ target_link_libraries(${TARGET} ${MODE} ${CMAKE_THREAD_LIBS_INIT})
899
+ else()
900
+ target_link_libraries(${TARGET} ${MODE} Threads::Threads)
901
+ endif()
902
+ if(WIN32)
903
+ target_link_libraries(
904
+ ${TARGET}
905
+ ${MODE}
906
+ ntdll
907
+ user32
908
+ kernel32
909
+ advapi32
910
+ ole32)
911
+ if(MDBX_NTDLL_EXTRA_IMPLIB AND MDBX_WITHOUT_MSVC_CRT)
912
+ target_link_libraries(${TARGET} ${MODE} ntdll_extra)
913
+ endif()
914
+ elseif(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Solaris")
915
+ target_link_libraries(${TARGET} ${MODE} kstat)
916
+ elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Android")
917
+ target_link_libraries(${TARGET} ${MODE} log)
918
+ endif()
919
+ if(LIBCXX_FILESYSTEM AND MDBX_BUILD_CXX)
920
+ if(CMAKE_COMPILER_IS_ELBRUSCXX
921
+ AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 1.25.23
922
+ AND NOT CMAKE_VERSION VERSION_LESS 3.13)
923
+ target_link_options(${TARGET} PUBLIC "-Wl,--allow-multiple-definition")
924
+ endif()
925
+ target_link_libraries(${TARGET} PUBLIC ${LIBCXX_FILESYSTEM})
926
+ endif()
927
+ endmacro()
928
+
929
+ # build static library
930
+ if(MDBX_INSTALL_STATIC)
931
+ add_library(mdbx-static STATIC ${LIBMDBX_SOURCES})
932
+ else()
933
+ add_library(mdbx-static STATIC EXCLUDE_FROM_ALL ${LIBMDBX_SOURCES})
934
+ endif()
935
+ set_target_properties(mdbx-static PROPERTIES PUBLIC_HEADER "${LIBMDBX_PUBLIC_HEADERS}")
936
+ target_compile_definitions(mdbx-static PRIVATE MDBX_BUILD_SHARED_LIBRARY=0)
937
+ target_setup_options(mdbx-static)
938
+ libmdbx_setup_libs(mdbx-static INTERFACE)
939
+ if(MDBX_BUILD_SHARED_LIBRARY)
940
+ set_target_properties(mdbx-static PROPERTIES OUTPUT_NAME mdbx-static)
941
+ else()
942
+ set_target_properties(mdbx-static PROPERTIES OUTPUT_NAME mdbx)
943
+ endif()
944
+ target_include_directories(mdbx-static INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
945
+
946
+ # ######################################################################################################################
947
+
948
+ # build shared library
949
+ if(MDBX_BUILD_SHARED_LIBRARY)
950
+ add_library(mdbx SHARED ${LIBMDBX_SOURCES})
951
+ set_target_properties(mdbx PROPERTIES PUBLIC_HEADER "${LIBMDBX_PUBLIC_HEADERS}")
952
+ target_compile_definitions(
953
+ mdbx
954
+ PRIVATE LIBMDBX_EXPORTS MDBX_BUILD_SHARED_LIBRARY=1
955
+ INTERFACE LIBMDBX_IMPORTS)
956
+ target_setup_options(mdbx)
957
+ libmdbx_setup_libs(mdbx PRIVATE)
958
+ if(MSVC)
959
+ if(MDBX_NTDLL_EXTRA_IMPLIB AND MDBX_WITHOUT_MSVC_CRT)
960
+ set_property(TARGET mdbx PROPERTY LINKER_FLAGS "/NODEFAULTLIB")
961
+ else()
962
+ set_property(TARGET mdbx PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
963
+ endif()
964
+ endif()
965
+ if(CC_HAS_VISIBILITY AND (LTO_ENABLED OR INTERPROCEDURAL_OPTIMIZATION))
966
+ set_target_properties(mdbx PROPERTIES LINK_FLAGS "-fvisibility=hidden")
967
+ endif()
968
+ list(APPEND MDBX_BUILD_FLAGS ${CMAKE_SHARED_LINKER_FLAGS})
969
+ target_include_directories(mdbx INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
970
+ endif()
971
+
972
+ if(MDBX_BUILD_SHARED_LIBRARY AND MDBX_LINK_TOOLS_NONSTATIC)
973
+ set(TOOL_MDBX_LIB mdbx)
974
+
975
+ # use, i.e. don't skip the full RPATH for the build tree
976
+ set(CMAKE_SKIP_BUILD_RPATH FALSE)
977
+
978
+ # when building, don't use the install RPATH already (but later on when installing)
979
+ set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
980
+
981
+ # add the automatically determined parts of the RPATH which point to directories outside the build tree to the install
982
+ # RPATH
983
+ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
984
+
985
+ # the RPATH to be used when installing, but only if it's not a system directory
986
+ list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
987
+ if(isSystemDir EQUAL -1)
988
+ if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
989
+ set(CMAKE_INSTALL_RPATH "@executable_path/../lib")
990
+ else()
991
+ set(CMAKE_INSTALL_RPATH "\$ORIGIN/../lib")
992
+ endif()
993
+ endif()
994
+
995
+ if(WIN32)
996
+ # Windows don't have RPATH feature, therefore we should prepare PATH or copy DLL(s)
997
+ set(TOOL_MDBX_DLLCRUTCH "Crutch for ${CMAKE_SYSTEM_NAME}")
998
+ if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_VERSION VERSION_LESS 3.0)
999
+ # will use LOCATION property to compose DLLPATH
1000
+ cmake_policy(SET CMP0026 OLD)
1001
+ endif()
1002
+ else()
1003
+ set(TOOL_MDBX_DLLCRUTCH FALSE)
1004
+ endif()
1005
+ else()
1006
+ set(TOOL_MDBX_LIB mdbx-static)
1007
+ set(TOOL_MDBX_DLLCRUTCH FALSE)
1008
+ endif()
1009
+
1010
+ # build mdbx-tools
1011
+ if(MDBX_BUILD_TOOLS)
1012
+ set(WINGETOPT_SRC "")
1013
+ if(WIN32)
1014
+ set(WINGETOPT_SRC ${MDBX_SOURCE_DIR}/tools/wingetopt.c ${MDBX_SOURCE_DIR}/tools/wingetopt.h)
1015
+ endif()
1016
+
1017
+ foreach(TOOL chk copy stat dump load drop)
1018
+ if(MDBX_AMALGAMATED_SOURCE)
1019
+ add_executable(mdbx_${TOOL} mdbx.h ${MDBX_SOURCE_DIR}/mdbx_${TOOL}.c)
1020
+ else()
1021
+ add_executable(mdbx_${TOOL} mdbx.h ${MDBX_SOURCE_DIR}/tools/${TOOL}.c ${WINGETOPT_SRC})
1022
+ endif()
1023
+ if(NOT C_FALLBACK_GNU11 AND NOT C_FALLBACK_11)
1024
+ set_target_properties(mdbx_${TOOL} PROPERTIES C_STANDARD ${MDBX_C_STANDARD} C_STANDARD_REQUIRED ON)
1025
+ endif()
1026
+ target_setup_options(mdbx_${TOOL})
1027
+ target_link_libraries(mdbx_${TOOL} ${TOOL_MDBX_LIB})
1028
+ endforeach()
1029
+ if(LIB_MATH)
1030
+ target_link_libraries(mdbx_chk ${LIB_MATH})
1031
+ target_link_libraries(mdbx_stat ${LIB_MATH})
1032
+ endif()
1033
+ endif()
1034
+
1035
+ # ######################################################################################################################
1036
+
1037
+ # mdbx-shared-lib installation
1038
+ if(NOT DEFINED MDBX_DLL_INSTALL_DESTINATION)
1039
+ if(WIN32)
1040
+ set(MDBX_DLL_INSTALL_DESTINATION ${CMAKE_INSTALL_BINDIR})
1041
+ else()
1042
+ set(MDBX_DLL_INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR})
1043
+ endif()
1044
+ endif()
1045
+ if(MDBX_BUILD_SHARED_LIBRARY)
1046
+ if(CMAKE_VERSION VERSION_LESS 3.12)
1047
+ install(
1048
+ TARGETS mdbx
1049
+ EXPORT libmdbx
1050
+ LIBRARY DESTINATION ${MDBX_DLL_INSTALL_DESTINATION} COMPONENT runtime
1051
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
1052
+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT devel
1053
+ INCLUDES
1054
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
1055
+ COMPONENT devel)
1056
+ else()
1057
+ install(
1058
+ TARGETS mdbx
1059
+ EXPORT libmdbx
1060
+ LIBRARY DESTINATION ${MDBX_DLL_INSTALL_DESTINATION}
1061
+ COMPONENT runtime
1062
+ NAMELINK_COMPONENT devel
1063
+ OBJECTS DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
1064
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
1065
+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT devel
1066
+ INCLUDES
1067
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
1068
+ COMPONENT devel)
1069
+ endif()
1070
+ endif(MDBX_BUILD_SHARED_LIBRARY)
1071
+
1072
+ # mdbx-tools installation
1073
+ if(MDBX_BUILD_TOOLS)
1074
+ if(NOT DEFINED MDBX_TOOLS_INSTALL_DESTINATION)
1075
+ set(MDBX_TOOLS_INSTALL_DESTINATION ${CMAKE_INSTALL_BINDIR})
1076
+ endif()
1077
+ install(TARGETS mdbx_chk mdbx_stat mdbx_copy mdbx_dump mdbx_load mdbx_drop
1078
+ RUNTIME DESTINATION ${MDBX_TOOLS_INSTALL_DESTINATION} COMPONENT runtime)
1079
+ if(MDBX_INSTALL_MANPAGES)
1080
+ if(NOT DEFINED MDBX_MAN_INSTALL_DESTINATION)
1081
+ set(MDBX_MAN_INSTALL_DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
1082
+ endif()
1083
+ install(
1084
+ FILES "${MDBX_SOURCE_DIR}/man1/mdbx_chk.1" "${MDBX_SOURCE_DIR}/man1/mdbx_stat.1"
1085
+ "${MDBX_SOURCE_DIR}/man1/mdbx_copy.1" "${MDBX_SOURCE_DIR}/man1/mdbx_dump.1"
1086
+ "${MDBX_SOURCE_DIR}/man1/mdbx_load.1" "${MDBX_SOURCE_DIR}/man1/mdbx_drop.1"
1087
+ DESTINATION ${MDBX_MAN_INSTALL_DESTINATION}
1088
+ COMPONENT doc)
1089
+ endif()
1090
+ endif(MDBX_BUILD_TOOLS)
1091
+
1092
+ # mdbx-static-lib installation
1093
+ if(MDBX_INSTALL_STATIC)
1094
+ if(CMAKE_VERSION VERSION_LESS 3.12)
1095
+ install(
1096
+ TARGETS mdbx-static
1097
+ EXPORT libmdbx
1098
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
1099
+ OBJECTS DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
1100
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
1101
+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT devel
1102
+ INCLUDES
1103
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
1104
+ COMPONENT devel)
1105
+ else()
1106
+ install(
1107
+ TARGETS mdbx-static
1108
+ EXPORT libmdbx
1109
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
1110
+ COMPONENT devel
1111
+ NAMELINK_COMPONENT devel
1112
+ OBJECTS DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
1113
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
1114
+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT devel
1115
+ INCLUDES
1116
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
1117
+ COMPONENT devel)
1118
+ endif()
1119
+ endif(MDBX_INSTALL_STATIC)
1120
+
1121
+ # ######################################################################################################################
1122
+
1123
+ # collect options & build info
1124
+ if(NOT DEFINED MDBX_BUILD_TIMESTAMP)
1125
+ if(NOT "$ENV{SOURCE_DATE_EPOCH}" STREQUAL "")
1126
+ set(MDBX_BUILD_TIMESTAMP "$ENV{SOURCE_DATE_EPOCH}")
1127
+ else()
1128
+ string(TIMESTAMP MDBX_BUILD_TIMESTAMP UTC)
1129
+ endif()
1130
+ endif()
1131
+ set(MDBX_BUILD_FLAGS ${CMAKE_C_FLAGS})
1132
+ if(MDBX_BUILD_CXX)
1133
+ set(MDBX_BUILD_FLAGS ${CMAKE_CXX_FLAGS})
1134
+ endif()
1135
+
1136
+ # append cmake's build-type flags and defines
1137
+ if(NOT CMAKE_CONFIGURATION_TYPES)
1138
+ list(APPEND MDBX_BUILD_FLAGS ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}})
1139
+ if(MDBX_BUILD_CXX)
1140
+ list(APPEND MDBX_BUILD_FLAGS ${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}})
1141
+ endif()
1142
+ endif()
1143
+
1144
+ # choice target to fetch definitions and options
1145
+ if(MDBX_BUILD_SHARED_LIBRARY)
1146
+ set(target4fetch mdbx)
1147
+ else()
1148
+ set(target4fetch mdbx-static)
1149
+ endif()
1150
+
1151
+ # get definitions
1152
+ get_target_property(defs_list ${target4fetch} COMPILE_DEFINITIONS)
1153
+ if(defs_list)
1154
+ list(APPEND MDBX_BUILD_FLAGS ${defs_list})
1155
+ endif()
1156
+
1157
+ # get target compile options
1158
+ get_target_property(options_list ${target4fetch} COMPILE_OPTIONS)
1159
+ if(options_list)
1160
+ list(APPEND MDBX_BUILD_FLAGS ${options_list})
1161
+ endif()
1162
+
1163
+ list(REMOVE_DUPLICATES MDBX_BUILD_FLAGS)
1164
+ string(REPLACE ";" " " MDBX_BUILD_FLAGS "${MDBX_BUILD_FLAGS}")
1165
+ if(CMAKE_CONFIGURATION_TYPES)
1166
+ # add dynamic part via per-configuration define
1167
+ message(STATUS "MDBX Compile Flags: ${MDBX_BUILD_FLAGS} <AND CONFIGURATION DEPENDENT>")
1168
+ add_definitions(
1169
+ -DMDBX_BUILD_FLAGS_CONFIG="$<$<CONFIG:Debug>:${CMAKE_C_FLAGS_DEBUG} ${CMAKE_C_DEFINES_DEBUG}>$<$<CONFIG:Release>:${CMAKE_C_FLAGS_RELEASE} ${CMAKE_C_DEFINES_RELEASE}>$<$<CONFIG:RelWithDebInfo>:${CMAKE_C_FLAGS_RELWITHDEBINFO} ${CMAKE_C_DEFINES_RELWITHDEBINFO}>$<$<CONFIG:MinSizeRel>:${CMAKE_C_FLAGS_MINSIZEREL} ${CMAKE_C_DEFINES_MINSIZEREL}>"
1170
+ )
1171
+ else()
1172
+ message(STATUS "MDBX Compile Flags: ${MDBX_BUILD_FLAGS}")
1173
+ endif()
1174
+
1175
+ # get compiler info
1176
+ execute_process(
1177
+ COMMAND sh -c "${CMAKE_C_COMPILER} --version | head -1"
1178
+ OUTPUT_VARIABLE MDBX_BUILD_COMPILER
1179
+ OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET
1180
+ RESULT_VARIABLE rc)
1181
+ if(rc OR NOT MDBX_BUILD_COMPILER)
1182
+ string(STRIP "${CMAKE_C_COMPILER_ID}-${CMAKE_C_COMPILER_VERSION}" MDBX_BUILD_COMPILER)
1183
+ endif()
1184
+
1185
+ # make a build-target triplet
1186
+ if(CMAKE_C_COMPILER_TARGET)
1187
+ set(MDBX_BUILD_TARGET "${CMAKE_C_COMPILER_TARGET}")
1188
+ else()
1189
+ if(CMAKE_C_COMPILER_ARCHITECTURE_ID)
1190
+ string(STRIP "${CMAKE_C_COMPILER_ARCHITECTURE_ID}" MDBX_BUILD_TARGET)
1191
+ elseif(CMAKE_GENERATOR_PLATFORM AND NOT CMAKE_GENERATOR_PLATFORM STREQUAL CMAKE_SYSTEM_NAME)
1192
+ string(STRIP "${CMAKE_GENERATOR_PLATFORM}" MDBX_BUILD_TARGET)
1193
+ elseif(CMAKE_SYSTEM_ARCH)
1194
+ string(STRIP "${CMAKE_SYSTEM_ARCH}" MDBX_BUILD_TARGET)
1195
+ elseif(CMAKE_LIBRARY_ARCHITECTURE)
1196
+ string(STRIP "${CMAKE_LIBRARY_ARCHITECTURE}" MDBX_BUILD_TARGET)
1197
+ elseif(CMAKE_SYSTEM_PROCESSOR)
1198
+ string(STRIP "${CMAKE_SYSTEM_PROCESSOR}" MDBX_BUILD_TARGET)
1199
+ else()
1200
+ set(MDBX_BUILD_TARGET "unknown")
1201
+ endif()
1202
+ if(CMAKE_C_COMPILER_ABI AND NOT (CMAKE_C_COMPILER_ABI MATCHES ".*${MDBX_BUILD_TARGET}.*"
1203
+ OR MDBX_BUILD_TARGET MATCHES ".*${CMAKE_C_COMPILER_ABI}.*"))
1204
+ string(CONCAT MDBX_BUILD_TARGET "${MDBX_BUILD_TARGET}-${CMAKE_C_COMPILER_ABI}")
1205
+ endif()
1206
+ if(CMAKE_C_PLATFORM_ID
1207
+ AND NOT (CMAKE_SYSTEM_NAME AND (CMAKE_C_PLATFORM_ID MATCHES ".*${CMAKE_SYSTEM_NAME}.*"
1208
+ OR CMAKE_SYSTEM_NAME MATCHES ".*${CMAKE_C_PLATFORM_ID}.*"))
1209
+ AND NOT (CMAKE_C_PLATFORM_ID MATCHES ".*${CMAKE_C_PLATFORM_ID}.*" OR MDBX_BUILD_TARGET MATCHES
1210
+ ".*${CMAKE_C_PLATFORM_ID}.*"))
1211
+ string(CONCAT MDBX_BUILD_TARGET "${MDBX_BUILD_TARGET}-${CMAKE_C_COMPILER_ABI}")
1212
+ endif()
1213
+ if(CMAKE_SYSTEM_NAME)
1214
+ string(CONCAT MDBX_BUILD_TARGET "${MDBX_BUILD_TARGET}-${CMAKE_SYSTEM_NAME}")
1215
+ endif()
1216
+ endif()
1217
+
1218
+ # provide build-type
1219
+ if(CMAKE_CONFIGURATION_TYPES)
1220
+ # via per-configuration define
1221
+ add_definitions(-DMDBX_BUILD_TYPE="$<CONFIG>")
1222
+ set(MDBX_BUILD_TYPE "<CONFIGURATION DEPENDENT>")
1223
+ else()
1224
+ set(MDBX_BUILD_TYPE ${CMAKE_BUILD_TYPE})
1225
+ endif()
1226
+
1227
+ # options
1228
+ set(options VERSION C_COMPILER CXX_COMPILER MDBX_BUILD_TARGET MDBX_BUILD_TYPE ${MDBX_BUILD_OPTIONS})
1229
+ foreach(item IN LISTS options)
1230
+ if(DEFINED ${item})
1231
+ set(value "${${item}}")
1232
+ elseif(DEFINED MDBX_${item})
1233
+ set(item MDBX_${item})
1234
+ set(value "${${item}}")
1235
+ elseif(DEFINED CMAKE_${item})
1236
+ set(item CMAKE_${item})
1237
+ set(value "${${item}}")
1238
+ else()
1239
+ set(value "AUTO (not pre-defined explicitly)")
1240
+ endif()
1241
+ message(STATUS "${item}: ${value}")
1242
+ endforeach(item)
1243
+
1244
+ # provide config.h for library build info
1245
+ configure_file("${MDBX_SOURCE_DIR}/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h" ESCAPE_QUOTES)
1246
+ add_definitions(-DMDBX_CONFIG_H="${CMAKE_CURRENT_BINARY_DIR}/config.h")
1247
+
1248
+ # ######################################################################################################################
1249
+
1250
+ if(NOT MDBX_AMALGAMATED_SOURCE AND MDBX_ENABLE_TESTS)
1251
+ if(NOT CMAKE_CXX_COMPILER_LOADED)
1252
+ message(FATAL_ERROR "MDBX_ENABLE_TESTS=${MDBX_ENABLE_TESTS}: The C++ compiler is required to build the tests.")
1253
+ endif()
1254
+ add_subdirectory(test)
1255
+ endif()
1256
+
1257
+ # ######################################################################################################################
1258
+
1259
+ if(NOT SUBPROJECT)
1260
+ set(PACKAGE "libmdbx")
1261
+ set(CPACK_PACKAGE_VERSION_MAJOR ${MDBX_VERSION_MAJOR})
1262
+ set(CPACK_PACKAGE_VERSION_MINOR ${MDBX_VERSION_MINOR})
1263
+ set(CPACK_PACKAGE_VERSION_PATCH ${MDBX_VERSION_PATCH})
1264
+ set(CPACK_PACKAGE_VERSION_TWEAK ${MDBX_VERSION_TWEAK})
1265
+ set(PACKAGE_VERSION ${MDBX_VERSION})
1266
+ message(STATUS "libmdbx package version is ${PACKAGE_VERSION}")
1267
+ endif()
1268
+
1269
+ cmake_policy(POP)