libmdbx 0.1.0__tar.gz → 0.2.0__tar.gz

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 (122) hide show
  1. {libmdbx-0.1.0 → libmdbx-0.2.0}/PKG-INFO +36 -5
  2. libmdbx-0.2.0/README.md +44 -0
  3. {libmdbx-0.1.0 → libmdbx-0.2.0}/build_mdbx.py +22 -4
  4. libmdbx-0.2.0/libmdbx/dist/GNUmakefile +384 -0
  5. libmdbx-0.2.0/libmdbx/dist/VERSION.txt +1 -0
  6. libmdbx-0.1.0/libmdbx/src/core.c → libmdbx-0.2.0/libmdbx/dist/mdbx.c +32531 -23060
  7. libmdbx-0.2.0/libmdbx/dist/mdbx.c++ +5889 -0
  8. libmdbx-0.2.0/libmdbx/dist/mdbx_chk.c +5998 -0
  9. libmdbx-0.2.0/libmdbx/dist/mdbx_copy.c +4292 -0
  10. libmdbx-0.2.0/libmdbx/dist/mdbx_drop.c +4331 -0
  11. libmdbx-0.2.0/libmdbx/dist/mdbx_dump.c +4661 -0
  12. libmdbx-0.2.0/libmdbx/dist/mdbx_load.c +5007 -0
  13. libmdbx-0.2.0/libmdbx/dist/mdbx_stat.c +4668 -0
  14. {libmdbx-0.1.0 → libmdbx-0.2.0}/mdbx/mdbx.py +736 -505
  15. {libmdbx-0.1.0 → libmdbx-0.2.0}/pyproject.toml +3 -3
  16. libmdbx-0.1.0/README.md +0 -13
  17. libmdbx-0.1.0/libmdbx/.clang-format +0 -3
  18. libmdbx-0.1.0/libmdbx/.git +0 -1
  19. libmdbx-0.1.0/libmdbx/.gitignore +0 -47
  20. libmdbx-0.1.0/libmdbx/.le.ini +0 -40
  21. libmdbx-0.1.0/libmdbx/AUTHORS +0 -34
  22. libmdbx-0.1.0/libmdbx/CMakeSettings.json +0 -26
  23. libmdbx-0.1.0/libmdbx/COPYRIGHT +0 -22
  24. libmdbx-0.1.0/libmdbx/GNUmakefile +0 -852
  25. libmdbx-0.1.0/libmdbx/TODO.md +0 -29
  26. libmdbx-0.1.0/libmdbx/docs/Doxyfile.in +0 -2645
  27. libmdbx-0.1.0/libmdbx/docs/_preface.md +0 -47
  28. libmdbx-0.1.0/libmdbx/docs/_restrictions.md +0 -220
  29. libmdbx-0.1.0/libmdbx/docs/_starting.md +0 -242
  30. libmdbx-0.1.0/libmdbx/docs/_toc.md +0 -41
  31. libmdbx-0.1.0/libmdbx/example/CMakeLists.txt +0 -6
  32. libmdbx-0.1.0/libmdbx/example/README.md +0 -1
  33. libmdbx-0.1.0/libmdbx/example/example-mdbx.c +0 -167
  34. libmdbx-0.1.0/libmdbx/example/sample-bdb.txt +0 -77
  35. libmdbx-0.1.0/libmdbx/packages/buildroot/0001-package-libmdbx-new-package-library-database.patch +0 -173
  36. libmdbx-0.1.0/libmdbx/packages/rpm.obsolete/CMakeLists.txt +0 -184
  37. libmdbx-0.1.0/libmdbx/packages/rpm.obsolete/build.sh +0 -18
  38. libmdbx-0.1.0/libmdbx/packages/rpm.obsolete/package.sh +0 -25
  39. libmdbx-0.1.0/libmdbx/src/alloy.c +0 -25
  40. libmdbx-0.1.0/libmdbx/src/base.h +0 -778
  41. libmdbx-0.1.0/libmdbx/src/bits.md +0 -34
  42. libmdbx-0.1.0/libmdbx/src/debug_begin.h +0 -42
  43. libmdbx-0.1.0/libmdbx/src/debug_end.h +0 -15
  44. libmdbx-0.1.0/libmdbx/src/internals.h +0 -1794
  45. libmdbx-0.1.0/libmdbx/src/lck-posix.c +0 -956
  46. libmdbx-0.1.0/libmdbx/src/lck-windows.c +0 -914
  47. libmdbx-0.1.0/libmdbx/src/mdbx.c++ +0 -1841
  48. libmdbx-0.1.0/libmdbx/src/mdbx_chk.c +0 -1864
  49. libmdbx-0.1.0/libmdbx/src/mdbx_copy.c +0 -158
  50. libmdbx-0.1.0/libmdbx/src/mdbx_drop.c +0 -197
  51. libmdbx-0.1.0/libmdbx/src/mdbx_dump.c +0 -527
  52. libmdbx-0.1.0/libmdbx/src/mdbx_load.c +0 -873
  53. libmdbx-0.1.0/libmdbx/src/mdbx_stat.c +0 -534
  54. libmdbx-0.1.0/libmdbx/src/options.h +0 -524
  55. libmdbx-0.1.0/libmdbx/src/osal.c +0 -3522
  56. libmdbx-0.1.0/libmdbx/src/osal.h +0 -962
  57. libmdbx-0.1.0/libmdbx/src/version.c.in +0 -46
  58. libmdbx-0.1.0/libmdbx/src/wingetopt.c +0 -88
  59. libmdbx-0.1.0/libmdbx/src/wingetopt.h +0 -30
  60. libmdbx-0.1.0/libmdbx/test/CMakeLists.txt +0 -197
  61. libmdbx-0.1.0/libmdbx/test/append.c++ +0 -261
  62. libmdbx-0.1.0/libmdbx/test/base.h++ +0 -134
  63. libmdbx-0.1.0/libmdbx/test/cases.c++ +0 -134
  64. libmdbx-0.1.0/libmdbx/test/chrono.c++ +0 -157
  65. libmdbx-0.1.0/libmdbx/test/chrono.h++ +0 -99
  66. libmdbx-0.1.0/libmdbx/test/config.c++ +0 -731
  67. libmdbx-0.1.0/libmdbx/test/config.h++ +0 -359
  68. libmdbx-0.1.0/libmdbx/test/copy.c++ +0 -38
  69. libmdbx-0.1.0/libmdbx/test/dead.c++ +0 -52
  70. libmdbx-0.1.0/libmdbx/test/dump-load.sh +0 -40
  71. libmdbx-0.1.0/libmdbx/test/extra/dbi.c++ +0 -38
  72. libmdbx-0.1.0/libmdbx/test/extra/dupfixed_addodd.c +0 -93
  73. libmdbx-0.1.0/libmdbx/test/extra/dupfixed_multiple.c++ +0 -210
  74. libmdbx-0.1.0/libmdbx/test/extra/early_close_dbi.c++ +0 -110
  75. libmdbx-0.1.0/libmdbx/test/extra/maindb_ordinal.c++ +0 -59
  76. libmdbx-0.1.0/libmdbx/test/extra/pcrf/README.md +0 -2
  77. libmdbx-0.1.0/libmdbx/test/extra/pcrf/pcrf_test.c +0 -413
  78. libmdbx-0.1.0/libmdbx/test/extra/upsert_alldups.c +0 -195
  79. libmdbx-0.1.0/libmdbx/test/hill.c++ +0 -472
  80. libmdbx-0.1.0/libmdbx/test/jitter.c++ +0 -188
  81. libmdbx-0.1.0/libmdbx/test/keygen.c++ +0 -392
  82. libmdbx-0.1.0/libmdbx/test/keygen.h++ +0 -149
  83. libmdbx-0.1.0/libmdbx/test/log.c++ +0 -374
  84. libmdbx-0.1.0/libmdbx/test/log.h++ +0 -107
  85. libmdbx-0.1.0/libmdbx/test/long_stochastic.sh +0 -548
  86. libmdbx-0.1.0/libmdbx/test/main.c++ +0 -743
  87. libmdbx-0.1.0/libmdbx/test/nested.c++ +0 -355
  88. libmdbx-0.1.0/libmdbx/test/osal-unix.c++ +0 -662
  89. libmdbx-0.1.0/libmdbx/test/osal-windows.c++ +0 -463
  90. libmdbx-0.1.0/libmdbx/test/osal.h++ +0 -48
  91. libmdbx-0.1.0/libmdbx/test/stochastic_small.sh +0 -458
  92. libmdbx-0.1.0/libmdbx/test/stub/LICENSE +0 -24
  93. libmdbx-0.1.0/libmdbx/test/stub/README.md +0 -8
  94. libmdbx-0.1.0/libmdbx/test/stub/pthread_barrier.c +0 -106
  95. libmdbx-0.1.0/libmdbx/test/stub/pthread_barrier.h +0 -79
  96. libmdbx-0.1.0/libmdbx/test/test.c++ +0 -1286
  97. libmdbx-0.1.0/libmdbx/test/test.h++ +0 -336
  98. libmdbx-0.1.0/libmdbx/test/try.c++ +0 -28
  99. libmdbx-0.1.0/libmdbx/test/ttl.c++ +0 -269
  100. libmdbx-0.1.0/libmdbx/test/utils.c++ +0 -220
  101. libmdbx-0.1.0/libmdbx/test/utils.h++ +0 -360
  102. libmdbx-0.1.0/libmdbx/test/valgrind_suppress.txt +0 -609
  103. {libmdbx-0.1.0 → libmdbx-0.2.0}/LICENSE +0 -0
  104. {libmdbx-0.1.0/libmdbx → libmdbx-0.2.0/libmdbx/dist}/CMakeLists.txt +0 -0
  105. {libmdbx-0.1.0/libmdbx → libmdbx-0.2.0/libmdbx/dist}/ChangeLog.md +0 -0
  106. {libmdbx-0.1.0/libmdbx → libmdbx-0.2.0/libmdbx/dist}/LICENSE +0 -0
  107. {libmdbx-0.1.0/libmdbx → libmdbx-0.2.0/libmdbx/dist}/Makefile +0 -0
  108. {libmdbx-0.1.0/libmdbx → libmdbx-0.2.0/libmdbx/dist}/README.md +0 -0
  109. {libmdbx-0.1.0/libmdbx → libmdbx-0.2.0/libmdbx/dist}/cmake/compiler.cmake +0 -0
  110. {libmdbx-0.1.0/libmdbx → libmdbx-0.2.0/libmdbx/dist}/cmake/profile.cmake +0 -0
  111. {libmdbx-0.1.0/libmdbx → libmdbx-0.2.0/libmdbx/dist}/cmake/utils.cmake +0 -0
  112. {libmdbx-0.1.0/libmdbx/src → libmdbx-0.2.0/libmdbx/dist}/config.h.in +0 -0
  113. {libmdbx-0.1.0/libmdbx/src → libmdbx-0.2.0/libmdbx/dist}/man1/mdbx_chk.1 +0 -0
  114. {libmdbx-0.1.0/libmdbx/src → libmdbx-0.2.0/libmdbx/dist}/man1/mdbx_copy.1 +0 -0
  115. {libmdbx-0.1.0/libmdbx/src → libmdbx-0.2.0/libmdbx/dist}/man1/mdbx_drop.1 +0 -0
  116. {libmdbx-0.1.0/libmdbx/src → libmdbx-0.2.0/libmdbx/dist}/man1/mdbx_dump.1 +0 -0
  117. {libmdbx-0.1.0/libmdbx/src → libmdbx-0.2.0/libmdbx/dist}/man1/mdbx_load.1 +0 -0
  118. {libmdbx-0.1.0/libmdbx/src → libmdbx-0.2.0/libmdbx/dist}/man1/mdbx_stat.1 +0 -0
  119. {libmdbx-0.1.0/libmdbx → libmdbx-0.2.0/libmdbx/dist}/mdbx.h +0 -0
  120. {libmdbx-0.1.0/libmdbx → libmdbx-0.2.0/libmdbx/dist}/mdbx.h++ +0 -0
  121. {libmdbx-0.1.0/libmdbx/src → libmdbx-0.2.0/libmdbx/dist}/ntdll.def +0 -0
  122. {libmdbx-0.1.0 → libmdbx-0.2.0}/mdbx/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: libmdbx
3
- Version: 0.1.0
3
+ Version: 0.2.0
4
4
  Summary: The python bindings to libmdbx.
5
5
  Home-page: https://github.com/wtdcode/mdbx-py
6
6
  Keywords: mdbx,libmdbx,kvdb,bindings
@@ -17,9 +17,7 @@ Description-Content-Type: text/markdown
17
17
 
18
18
  # Python bindings for libmdbx
19
19
 
20
- This revives the python bindings for libmdbx.
21
-
22
- Originally forked from [libmdbx](https://github.com/erthink/libmdbx/tree/python-bindings) with a few bugs fixed.
20
+ Python bindings for libmdbx.
23
21
 
24
22
  Try it with
25
23
 
@@ -27,4 +25,37 @@ Try it with
27
25
  pip install libmdbx
28
26
  ```
29
27
 
30
- Contributions and feedbacks are highly welcome. I'm developing a few more pythonic features and adding support for cursors iterating dupsort databases.
28
+ Contributions and feedbacks are highly welcome.
29
+
30
+ ## Usage
31
+
32
+ A quick sample to read all values from the default database:
33
+
34
+ ```python
35
+ with Env(...) as env:
36
+ with env.ro_transaction() as txn:
37
+ with txn.cursor() as cur:
38
+ for k, v in cur.iter():
39
+ ...
40
+ ```
41
+
42
+ ## Manual build
43
+
44
+ Clone the repo
45
+
46
+ ```bash
47
+ git clone https://github.com/wtdcode/mdbx-py
48
+ git submodule update --init --recursive
49
+ ```
50
+
51
+ Install via poetry
52
+
53
+ ```bash
54
+ poetry install
55
+ ```
56
+
57
+ That's it!
58
+
59
+ ## Credits
60
+
61
+ Forked from [libmdbx](https://github.com/erthink/libmdbx/tree/python-bindings)
@@ -0,0 +1,44 @@
1
+ # Python bindings for libmdbx
2
+
3
+ Python bindings for libmdbx.
4
+
5
+ Try it with
6
+
7
+ ```bash
8
+ pip install libmdbx
9
+ ```
10
+
11
+ Contributions and feedbacks are highly welcome.
12
+
13
+ ## Usage
14
+
15
+ A quick sample to read all values from the default database:
16
+
17
+ ```python
18
+ with Env(...) as env:
19
+ with env.ro_transaction() as txn:
20
+ with txn.cursor() as cur:
21
+ for k, v in cur.iter():
22
+ ...
23
+ ```
24
+
25
+ ## Manual build
26
+
27
+ Clone the repo
28
+
29
+ ```bash
30
+ git clone https://github.com/wtdcode/mdbx-py
31
+ git submodule update --init --recursive
32
+ ```
33
+
34
+ Install via poetry
35
+
36
+ ```bash
37
+ poetry install
38
+ ```
39
+
40
+ That's it!
41
+
42
+ ## Credits
43
+
44
+ Forked from [libmdbx](https://github.com/erthink/libmdbx/tree/python-bindings)
@@ -16,8 +16,13 @@ SO_FILE = {
16
16
 
17
17
  def ensure_dependency():
18
18
  subprocess.check_call(["cmake", "--version"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
19
- if sys.platform == "win32" or sys.platform == "darwin":
20
- subprocess.check_call(["ninja", "--version"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
19
+
20
+ def have_git():
21
+ try:
22
+ subprocess.check_call(["git", "--version"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
23
+ return True
24
+ except Exception as e:
25
+ return False
21
26
 
22
27
  def build(setup_kws: dict):
23
28
  ensure_dependency()
@@ -25,6 +30,19 @@ def build(setup_kws: dict):
25
30
  pwd = Path(__file__).parent.resolve()
26
31
  out_lib = pwd / "mdbx" / "lib"
27
32
  libmdbx_source = pwd / "libmdbx"
33
+ dist_folder = libmdbx_source / "dist"
34
+
35
+ # If there is already dist
36
+ if not dist_folder.exists():
37
+ if sys.platform in ["linux", "linux2", "darwin"]:
38
+ subprocess.check_call(["make", "dist"], cwd=libmdbx_source)
39
+
40
+ if have_git() and (libmdbx_source / ".git").exists():
41
+ source_folder = libmdbx_source
42
+ elif dist_folder.exists():
43
+ source_folder = dist_folder
44
+ else:
45
+ raise RuntimeError("Either we need git or we must have a dist available. Did you init submodules?")
28
46
 
29
47
  tmpdir = None
30
48
  if debug:
@@ -55,7 +73,7 @@ def build(setup_kws: dict):
55
73
  ]
56
74
 
57
75
  cmake_gen += [
58
- "-S", str(libmdbx_source.absolute()), "-B", str(tmpdir_path.absolute())
76
+ "-S", str(source_folder.absolute()), "-B", str(tmpdir_path.absolute())
59
77
  ]
60
78
  cmake_gen += build_type
61
79
  subprocess.check_call(
@@ -69,7 +87,7 @@ def build(setup_kws: dict):
69
87
  if out_lib.exists():
70
88
  shutil.rmtree(out_lib)
71
89
  os.makedirs(out_lib, exist_ok=True)
72
- shutil.copy(libmdbx_source / "LICENSE", out_lib)
90
+ shutil.copy(source_folder / "LICENSE", out_lib)
73
91
 
74
92
  if sys.platform != "win32":
75
93
  subprocess.check_call(
@@ -0,0 +1,384 @@
1
+ # This makefile is for GNU Make 3.80 or above, and nowadays provided
2
+ # just for compatibility and preservation of traditions.
3
+ #
4
+ # Please use CMake in case of any difficulties or
5
+ # problems with this old-school's magic.
6
+ #
7
+ ################################################################################
8
+ #
9
+ # Basic internal definitions. For a customizable variables and options see below.
10
+ #
11
+ $(info // The GNU Make $(MAKE_VERSION))
12
+ SHELL := $(shell env bash -c 'echo $$BASH')
13
+ MAKE_VERx3 := $(shell printf "%3s%3s%3s" $(subst ., ,$(MAKE_VERSION)))
14
+ make_lt_3_81 := $(shell expr "$(MAKE_VERx3)" "<" " 3 81")
15
+ ifneq ($(make_lt_3_81),0)
16
+ $(error Please use GNU Make 3.81 or above)
17
+ endif
18
+ make_ge_4_1 := $(shell expr "$(MAKE_VERx3)" ">=" " 4 1")
19
+ SRC_PROBE_C := $(shell [ -f mdbx.c ] && echo mdbx.c || echo src/osal.c)
20
+ SRC_PROBE_CXX := $(shell [ -f mdbx.c++ ] && echo mdbx.c++ || echo src/mdbx.c++)
21
+ UNAME := $(shell uname -s 2>/dev/null || echo Unknown)
22
+
23
+ define cxx_filesystem_probe
24
+ int main(int argc, const char*argv[]) {
25
+ mdbx::filesystem::path probe(argv[0]);
26
+ if (argc != 1) throw mdbx::filesystem::filesystem_error(std::string("fake"), std::error_code());
27
+ return mdbx::filesystem::is_directory(probe.relative_path());
28
+ }
29
+ endef
30
+ #
31
+ ################################################################################
32
+ #
33
+ # Use `make options` to list the available libmdbx build options.
34
+ #
35
+ # Note that the defaults should already be correct for most platforms;
36
+ # you should not need to change any of these. Read their descriptions
37
+ # in README and source code (see src/options.h) if you do.
38
+ #
39
+
40
+ # install sandbox
41
+ DESTDIR ?=
42
+ INSTALL ?= install
43
+ # install prefixes (inside sandbox)
44
+ prefix ?= /usr/local
45
+ mandir ?= $(prefix)/man
46
+ # lib/bin suffix for multiarch/biarch, e.g. '.x86_64'
47
+ suffix ?=
48
+
49
+ # toolchain
50
+ CC ?= gcc
51
+ CXX ?= g++
52
+ CFLAGS_EXTRA ?=
53
+ LD ?= ld
54
+
55
+ # build options
56
+ MDBX_BUILD_OPTIONS ?=-DNDEBUG=1
57
+ MDBX_BUILD_TIMESTAMP ?=$(shell date +%Y-%m-%dT%H:%M:%S%z)
58
+ MDBX_BUILD_CXX ?= YES
59
+
60
+ # probe and compose common compiler flags with variable expansion trick (seems this work two times per session for GNU Make 3.81)
61
+ CFLAGS ?= $(strip $(eval CFLAGS := -std=gnu11 -O2 -g -Wall -Werror -Wextra -Wpedantic -ffunction-sections -fPIC -fvisibility=hidden -pthread -Wno-error=attributes $$(shell for opt in -fno-semantic-interposition -Wno-unused-command-line-argument -Wno-tautological-compare; do [ -z "$$$$($(CC) '-DMDBX_BUILD_FLAGS="probe"' $$$${opt} -c $(SRC_PROBE_C) -o /dev/null >/dev/null 2>&1 || echo failed)" ] && echo "$$$${opt} "; done)$(CFLAGS_EXTRA))$(CFLAGS))
62
+
63
+ # choosing C++ standard with variable expansion trick (seems this work two times per session for GNU Make 3.81)
64
+ CXXSTD ?= $(eval CXXSTD := $$(shell for std in gnu++23 c++23 gnu++2b c++2b gnu++20 c++20 gnu++2a c++2a gnu++17 c++17 gnu++1z c++1z gnu++14 c++14 gnu++1y c++1y gnu+11 c++11 gnu++0x c++0x; do $(CXX) -std=$$$${std} -c $(SRC_PROBE_CXX) -o /dev/null 2>probe4std-$$$${std}.err >/dev/null && echo "-std=$$$${std}" && exit; done))$(CXXSTD)
65
+ CXXFLAGS ?= $(strip $(CXXSTD) $(filter-out -std=gnu11,$(CFLAGS)))
66
+
67
+ # libraries and options for linking
68
+ EXE_LDFLAGS ?= -pthread
69
+ ifneq ($(make_ge_4_1),1)
70
+ # don't use variable expansion trick as workaround for bugs of GNU Make before 4.1
71
+ LIBS ?= $(shell $(uname2libs))
72
+ LDFLAGS ?= $(shell $(uname2ldflags))
73
+ LIB_STDCXXFS ?= $(shell echo '$(cxx_filesystem_probe)' | cat mdbx.h++ - | sed $$'1s/\xef\xbb\xbf//' | $(CXX) -x c++ $(CXXFLAGS) -Wno-error - -Wl,--allow-multiple-definition -lstdc++fs $(LIBS) $(LDFLAGS) $(EXE_LDFLAGS) -o /dev/null 2>probe4lstdfs.err >/dev/null && echo '-Wl,--allow-multiple-definition -lstdc++fs')
74
+ else
75
+ # using variable expansion trick to avoid repeaded probes
76
+ LIBS ?= $(eval LIBS := $$(shell $$(uname2libs)))$(LIBS)
77
+ LDFLAGS ?= $(eval LDFLAGS := $$(shell $$(uname2ldflags)))$(LDFLAGS)
78
+ LIB_STDCXXFS ?= $(eval LIB_STDCXXFS := $$(shell echo '$$(cxx_filesystem_probe)' | cat mdbx.h++ - | sed $$$$'1s/\xef\xbb\xbf//' | $(CXX) -x c++ $(CXXFLAGS) -Wno-error - -Wl,--allow-multiple-definition -lstdc++fs $(LIBS) $(LDFLAGS) $(EXE_LDFLAGS) -o /dev/null 2>probe4lstdfs.err >/dev/null && echo '-Wl,--allow-multiple-definition -lstdc++fs'))$(LIB_STDCXXFS)
79
+ endif
80
+
81
+ ################################################################################
82
+
83
+ define uname2sosuffix
84
+ case "$(UNAME)" in
85
+ Darwin*|Mach*) echo dylib;;
86
+ CYGWIN*|MINGW*|MSYS*|Windows*) echo dll;;
87
+ *) echo so;;
88
+ esac
89
+ endef
90
+
91
+ define uname2ldflags
92
+ case "$(UNAME)" in
93
+ CYGWIN*|MINGW*|MSYS*|Windows*)
94
+ echo '-Wl,--gc-sections,-O1';
95
+ ;;
96
+ *)
97
+ $(LD) --help 2>/dev/null | grep -q -- --gc-sections && echo '-Wl,--gc-sections,-z,relro,-O1';
98
+ $(LD) --help 2>/dev/null | grep -q -- -dead_strip && echo '-Wl,-dead_strip';
99
+ ;;
100
+ esac
101
+ endef
102
+
103
+ # TIP: try add the'-Wl, --no-as-needed,-lrt' for ability to built with modern glibc, but then use with the old.
104
+ define uname2libs
105
+ case "$(UNAME)" in
106
+ CYGWIN*|MINGW*|MSYS*|Windows*)
107
+ echo '-lm -lntdll -lwinmm';
108
+ ;;
109
+ *SunOS*|*Solaris*)
110
+ echo '-lm -lkstat -lrt';
111
+ ;;
112
+ *Darwin*|OpenBSD*)
113
+ echo '-lm';
114
+ ;;
115
+ *)
116
+ echo '-lm -lrt';
117
+ ;;
118
+ esac
119
+ endef
120
+
121
+ SO_SUFFIX := $(shell $(uname2sosuffix))
122
+ HEADERS := mdbx.h mdbx.h++
123
+ LIBRARIES := libmdbx.a libmdbx.$(SO_SUFFIX)
124
+ TOOLS := mdbx_stat mdbx_copy mdbx_dump mdbx_load mdbx_chk mdbx_drop
125
+ MANPAGES := mdbx_stat.1 mdbx_copy.1 mdbx_dump.1 mdbx_load.1 mdbx_chk.1 mdbx_drop.1
126
+ TIP := // TIP:
127
+
128
+ .PHONY: all help options lib libs tools clean install uninstall check_buildflags_tag tools-static
129
+ .PHONY: install-strip install-no-strip strip libmdbx mdbx show-options lib-static lib-shared
130
+
131
+ boolean = $(if $(findstring $(strip $($1)),YES Yes yes y ON On on 1 true True TRUE),1,$(if $(findstring $(strip $($1)),NO No no n OFF Off off 0 false False FALSE),,$(error Wrong value `$($1)` of $1 for YES/NO option)))
132
+ select_by = $(if $(call boolean,$(1)),$(2),$(3))
133
+
134
+ ifeq ("$(origin V)", "command line")
135
+ MDBX_BUILD_VERBOSE := $(V)
136
+ endif
137
+ ifndef MDBX_BUILD_VERBOSE
138
+ MDBX_BUILD_VERBOSE := 0
139
+ endif
140
+
141
+ ifeq ($(call boolean,MDBX_BUILD_VERBOSE),1)
142
+ QUIET :=
143
+ HUSH :=
144
+ $(info $(TIP) Use `make V=0` for quiet.)
145
+ else
146
+ QUIET := @
147
+ HUSH := >/dev/null
148
+ $(info $(TIP) Use `make V=1` for verbose.)
149
+ endif
150
+
151
+ all: show-options $(LIBRARIES) $(TOOLS)
152
+
153
+ help:
154
+ @echo " make all - build libraries and tools"
155
+ @echo " make help - print this help"
156
+ @echo " make options - list build options"
157
+ @echo " make lib - build libraries, also lib-static and lib-shared"
158
+ @echo " make tools - build the tools"
159
+ @echo " make tools-static - build the tools with statically linking with system libraries and compiler runtime"
160
+ @echo " make clean "
161
+ @echo " make install "
162
+ @echo " make uninstall "
163
+ @echo ""
164
+ @echo " make strip - strip debug symbols from binaries"
165
+ @echo " make install-no-strip - install explicitly without strip"
166
+ @echo " make install-strip - install explicitly with strip"
167
+ @echo ""
168
+ @echo " make bench - run ioarena-benchmark"
169
+ @echo " make bench-couple - run ioarena-benchmark for mdbx and lmdb"
170
+ @echo " make bench-triplet - run ioarena-benchmark for mdbx, lmdb, sqlite3"
171
+ @echo " make bench-quartet - run ioarena-benchmark for mdbx, lmdb, rocksdb, wiredtiger"
172
+ @echo " make bench-clean - remove temp database(s) after benchmark"
173
+
174
+ show-options:
175
+ @echo " MDBX_BUILD_OPTIONS = $(MDBX_BUILD_OPTIONS)"
176
+ @echo " MDBX_BUILD_CXX = $(MDBX_BUILD_CXX)"
177
+ @echo " MDBX_BUILD_TIMESTAMP = $(MDBX_BUILD_TIMESTAMP)"
178
+ @echo '$(TIP) Use `make options` to listing available build options.'
179
+ @echo $(call select_by,MDBX_BUILD_CXX," CXX =`which $(CXX)` | `$(CXX) --version | head -1`"," CC =`which $(CC)` | `$(CC) --version | head -1`")
180
+ @echo $(call select_by,MDBX_BUILD_CXX," CXXFLAGS =$(CXXFLAGS)"," CFLAGS =$(CFLAGS)")
181
+ @echo $(call select_by,MDBX_BUILD_CXX," LDFLAGS =$(LDFLAGS) $(LIB_STDCXXFS) $(LIBS) $(EXE_LDFLAGS)"," LDFLAGS =$(LDFLAGS) $(LIBS) $(EXE_LDFLAGS)")
182
+ @echo '$(TIP) Use `make help` to listing available targets.'
183
+
184
+ options:
185
+ @echo " INSTALL =$(INSTALL)"
186
+ @echo " DESTDIR =$(DESTDIR)"
187
+ @echo " prefix =$(prefix)"
188
+ @echo " mandir =$(mandir)"
189
+ @echo " suffix =$(suffix)"
190
+ @echo ""
191
+ @echo " CC =$(CC)"
192
+ @echo " CFLAGS_EXTRA =$(CFLAGS_EXTRA)"
193
+ @echo " CFLAGS =$(CFLAGS)"
194
+ @echo " CXX =$(CXX)"
195
+ @echo " CXXSTD =$(CXXSTD)"
196
+ @echo " CXXFLAGS =$(CXXFLAGS)"
197
+ @echo ""
198
+ @echo " LD =$(LD)"
199
+ @echo " LDFLAGS =$(LDFLAGS)"
200
+ @echo " EXE_LDFLAGS =$(EXE_LDFLAGS)"
201
+ @echo " LIBS =$(LIBS)"
202
+ @echo ""
203
+ @echo " MDBX_BUILD_OPTIONS = $(MDBX_BUILD_OPTIONS)"
204
+ @echo " MDBX_BUILD_TIMESTAMP = $(MDBX_BUILD_TIMESTAMP)"
205
+ @echo ""
206
+ @echo "## Assortment items for MDBX_BUILD_OPTIONS:"
207
+ @echo "## Note that the defaults should already be correct for most platforms;"
208
+ @echo "## you should not need to change any of these. Read their descriptions"
209
+ @echo "## in README and source code (see mdbx.c) if you do."
210
+ @grep -h '#ifndef MDBX_' mdbx.c | grep -v BUILD | uniq | sed 's/#ifndef / /'
211
+
212
+ lib libs libmdbx mdbx: libmdbx.a libmdbx.$(SO_SUFFIX)
213
+
214
+ tools: $(TOOLS)
215
+ tools-static: $(addsuffix .static,$(TOOLS)) $(addsuffix .static-lto,$(TOOLS))
216
+
217
+ strip: all
218
+ @echo ' STRIP libmdbx.$(SO_SUFFIX) $(TOOLS)'
219
+ $(TRACE )strip libmdbx.$(SO_SUFFIX) $(TOOLS)
220
+
221
+ clean:
222
+ @echo ' REMOVE ...'
223
+ $(QUIET)rm -rf $(TOOLS) mdbx_test @* *.[ao] *.[ls]o *.$(SO_SUFFIX) *.dSYM *~ tmp.db/* \
224
+ *.gcov *.log *.err src/*.o test/*.o mdbx_example dist \
225
+ config.h src/config.h src/version.c *.tar* buildflags.tag \
226
+ mdbx_*.static mdbx_*.static-lto
227
+
228
+ MDBX_BUILD_FLAGS =$(strip MDBX_BUILD_CXX=$(MDBX_BUILD_CXX) $(MDBX_BUILD_OPTIONS) $(call select_by,MDBX_BUILD_CXX,$(CXXFLAGS) $(LDFLAGS) $(LIB_STDCXXFS) $(LIBS),$(CFLAGS) $(LDFLAGS) $(LIBS)))
229
+ check_buildflags_tag:
230
+ $(QUIET)if [ "$(MDBX_BUILD_FLAGS)" != "$$(cat buildflags.tag 2>&1)" ]; then \
231
+ echo -n " CLEAN for build with specified flags..." && \
232
+ $(MAKE) IOARENA=false CXXSTD= -s clean >/dev/null && echo " Ok" && \
233
+ echo '$(MDBX_BUILD_FLAGS)' > buildflags.tag; \
234
+ fi
235
+
236
+ buildflags.tag: check_buildflags_tag
237
+
238
+ lib-static libmdbx.a: mdbx-static.o $(call select_by,MDBX_BUILD_CXX,mdbx++-static.o)
239
+ @echo ' AR $@'
240
+ $(QUIET)$(AR) rcs $@ $? $(HUSH)
241
+
242
+ lib-shared libmdbx.$(SO_SUFFIX): mdbx-dylib.o $(call select_by,MDBX_BUILD_CXX,mdbx++-dylib.o)
243
+ @echo ' LD $@'
244
+ $(QUIET)$(call select_by,MDBX_BUILD_CXX,$(CXX) $(CXXFLAGS),$(CC) $(CFLAGS)) $^ -pthread -shared $(LDFLAGS) $(call select_by,MDBX_BUILD_CXX,$(LIB_STDCXXFS)) $(LIBS) -o $@
245
+
246
+
247
+ ################################################################################
248
+ # Amalgamated source code, i.e. distributed after `make dist`
249
+ MAN_SRCDIR := man1/
250
+
251
+ config.h: buildflags.tag mdbx.c $(lastword $(MAKEFILE_LIST))
252
+ @echo ' MAKE $@'
253
+ $(QUIET)(echo '#define MDBX_BUILD_TIMESTAMP "$(MDBX_BUILD_TIMESTAMP)"' \
254
+ && echo "#define MDBX_BUILD_FLAGS \"$$(cat buildflags.tag)\"" \
255
+ && echo '#define MDBX_BUILD_COMPILER "$(shell (LC_ALL=C $(CC) --version || echo 'Please use GCC or CLANG compatible compiler') | head -1)"' \
256
+ && echo '#define MDBX_BUILD_TARGET "$(shell set -o pipefail; (LC_ALL=C $(CC) -v 2>&1 | grep -i '^Target:' | cut -d ' ' -f 2- || (LC_ALL=C $(CC) --version | grep -qi e2k && echo E2K) || echo 'Please use GCC or CLANG compatible compiler') | head -1)"' \
257
+ ) >$@
258
+
259
+ mdbx-dylib.o: config.h mdbx.c mdbx.h $(lastword $(MAKEFILE_LIST))
260
+ @echo ' CC $@'
261
+ $(QUIET)$(CC) $(CFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -DLIBMDBX_EXPORTS=1 -c mdbx.c -o $@
262
+
263
+ mdbx-static.o: config.h mdbx.c mdbx.h $(lastword $(MAKEFILE_LIST))
264
+ @echo ' CC $@'
265
+ $(QUIET)$(CC) $(CFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -ULIBMDBX_EXPORTS -c mdbx.c -o $@
266
+
267
+ mdbx++-dylib.o: config.h mdbx.c++ mdbx.h mdbx.h++ $(lastword $(MAKEFILE_LIST))
268
+ @echo ' CC $@'
269
+ $(QUIET)$(CXX) $(CXXFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -DLIBMDBX_EXPORTS=1 -c mdbx.c++ -o $@
270
+
271
+ mdbx++-static.o: config.h mdbx.c++ mdbx.h mdbx.h++ $(lastword $(MAKEFILE_LIST))
272
+ @echo ' CC $@'
273
+ $(QUIET)$(CXX) $(CXXFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -ULIBMDBX_EXPORTS -c mdbx.c++ -o $@
274
+
275
+ mdbx_%: mdbx_%.c mdbx-static.o
276
+ @echo ' CC+LD $@'
277
+ $(QUIET)$(CC) $(CFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' $^ $(EXE_LDFLAGS) $(LIBS) -o $@
278
+
279
+ mdbx_%.static: mdbx_%.c mdbx-static.o
280
+ @echo ' CC+LD $@'
281
+ $(QUIET)$(CC) $(CFLAGS) $(MDBX_BUILD_OPTIONS) '-DMDBX_CONFIG_H="config.h"' $^ $(EXE_LDFLAGS) -static -Wl,--strip-all -o $@
282
+
283
+ mdbx_%.static-lto: mdbx_%.c config.h mdbx.c mdbx.h
284
+ @echo ' CC+LD $@'
285
+ $(QUIET)$(CC) $(CFLAGS) -Os -flto $(MDBX_BUILD_OPTIONS) '-DLIBMDBX_API=' '-DMDBX_CONFIG_H="config.h"' \
286
+ $< mdbx.c $(EXE_LDFLAGS) $(LIBS) -static -Wl,--strip-all -o $@
287
+
288
+
289
+ install: $(LIBRARIES) $(TOOLS) $(HEADERS)
290
+ @echo ' INSTALLING...'
291
+ $(QUIET)mkdir -p $(DESTDIR)$(prefix)/bin$(suffix) && \
292
+ $(INSTALL) -p $(EXE_INSTALL_FLAGS) $(TOOLS) $(DESTDIR)$(prefix)/bin$(suffix)/ && \
293
+ mkdir -p $(DESTDIR)$(prefix)/lib$(suffix)/ && \
294
+ $(INSTALL) -p $(EXE_INSTALL_FLAGS) $(filter-out libmdbx.a,$(LIBRARIES)) $(DESTDIR)$(prefix)/lib$(suffix)/ && \
295
+ mkdir -p $(DESTDIR)$(prefix)/lib$(suffix)/ && \
296
+ $(INSTALL) -p libmdbx.a $(DESTDIR)$(prefix)/lib$(suffix)/ && \
297
+ mkdir -p $(DESTDIR)$(prefix)/include/ && \
298
+ $(INSTALL) -p -m 444 $(HEADERS) $(DESTDIR)$(prefix)/include/ && \
299
+ mkdir -p $(DESTDIR)$(mandir)/man1/ && \
300
+ $(INSTALL) -p -m 444 $(addprefix $(MAN_SRCDIR), $(MANPAGES)) $(DESTDIR)$(mandir)/man1/
301
+
302
+ install-strip: EXE_INSTALL_FLAGS = -s
303
+ install-strip: install
304
+
305
+ install-no-strip: EXE_INSTALL_FLAGS =
306
+ install-no-strip: install
307
+
308
+ uninstall:
309
+ @echo ' UNINSTALLING/REMOVE...'
310
+ $(QUIET)rm -f $(addprefix $(DESTDIR)$(prefix)/bin$(suffix)/,$(TOOLS)) \
311
+ $(addprefix $(DESTDIR)$(prefix)/lib$(suffix)/,$(LIBRARIES)) \
312
+ $(addprefix $(DESTDIR)$(prefix)/include/,$(HEADERS)) \
313
+ $(addprefix $(DESTDIR)$(mandir)/man1/,$(MANPAGES))
314
+
315
+ ################################################################################
316
+ # Benchmarking by ioarena
317
+
318
+ ifeq ($(origin IOARENA),undefined)
319
+ IOARENA := $(shell \
320
+ (test -x ../ioarena/@BUILD/src/ioarena && echo ../ioarena/@BUILD/src/ioarena) || \
321
+ (test -x ../../@BUILD/src/ioarena && echo ../../@BUILD/src/ioarena) || \
322
+ (test -x ../../src/ioarena && echo ../../src/ioarena) || which ioarena 2>&- || \
323
+ (echo false && echo '$(TIP) Clone and build the https://abf.io/erthink/ioarena.git within a neighbouring directory for availability of benchmarking.' >&2))
324
+ endif
325
+ NN ?= 25000000
326
+ BENCH_CRUD_MODE ?= nosync
327
+
328
+ bench-clean:
329
+ @echo ' REMOVE bench-*.txt _ioarena/*'
330
+ $(QUIET)rm -rf bench-*.txt _ioarena/*
331
+
332
+ re-bench: bench-clean bench
333
+
334
+ ifeq ($(or $(IOARENA),false),false)
335
+ bench bench-quartet bench-triplet bench-couple:
336
+ $(QUIET)echo 'The `ioarena` benchmark is required.' >&2 && \
337
+ echo 'Please clone and build the https://abf.io/erthink/ioarena.git within a neighbouring `ioarena` directory.' >&2 && \
338
+ false
339
+
340
+ else
341
+
342
+ .PHONY: bench bench-clean bench-couple re-bench bench-quartet bench-triplet
343
+
344
+ define bench-rule
345
+ bench-$(1)_$(2).txt: $(3) $(IOARENA) $(lastword $(MAKEFILE_LIST))
346
+ @echo ' RUNNING ioarena for $1/$2...'
347
+ $(QUIET)(export LD_LIBRARY_PATH="./:$$$${LD_LIBRARY_PATH}"; \
348
+ ldd $(IOARENA) | grep -i $(1) && \
349
+ $(IOARENA) -D $(1) -B batch -m $(BENCH_CRUD_MODE) -n $(2) \
350
+ | tee $$@ | grep throughput | sed 's/throughput/batch×N/' && \
351
+ $(IOARENA) -D $(1) -B crud -m $(BENCH_CRUD_MODE) -n $(2) \
352
+ | tee -a $$@ | grep throughput | sed 's/throughput/ crud/' && \
353
+ $(IOARENA) -D $(1) -B iterate,get,iterate,get,iterate -m $(BENCH_CRUD_MODE) -r 4 -n $(2) \
354
+ | tee -a $$@ | grep throughput | sed '0,/throughput/{s/throughput/iterate/};s/throughput/ get/' && \
355
+ $(IOARENA) -D $(1) -B delete -m $(BENCH_CRUD_MODE) -n $(2) \
356
+ | tee -a $$@ | grep throughput | sed 's/throughput/ delete/' && \
357
+ true) || mv -f $$@ $$@.error
358
+
359
+ endef
360
+
361
+
362
+ $(eval $(call bench-rule,mdbx,$(NN),libmdbx.$(SO_SUFFIX)))
363
+
364
+ $(eval $(call bench-rule,sophia,$(NN)))
365
+ $(eval $(call bench-rule,leveldb,$(NN)))
366
+ $(eval $(call bench-rule,rocksdb,$(NN)))
367
+ $(eval $(call bench-rule,wiredtiger,$(NN)))
368
+ $(eval $(call bench-rule,forestdb,$(NN)))
369
+ $(eval $(call bench-rule,lmdb,$(NN)))
370
+ $(eval $(call bench-rule,nessdb,$(NN)))
371
+ $(eval $(call bench-rule,sqlite3,$(NN)))
372
+ $(eval $(call bench-rule,ejdb,$(NN)))
373
+ $(eval $(call bench-rule,vedisdb,$(NN)))
374
+ $(eval $(call bench-rule,dummy,$(NN)))
375
+ bench: bench-mdbx_$(NN).txt
376
+ bench-quartet: bench-mdbx_$(NN).txt bench-lmdb_$(NN).txt bench-rocksdb_$(NN).txt bench-wiredtiger_$(NN).txt
377
+ bench-triplet: bench-mdbx_$(NN).txt bench-lmdb_$(NN).txt bench-sqlite3_$(NN).txt
378
+ bench-couple: bench-mdbx_$(NN).txt bench-lmdb_$(NN).txt
379
+
380
+ # $(eval $(call bench-rule,debug,10))
381
+ # .PHONY: bench-debug
382
+ # bench-debug: bench-debug_10.txt
383
+
384
+ endif
@@ -0,0 +1 @@
1
+ 0.12.12.0