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,323 @@
1
+ import shutil
2
+ import json
3
+ import os
4
+ import re
5
+ import subprocess
6
+ from conan.tools.files import rm
7
+ from conan.tools.scm import Git
8
+ from conan.tools.apple import is_apple_os
9
+ from conan.tools.cmake import CMakeToolchain, CMake, cmake_layout, CMakeDeps
10
+ from conan import ConanFile
11
+ required_conan_version = '>=2.7'
12
+
13
+
14
+ def semver_parse(s):
15
+ m = re.match('^v?(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(\\.(?P<tweak>0|[1-9]\d*))?(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$', s)
16
+ return m.groupdict() if m else None
17
+
18
+
19
+ def semver_string(semver):
20
+ s = str(semver['major']) + '.' + \
21
+ str(semver['minor']) + '.' + str(semver['patch'])
22
+ if not semver['tweak'] is None and semver['tweak'] != 0:
23
+ s += '.' + str(semver['tweak'])
24
+ if not semver['prerelease'] is None and semver['prerelease'] != '':
25
+ s += '-' + semver['prerelease']
26
+ return s
27
+
28
+
29
+ def semver_string_with_buildmetadata(semver):
30
+ s = semver_string(semver)
31
+ if not semver['buildmetadata'] is None and semver['buildmetadata'] != '':
32
+ s += '+' + semver['buildmetadata']
33
+ return s
34
+
35
+
36
+ class libmdbx(ConanFile):
37
+ name = 'mdbx'
38
+ package_type = 'library'
39
+ description = 'One of the fastest embeddable key-value ACID database without WAL. libmdbx surpasses the legendary LMDB in terms of reliability, features and performance.'
40
+ license = 'Apache-2.0'
41
+ author = 'Leo Yuriev <leo@yuriev.ru>'
42
+ homepage = 'https://libmdbx.dqdkfa.ru'
43
+ url = 'https://gitflic.ru/project/erthink/libmdbx.git'
44
+ topics = ('embedded-database', 'key-value', 'btree', 'LMDB', 'storage-engine',
45
+ 'data-storage', 'nosql', 'ACID', 'MVCC', 'MDBX')
46
+ no_copy_source = True
47
+ test_type = 'explicit'
48
+ build_policy = 'missing'
49
+ revision_mode = 'scm'
50
+ languages = 'C', 'C++'
51
+ provides = 'libmdbx'
52
+ implements = ['auto_shared_fpic']
53
+ # upload_policy = 'skip'
54
+ # exports_sources = 'LICENSE', 'NOTICE', 'CMakeLists.txt', '*.h', '*.h++', '*.c', '*.c++', 'ntdll.def', 'man1/*', 'cmake/*', 'config.h.in'
55
+
56
+ settings = 'os', 'compiler', 'build_type', 'arch'
57
+ options = {
58
+ 'mdbx.64bit_atomic': ['Auto', True, False],
59
+ 'mdbx.64bit_cas': ['Auto', True, False],
60
+ 'mdbx.apple.speed_insteadof_durability': ['Default', True, False],
61
+ 'mdbx.avoid_msync': ['Auto', True, False],
62
+ 'mdbx.build_cxx': ['Default', True, False],
63
+ 'mdbx.build_tools': ['Default', True, False],
64
+ 'mdbx.cacheline_size': ['Auto', 16, 32, 64, 128, 256],
65
+ 'mdbx.disable_validation': ['Default', True, False],
66
+ 'mdbx.enable_bigfoot': ['Default', True, False],
67
+ 'mdbx.enable_dbi_lockfree': ['Default', True, False],
68
+ 'mdbx.enable_dbi_sparse': ['Default', True, False],
69
+ 'mdbx.enable_pgop_stat': ['Default', True, False],
70
+ 'mdbx.enable_profgc': ['Default', True, False],
71
+ 'mdbx.enable_refund': ['Default', True, False],
72
+ 'mdbx.env_checkpid': ['Default', True, False],
73
+ 'mdbx.force_assertions': ['Default', True, False],
74
+ 'mdbx.have_builtin_cpu_supports': ['Auto', True, False],
75
+ 'mdbx.locking': ['Auto', 'WindowsFileLocking', 'SystemV', 'POSIX1988', 'POSIX2001', 'POSIX2008'],
76
+ 'mdbx.mmap_incoherent_file_write': ['Auto', True, False],
77
+ 'mdbx.mmap_needs_jolt': ['Auto', True, False],
78
+ 'mdbx.trust_rtc': ['Default', True, False],
79
+ 'mdbx.txn_checkowner': ['Default', True, False],
80
+ 'mdbx.unaligned_ok': ['Auto', True, False],
81
+ 'mdbx.use_copyfilerange': ['Auto', True, False],
82
+ 'mdbx.use_mincore': ['Auto', True, False],
83
+ 'mdbx.use_ofdlocks': ['Auto', True, False],
84
+ 'mdbx.use_sendfile': ['Auto', True, False],
85
+ 'mdbx.without_msvc_crt': ['Default', True, False],
86
+ 'shared': [True, False],
87
+ }
88
+ default_options = {
89
+ 'mdbx.64bit_atomic': 'Auto',
90
+ 'mdbx.64bit_cas': 'Auto',
91
+ 'mdbx.apple.speed_insteadof_durability': 'Default',
92
+ 'mdbx.avoid_msync': 'Auto',
93
+ 'mdbx.build_cxx': 'Default',
94
+ 'mdbx.build_tools': 'Default',
95
+ 'mdbx.cacheline_size': 'Auto',
96
+ 'mdbx.disable_validation': 'Default',
97
+ 'mdbx.enable_bigfoot': 'Default',
98
+ 'mdbx.enable_dbi_lockfree': 'Default',
99
+ 'mdbx.enable_dbi_sparse': 'Default',
100
+ 'mdbx.enable_pgop_stat': 'Default',
101
+ 'mdbx.enable_profgc': 'Default',
102
+ 'mdbx.enable_refund': 'Default',
103
+ 'mdbx.env_checkpid': 'Default',
104
+ 'mdbx.force_assertions': 'Default',
105
+ 'mdbx.have_builtin_cpu_supports': 'Auto',
106
+ 'mdbx.locking': 'Auto',
107
+ 'mdbx.mmap_incoherent_file_write': 'Auto',
108
+ 'mdbx.mmap_needs_jolt': 'Auto',
109
+ 'mdbx.trust_rtc': 'Default',
110
+ 'mdbx.txn_checkowner': 'Default',
111
+ 'mdbx.unaligned_ok': 'Auto',
112
+ 'mdbx.use_copyfilerange': 'Auto',
113
+ 'mdbx.use_mincore': 'Auto',
114
+ 'mdbx.use_ofdlocks': 'Auto',
115
+ 'mdbx.use_sendfile': 'Auto',
116
+ 'mdbx.without_msvc_crt': 'Default',
117
+ 'shared': True,
118
+ }
119
+ options_description = {
120
+ 'mdbx.64bit_atomic': 'Advanced: Assume 64-bit operations are atomic and not splitted to 32-bit halves. ',
121
+ 'mdbx.64bit_cas': 'Advanced: Assume 64-bit atomic compare-and-swap operation is available. ',
122
+ 'mdbx.apple.speed_insteadof_durability': 'Disable using `fcntl(F_FULLFSYNC)` for a performance reasons at the cost of durability on power failure. ',
123
+ 'mdbx.avoid_msync': 'Disable in-memory database updating with consequent flush-to-disk/msync syscall in `MDBX_WRITEMAP` mode. ',
124
+ 'mdbx.build_cxx': 'Build C++ portion. ',
125
+ 'mdbx.build_tools': 'Build CLI tools (mdbx_chk/stat/dump/load/copy/drop). ',
126
+ 'mdbx.cacheline_size': 'Advanced: CPU cache line size for data alignment to avoid cache line false-sharing. ',
127
+ 'mdbx.disable_validation': 'Disable some checks to reduce an overhead and detection probability of database corruption to a values closer to the LMDB. ',
128
+ 'mdbx.enable_bigfoot': 'Chunking long list of retired pages during huge transactions commit to avoid use sequences of pages. ',
129
+ 'mdbx.enable_dbi_lockfree': 'Support for deferred releasing and a lockfree path to quickly open DBI handles. ',
130
+ 'mdbx.enable_dbi_sparse': 'Support for sparse sets of DBI handles to reduce overhead when starting and processing transactions. ',
131
+ 'mdbx.enable_pgop_stat': 'Gathering statistics for page operations. ',
132
+ 'mdbx.enable_profgc': 'Profiling of GC search and updates. ',
133
+ 'mdbx.enable_refund': 'Online database zero-cost auto-compactification during write-transactions. ',
134
+ 'mdbx.env_checkpid': "Checking PID inside libmdbx's API against reuse database environment after the `fork()`. ",
135
+ 'mdbx.force_assertions': 'Forces assertion checking even for release builds. ',
136
+ 'mdbx.have_builtin_cpu_supports': 'Advanced: Assume the compiler and target system has `__builtin_cpu_supports()`. ',
137
+ 'mdbx.locking': 'Advanced: Choices the locking implementation. ',
138
+ 'mdbx.mmap_incoherent_file_write': "Advanced: Assume system don't have unified page cache and/or file write operations incoherent with memory-mapped files. ",
139
+ 'mdbx.mmap_needs_jolt': 'Advanced: Assume system needs explicit syscall to sync/flush/write modified mapped memory. ',
140
+ 'mdbx.trust_rtc': 'Advanced: Does a system have battery-backed Real-Time Clock or just a fake. ',
141
+ 'mdbx.txn_checkowner': 'Checking transaction owner thread against misuse transactions from other threads. ',
142
+ 'mdbx.unaligned_ok': 'Advanced: Assume a target CPU and/or the compiler support unaligned access. ',
143
+ 'mdbx.use_copyfilerange': 'Advanced: Use `copy_file_range()` syscall. ',
144
+ 'mdbx.use_mincore': "Use Unix' `mincore()` to determine whether database pages are resident in memory. ",
145
+ 'mdbx.use_ofdlocks': 'Advanced: Use POSIX OFD-locks. ',
146
+ 'mdbx.use_sendfile': 'Advancedc: Use `sendfile()` syscall. ',
147
+ 'mdbx.without_msvc_crt': 'Avoid dependence from MSVC CRT and use ntdll.dll instead. ',
148
+ }
149
+
150
+ build_metadata = None
151
+
152
+ def config_options(self):
153
+ if self.settings.get_safe('os') != 'Linux':
154
+ self.options.rm_safe('mdbx.use_copyfilerange')
155
+ self.options.rm_safe('mdbx.use_sendfile')
156
+ if self.settings.get_safe('os') == 'Windows':
157
+ self.default_options['mdbx.avoid_msync'] = True
158
+ self.options.rm_safe('mdbx.env_checkpid')
159
+ self.options.rm_safe('mdbx.locking')
160
+ self.options.rm_safe('mdbx.mmap_incoherent_file_write')
161
+ self.options.rm_safe('mdbx.use_mincore')
162
+ self.options.rm_safe('mdbx.use_ofdlocks')
163
+ else:
164
+ self.options.rm_safe('mdbx.without_msvc_crt')
165
+ if is_apple_os(self):
166
+ self.options.rm_safe('mdbx.mmap_incoherent_file_write')
167
+ else:
168
+ self.options.rm_safe('mdbx.apple.speed_insteadof_durability')
169
+
170
+ def fetch_versioninfo_from_git(self):
171
+ git = Git(self, folder=self.recipe_folder)
172
+ git_timestamp = git.run('show --no-patch --format=%cI HEAD')
173
+ git_tree = git.run('show --no-patch --format=%T HEAD')
174
+ git_commit = git.run('show --no-patch --format=%H HEAD')
175
+ if git.run('rev-list --tags --count') == 0:
176
+ git.run('fetch --tags')
177
+ git_last_vtag = git.run('describe --tags --abbrev=0 --match=v[0-9]*')
178
+ if git_last_vtag == '':
179
+ git_describe = git.run('describe --all --long --always')
180
+ git_semver = semver_parse(
181
+ '0.0.0.' + git.run('rev-list --count --remove-empty --no-merges HEAD'))
182
+ else:
183
+ git_describe = git.run('describe --tags --long --match=v[0-9]*')
184
+ git_version = '.'.join(
185
+ map(str, re.split('[-v.]+', git.run('describe --tags --match=v[0-9]*'))[1:5]))
186
+ git_semver = semver_parse(git_last_vtag)
187
+ if git_semver['prerelease'] is None or git_semver['prerelease'] == '':
188
+ git_since_vtag = git.run(
189
+ 'rev-list ' + git_last_vtag + '.. --count')
190
+ if int(git_since_vtag) > 0:
191
+ git_semver['tweak'] = int(git_since_vtag)
192
+ else:
193
+ git_semver['tweak'] = None
194
+ info = {'git_describe': git_describe, 'git_timestamp': git_timestamp,
195
+ 'git_tree': git_tree, 'git_commit': git_commit, 'semver': semver_string(git_semver)}
196
+ return info
197
+
198
+ def export_sources(self):
199
+ subprocess.run(['make', '-C', self.recipe_folder, 'DIST_DIR=' +
200
+ self.export_sources_folder, '@dist-checked.tag'], check=True)
201
+ rm(self, 'Makefile', self.export_sources_folder)
202
+ rm(self, 'GNUmakefile', self.export_sources_folder)
203
+ # json.dump(self.fetch_versioninfo_from_git(), open(os.path.join(
204
+ # self.export_sources_folder, 'VERSION.json'), 'w', encoding='utf-8'))
205
+
206
+ def source(self):
207
+ version_json_pathname = os.path.join(
208
+ self.export_sources_folder, 'VERSION.json')
209
+ version_json = json.load(
210
+ open(os.path.join(version_json_pathname), encoding='utf-8'))['semver']
211
+ if version_json != semver_string(semver_parse(self.version)):
212
+ self.output.error('Package/Recipe version "' + self.version +
213
+ '" mismatch VERSION.json "' + version_json + '"')
214
+
215
+ def set_version(self):
216
+ if self.build_metadata is None and not self.version is None:
217
+ self.build_metadata = self.version
218
+ semver = semver_parse(self.build_metadata)
219
+ if semver:
220
+ self.build_metadata = semver['buildmetadata']
221
+ else:
222
+ self.build_metadata = re.match(
223
+ '^[^0-9a-zA-Z]*([0-9a-zA-Z]+[-.0-9a-zA-Z]*)', self.build_metadata).group(1)
224
+ if self.build_metadata is None:
225
+ self.build_metadata = ''
226
+ version_json_pathname = os.path.join(
227
+ self.recipe_folder, 'VERSION.json')
228
+ if os.path.exists(version_json_pathname):
229
+ self.version = json.load(
230
+ open(version_json_pathname, encoding='utf-8'))['semver']
231
+ version_from = "'" + version_json_pathname + "'"
232
+ else:
233
+ self.version = self.fetch_versioninfo_from_git()['semver']
234
+ version_from = 'Git'
235
+ self.output.verbose('Fetch version from ' +
236
+ version_from + ': ' + self.version)
237
+ if self.build_metadata != '':
238
+ self.version += '+' + self.build_metadata
239
+
240
+ def layout(self):
241
+ cmake_layout(self)
242
+
243
+ def handle_option(self, tc, name, define=False):
244
+ opt = self.options.get_safe(name)
245
+ if not opt is None:
246
+ value = str(opt).lower()
247
+ if value != 'auto' and value != 'default':
248
+ name = name.upper().replace('.', '_')
249
+ if define:
250
+ if value == 'false' or value == 'no' or value == 'off':
251
+ tc.preprocessor_definitions[name] = 0
252
+ elif value == 'true' or value == 'yes' or value == 'on':
253
+ tc.preprocessor_definitions[name] = 1
254
+ else:
255
+ tc.preprocessor_definitions[name] = int(opt)
256
+ self.output.highlight(
257
+ name + '=' + str(tc.preprocessor_definitions[name]) + ' (' + str(opt) + ')')
258
+ else:
259
+ tc.cache_variables[name] = opt
260
+ self.output.highlight(
261
+ name + '=' + str(tc.cache_variables[name]) + ' (' + str(opt) + ')')
262
+
263
+ def generate(self):
264
+ tc = CMakeToolchain(self)
265
+ if self.build_metadata is None:
266
+ self.build_metadata = semver_parse(self.version)['buildmetadata']
267
+ if not self.build_metadata is None and self.build_metadata != '':
268
+ tc.variables['MDBX_BUILD_METADATA'] = self.build_metadata
269
+ self.output.highlight('MDBX_BUILD_METADATA is ' +
270
+ str(tc.variables['MDBX_BUILD_METADATA']))
271
+ self.handle_option(tc, 'mdbx.64bit_atomic', True)
272
+ self.handle_option(tc, 'mdbx.64bit_cas', True)
273
+ self.handle_option(tc, 'mdbx.apple.speed_insteadof_durability')
274
+ self.handle_option(tc, 'mdbx.avoid_msync')
275
+ self.handle_option(tc, 'mdbx.build_tools')
276
+ self.handle_option(tc, 'mdbx.build_cxx')
277
+ self.handle_option(tc, 'mdbx.cacheline_size', True)
278
+ self.handle_option(tc, 'mdbx.disable_validation')
279
+ self.handle_option(tc, 'mdbx.enable_bigfoot')
280
+ self.handle_option(tc, 'mdbx.enable_dbi_lockfree')
281
+ self.handle_option(tc, 'mdbx.enable_dbi_sparse')
282
+ self.handle_option(tc, 'mdbx.enable_pgop_stat')
283
+ self.handle_option(tc, 'mdbx.enable_profgc')
284
+ self.handle_option(tc, 'mdbx.enable_refund')
285
+ self.handle_option(tc, 'mdbx.env_checkpid')
286
+ self.handle_option(tc, 'mdbx.force_assertions')
287
+ self.handle_option(tc, 'mdbx.have_builtin_cpu_supports', True)
288
+ self.handle_option(tc, 'mdbx.mmap_incoherent_file_write', True)
289
+ self.handle_option(tc, 'mdbx.mmap_needs_jolt')
290
+ self.handle_option(tc, 'mdbx.trust_rtc')
291
+ self.handle_option(tc, 'mdbx.txn_checkowner')
292
+ self.handle_option(tc, 'mdbx.unaligned_ok', True)
293
+ self.handle_option(tc, 'mdbx.use_copyfilerange', True)
294
+ self.handle_option(tc, 'mdbx.use_mincore')
295
+ self.handle_option(tc, 'mdbx.use_ofdlocks')
296
+ self.handle_option(tc, 'mdbx.use_sendfile', True)
297
+ self.handle_option(tc, 'mdbx.without_msvc_crt')
298
+ opt = self.options.get_safe('mdbx.locking', 'auto')
299
+ if not opt is None:
300
+ value = str(opt).lower()
301
+ if value != 'auto' and value != 'default':
302
+ map = {'windowsfilelocking': -1, 'systemv': 5, 'posix1988': 1988,
303
+ 'posix2001': 2001, 'posix2008': 2008}
304
+ value = map[value]
305
+ tc.cache_variables['MDBX_LOCKING'] = value
306
+ self.output.highlight('MDBX_LOCKING=' +
307
+ str(tc.cache_variables['MDBX_LOCKING']))
308
+ tc.generate()
309
+
310
+ def build(self):
311
+ cmake = CMake(self)
312
+ cmake.configure()
313
+ cmake.build()
314
+
315
+ def package(self):
316
+ cmake = CMake(self)
317
+ cmake.install()
318
+
319
+ def package_info(self):
320
+ if self.options.shared:
321
+ self.cpp_info.libs = ['mdbx']
322
+ else:
323
+ self.cpp_info.libs = ['mdbx-static']