From b4acc32ca535c93b3a80ebfaddf898250ca12916 Mon Sep 17 00:00:00 2001 From: Noel Kuntze 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