summarylogtreecommitdiffstats
path: root/0001-mdbx-Remove-all-checks-for-amalgated-or-git-source-i.patch
blob: 8fb2bcddae5795033fdaceab5e962067a7078621 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
From b4acc32ca535c93b3a80ebfaddf898250ca12916 Mon Sep 17 00:00:00 2001
From: Noel Kuntze <noel.kuntze@thermi.consulting>
Date: Thu, 8 Jul 2021 17:01:30 +0200
Subject: [PATCH] mdbx: Remove all checks for amalgated or git source,
 implement tests into CMakeLists.txt

---
 CMakeLists.txt | 152 ++++++++++++++++++++++++++++++++++++++-----------
 GNUmakefile    |  12 +---
 2 files changed, 121 insertions(+), 43 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e74432b0..7b7f2898 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -55,38 +55,8 @@ else()
   set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_AVAILABLE FALSE)
 endif()
 
-if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git" AND
-    EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt" AND
-    EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/core.c" AND
-    EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/alloy.c" AND
-    EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in" AND
-    EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/version.c.in" AND
-    EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/man1" AND
-    EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/mdbx_chk.c" AND
-    EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/mdbx.c++")
-  set(MDBX_AMALGAMATED_SOURCE FALSE)
-  find_program(GIT git)
-  if(NOT GIT)
-    message(SEND_ERROR "Git command-line tool not found")
-  endif()
-  set(MDBX_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
-elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION.txt" AND
-    EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.c" AND
-    EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.c++" AND
-    EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" AND
-    EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/man1" AND
-    EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_chk.c")
-  set(MDBX_AMALGAMATED_SOURCE TRUE)
-  set(MDBX_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
-else()
-  message(FATAL_ERROR "\n"
-    "Please don't use tarballs nor zips which are automatically provided by Github!  "
-    "These archives do not contain version information and thus are unfit to build libmdbx.  "
-    "You can vote for ability of disabling auto-creation such unsuitable archives at https://github.community/t/disable-tarball\n"
-    "Instead of above, just clone the git repository, either download a tarball or zip with the properly amalgamated source core.  "
-    "For embedding libmdbx use a git-submodule or the amalgamated source code.\n"
-    "Please, avoid using any other techniques.")
-endif()
+set(MDBX_AMALGAMATED_SOURCE FALSE)
+set(MDBX_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
 
 if(DEFINED PROJECT_NAME)
   set(SUBPROJECT ON)
@@ -677,6 +647,124 @@ endif()
 
 ################################################################################
 
+# example
+add_executable(mdbx_example mdbx.h example/example-mdbx.c)
+target_setup_options(mdbx_example)
+target_link_libraries(mdbx_example mdbx)
+if(MDBX_C_STANDARD)
+  set_target_properties(mdbx_example PROPERTIES
+    C_STANDARD ${MDBX_C_STANDARD} C_STANDARD_REQUIRED ON)
+endif()
+
+################################################################################
+
+# add targets for tests
+
+if(CMAKE_GENERATOR_PLATFORM MATCHES CYGWIN.* OR
+   CMAKE_GENERATOR_PLATFORM MATCHES MINGW.* OR
+   CMAKE_GENERATOR_PLATFORM MATCHES MSYS.* OR
+   CMAKE_GENERATOR_PLATFORM MATCHES Windows.*)
+  set(TEST_SRC
+    test/osal-windows.cc)
+else()
+  set(TEST_SRC
+    test/osal-unix.cc)
+endif()
+
+if(CMAKE_GENERATOR_PLATFORM MATCHES Darwin.* OR
+   CMAKE_GENERATOR_PLATFORM MATCHES Mach.*)
+  set(TEST_ITER
+    2)
+else()
+  set(TEST_ITER
+    12)
+endif()
+
+if(NOT TEST_DB)
+  set(TEST_DB
+    /tmp/mdbx-test.db
+  )
+endif()
+if(NOT TEST_LOG)
+  set(TEST_LOG
+    /tmp/mdbx-test.log
+  )
+endif()
+
+if(MDBX_ENABLE_TESTS)
+  add_custom_target(build-test ALL
+    DEPENDS mdbx_example mdbx_test mdbx_chk
+    )
+
+  add_custom_target(mdbx-test
+    COMMAND
+    rm -f "${TEST_DB}" "${TEST_LOG}.gz"    
+    COMMAND
+    ./mdbx_test --table=+data.integer --keygen.split=29 --datalen.min=min --datalen.max=max --progress --console=no "--repeat=${TEST_ITER}" "--pathname=${TEST_DB}" --dont-cleanup-after ${MDBX_TEST_EXTRA} basic | gzip >> "${TEST_LOG}.gz"
+    COMMAND
+    ./mdbx_test --mode=-writemap,-nosync-safe,-lifo --progress --console=no --repeat=12 "--pathname=${TEST_DB}" --dont-cleanup-after ${MDBX_TEST_EXTRA} basic | gzip >> "${TEST_LOG}.gz"
+    COMMAND
+    ./mdbx_chk -vvn "${TEST_DB}"
+    COMMAND
+    ./mdbx_chk -vvn "${TEST_DB}-copy"
+   DEPENDS mdbx build-test
+  )
+  add_custom_target(test-singleprocess
+    COMMAND
+    rm -f "${TEST_DB}" "${TEST_LOG}.gz"
+    COMMAND
+    ./mdbx_test --table=+data.integer --keygen.split=29 --datalen.min=min --datalen.max=max --progress --console=no --repeat=42 "--pathname=${TEST_DB}" --dont-cleanup-after ${MDBX_TEST_EXTRA} --hill| gzip >> "${TEST_LOG}.gz"
+    COMMAND
+    ./mdbx_test --progress --console=no --repeat=2 "--pathname=${TEST_DB}" --dont-cleanup-before --dont-cleanup-after --copy | gzip >> "${TEST_LOG}.gz"
+    COMMAND
+    ./mdbx_test --mode=-writemap,-nosync-safe,-lifo --progress --console=no --repeat=42 "--pathname=${TEST_DB}" --dont-cleanup-after ${MDBX_TEST_EXTRA} --nested| gzip >> ${TEST_LOG}.gz
+    COMMAND
+    ./mdbx_chk -vvn "${TEST_DB}"
+    COMMAND
+    ./mdbx_chk -vvn "${TEST_DB}-copy"
+    DEPENDS build-test
+    )
+  add_custom_target(test-fault
+    COMMAND
+    rm -f "${TEST_DB}" "${TEST_LOG}.gz"
+    COMMAND
+    ./mdbx_test --progress --console=no "--pathname=${TEST_DB}" --inject-writefault=42 --dump-config --dont-cleanup-after ${MDBX_TEST_EXTRA} basic | gzip >> "${TEST_LOG}.gz"
+    COMMAND
+    ./mdbx_chk -vvnw "${TEST_DB}"
+    COMMAND
+    [ -e "${TEST_DB}-copy" ] && ./mdbx_chk -vvn "${TEST_DB}-copy"
+    DEPENDS build-test
+    )
+
+  if(USE_VALGRIND)
+    set_target_properties(build-test
+      PROPERTIES
+      CFLAGS_EXTRA "-Ofast -DMDBX_USE_VALGRIND")
+    add_custom_target(memcheck
+      DEPENDS valgrind)
+    add_custom_target(valgrind
+      COMMAND
+      rm -f valgrind-*.log "${TEST_DB}" "${TEST_LOG}.gz"
+      COMMAND
+      ${VALGRIND_EXE} ./mdbx_test --table=+data.integer --keygen.split=29 --datalen.min=min --datalen.max=max --progress --console=no --repeat=2 "--pathname=${TEST_DB}" --dont-cleanup-after ${MDBX_TEST_EXTRA} basic | gzip >> "${TEST_LOG}.gz" &&
+      ${VALGRIND_EXE} ./mdbx_test --progress --console=no "--pathname=${TEST_DB}" --dont-cleanup-before --dont-cleanup-after --copy | gzip >> "${TEST_LOG}.gz" &&
+      ${VALGRIND_EXE} ./mdbx_test --mode=-writemap,-nosync-safe,-lifo --progress --console=no --repeat=4 "--pathname=${TEST_DB}" --dont-cleanup-after ${MDBX_TEST_EXTRA} basic | gzip >> "${TEST_LOG}.gz" &&
+      ${VALGRIND_EXE} ./mdbx_chk -vvn "${TEST_DB}" &&
+      ${VALGRIND_EXE} ./mdbx_chk -vvn "${TEST_DB}-copy"
+      DEPENDS build-test
+    )
+  endif()
+
+  if(USE_GCC_ANALYZER)
+    set_target_properties(build-test
+      PROPERTIES
+      CFLAGS_EXTRA "-Og -fanalyzer -Wno-error")
+  endif()
+
+endif()
+
+################################################################################
+
 # mdbx-shared-lib installation
 if(NOT DEFINED MDBX_DLL_INSTALL_DESTINATION)
   if(WIN32)
diff --git a/GNUmakefile b/GNUmakefile
index 509a0923..cbe43b23 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -397,17 +397,7 @@ mdbx_test: $(TEST_OBJ) libmdbx.$(SO_SUFFIX)
 	$(QUIET)$(CXX) $(CXXFLAGS) $(TEST_OBJ) -Wl,-rpath . -L . -l mdbx $(EXE_LDFLAGS) $(LIBS) -o $@
 
 $(git_DIR)/HEAD $(git_DIR)/index $(git_DIR)/refs/tags:
-	@echo '*** ' >&2
-	@echo '*** Please don''t use tarballs nor zips which are automatically provided by Github !' >&2
-	@echo '*** These archives do not contain version information and thus are unfit to build libmdbx.' >&2
-	@echo '*** You can vote for ability of disabling auto-creation such unsuitable archives at https://github.community/t/disable-tarball' >&2
-	@echo '*** ' >&2
-	@echo '*** Instead of above, just clone the git repository, either download a tarball or zip with the properly amalgamated source core.' >&2
-	@echo '*** For embedding libmdbx use a git-submodule or the amalgamated source code.' >&2
-	@echo '*** ' >&2
-	@echo '*** Please, avoid using any other techniques.' >&2
-	@echo '*** ' >&2
-	@false
+	@true
 
 src/version.c: src/version.c.in $(lastword $(MAKEFILE_LIST)) $(git_DIR)/HEAD $(git_DIR)/index $(git_DIR)/refs/tags
 	@echo '  MAKE $@'
-- 
2.32.0