Skip to content

Commit 4f55f44

Browse files
author
JkLondon
committed
new get-cached
1 parent dd2fa5f commit 4f55f44

File tree

17 files changed

+8709
-2751
lines changed

17 files changed

+8709
-2751
lines changed

libmdbx/CMakeLists.txt

Lines changed: 57 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git"
6767
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-dbi.c"
6868
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-env.c"
6969
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-extra.c"
70+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-get-cached.c"
7071
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-key-transform.c"
7172
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-misc.c"
7273
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/api-opts.c"
@@ -233,15 +234,11 @@ else()
233234
endif()
234235

235236
project(libmdbx C)
236-
if(NOT MDBX_AMALGAMATED_SOURCE AND NOT DEFINED BUILD_TESTING)
237-
set(BUILD_TESTING ON)
238-
endif()
239237
endif()
240238

241-
if(NOT MDBX_AMALGAMATED_SOURCE)
242-
include(CTest)
243-
option(MDBX_ENABLE_TESTS "Build libmdbx tests." ${BUILD_TESTING})
244-
elseif(DEFINED MDBX_ENABLE_TESTS AND MDBX_ENABLE_TESTS)
239+
if(MDBX_AMALGAMATED_SOURCE
240+
AND DEFINED MDBX_ENABLE_TESTS
241+
AND MDBX_ENABLE_TESTS)
245242
message(WARNING "MDBX_ENABLE_TESTS=${MDBX_ENABLE_TESTS}: But amalgamated source code don't includes tests.")
246243
set(MDBX_ENABLE_TESTS OFF)
247244
endif()
@@ -335,19 +332,6 @@ if(NOT APPLE
335332
endif()
336333
endif()
337334

338-
check_function_exists(pow NOT_NEED_LIBM)
339-
if(NOT_NEED_LIBM)
340-
set(LIB_MATH "")
341-
else()
342-
set(CMAKE_REQUIRED_LIBRARIES m)
343-
check_function_exists(pow HAVE_LIBM)
344-
if(HAVE_LIBM)
345-
set(LIB_MATH m)
346-
else()
347-
message(FATAL_ERROR "No libm found for math support")
348-
endif()
349-
endif()
350-
351335
if(SUBPROJECT)
352336
if(NOT DEFINED BUILD_SHARED_LIBS)
353337
option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)" OFF)
@@ -449,19 +433,23 @@ else()
449433
endif()
450434

451435
if(NOT MDBX_AMALGAMATED_SOURCE)
452-
find_program(VALGRIND valgrind)
453-
if(VALGRIND)
454-
# (LY) cmake is ugly and nasty. Therefore memcheck-options should be defined before including ctest. Otherwise
455-
# ctest may ignore it.
456-
set(MEMORYCHECK_SUPPRESSIONS_FILE
457-
"${CMAKE_CURRENT_SOURCE_DIR}/test/valgrind_suppress.txt"
458-
CACHE FILEPATH "Suppressions file for Valgrind" FORCE)
459-
set(MEMORYCHECK_COMMAND_OPTIONS
460-
"--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}"
461-
CACHE STRING "Valgrind options" FORCE)
462-
set(VALGRIND_COMMAND_OPTIONS
463-
"${MEMORYCHECK_COMMAND_OPTIONS}"
464-
CACHE STRING "Valgrind options" FORCE)
436+
if(NOT WIN32)
437+
if(NOT MEMORYCHECK_COMMAND)
438+
find_program(MEMORYCHECK_COMMAND valgrind)
439+
endif()
440+
if(MEMORYCHECK_COMMAND)
441+
# (LY) cmake is ugly and nasty. Therefore memcheck-options should be defined before including ctest. Otherwise
442+
# ctest may ignore it.
443+
set(MEMORYCHECK_SUPPRESSIONS_FILE
444+
"${CMAKE_CURRENT_SOURCE_DIR}/test/valgrind_suppress.txt"
445+
CACHE FILEPATH "Suppressions file for Valgrind" FORCE)
446+
set(MEMORYCHECK_COMMAND_OPTIONS
447+
"--trace-children=yes --leak-check=full --track-origins=yes --expensive-definedness-checks=yes --error-exitcode=42 --error-markers=@VALGRIND --errors-for-leak-kinds=definite --fair-sched=yes --suppressions=${MEMORYCHECK_SUPPRESSIONS_FILE}"
448+
CACHE STRING "Valgrind options" FORCE)
449+
set(MEMORYCHECK_COMMAND_OPTIONS
450+
"${MEMORYCHECK_COMMAND_OPTIONS}"
451+
CACHE STRING "Valgrind options" FORCE)
452+
endif()
465453
endif()
466454

467455
# Enable 'make tags' target.
@@ -579,9 +567,8 @@ if(WIN32 AND EXISTS "${MDBX_SOURCE_DIR}/ntdll.def")
579567
if(MSVC)
580568
if(NOT MSVC_LIB_EXE)
581569
# Find lib.exe
582-
get_filename_component(CL_NAME ${CMAKE_C_COMPILER} NAME)
583-
string(REPLACE cl.exe lib.exe MSVC_LIB_EXE ${CL_NAME})
584-
find_program(MSVC_LIB_EXE ${MSVC_LIB_EXE})
570+
get_filename_component(CC_DIR ${CMAKE_C_COMPILER} DIRECTORY)
571+
find_program(MSVC_LIB_EXE "lib.exe" HINTS ${CC_DIR})
585572
endif()
586573
if(MSVC_LIB_EXE)
587574
message(STATUS "Found MSVC's lib tool: ${MSVC_LIB_EXE}")
@@ -593,25 +580,24 @@ if(WIN32 AND EXISTS "${MDBX_SOURCE_DIR}/ntdll.def")
593580
COMMAND ${MSVC_LIB_EXE} /def:"${MDBX_SOURCE_DIR}/ntdll.def" /out:"${MDBX_NTDLL_EXTRA_IMPLIB}"
594581
${INITIAL_CMAKE_STATIC_LINKER_FLAGS})
595582
else()
596-
message(WARNING "MSVC's lib tool not found")
583+
message(WARNING "MSVC's lib.exe not found")
597584
endif()
598585
elseif(MINGW OR MINGW64)
599-
if(NOT DLLTOOL)
600-
# Find dlltool
601-
get_filename_component(GCC_NAME ${CMAKE_C_COMPILER} NAME)
602-
string(REPLACE gcc dlltool DLLTOOL_NAME ${GCC_NAME})
603-
find_program(DLLTOOL NAMES ${DLLTOOL_NAME})
586+
if(NOT MINGW_DLLTOOL_EXE)
587+
# Find dlltool.exe
588+
get_filename_component(CC_DIR ${CMAKE_C_COMPILER} DIRECTORY)
589+
find_program(MINGW_DLLTOOL_EXE "dlltool.exe" HINTS ${CC_DIR})
604590
endif()
605-
if(DLLTOOL)
606-
message(STATUS "Found dlltool: ${DLLTOOL}")
591+
if(MINGW_DLLTOOL_EXE)
592+
message(STATUS "Found MINGW's dlltool: ${MINGW_DLLTOOL_EXE}")
607593
set(MDBX_NTDLL_EXTRA_IMPLIB "${CMAKE_CURRENT_BINARY_DIR}/mdbx_ntdll_extra.a")
608594
add_custom_command(
609595
OUTPUT "${MDBX_NTDLL_EXTRA_IMPLIB}"
610596
COMMENT "Create extra-import-library for ntdll.dll"
611597
MAIN_DEPENDENCY "${MDBX_SOURCE_DIR}/ntdll.def"
612-
COMMAND ${DLLTOOL} -d "${MDBX_SOURCE_DIR}/ntdll.def" -l "${MDBX_NTDLL_EXTRA_IMPLIB}")
598+
COMMAND ${MINGW_DLLTOOL_EXE} -d "${MDBX_SOURCE_DIR}/ntdll.def" -l "${MDBX_NTDLL_EXTRA_IMPLIB}")
613599
else()
614-
message(WARNING "dlltool not found")
600+
message(WARNING "MINGW's dlltool.exe not found")
615601
endif()
616602
endif()
617603

@@ -693,8 +679,7 @@ add_option(MDBX TRUST_RTC "Does a system have battery-backed Real-Time Clock or
693679
mark_as_advanced(MDBX_TRUST_RTC)
694680
add_option(MDBX FORCE_ASSERTIONS "Force enable assertion checking" OFF)
695681
add_option(
696-
MDBX
697-
DISABLE_VALIDATION
682+
MDBX DISABLE_VALIDATION
698683
"Disable some checks to reduce an overhead and detection probability of database corruption to a values closer to the LMDB"
699684
OFF)
700685
mark_as_advanced(MDBX_DISABLE_VALIDATION)
@@ -707,6 +692,8 @@ mark_as_advanced(MDBX_ENABLE_PROFGC)
707692
add_option(MDBX ENABLE_DBI_SPARSE
708693
"Support for sparse sets of DBI handles to reduce overhead when starting and processing transactions" ON)
709694
add_option(MDBX ENABLE_DBI_LOCKFREE "Support for deferred releasing and a lockfree path to quickly open DBI handles" ON)
695+
add_option(MDBX USE_FALLOCATE "Using posix_fallocate() or fcntl(F_PREALLOCATE) on OSX" AUTO)
696+
mark_as_advanced(MDBX_USE_FALLOCATE)
710697

711698
if(NOT MDBX_AMALGAMATED_SOURCE)
712699
if(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE_UPPERCASE STREQUAL "DEBUG")
@@ -727,6 +714,7 @@ if(CMAKE_CXX_COMPILER_LOADED
727714
AND MDBX_CXX_STANDARD LESS 83
728715
AND NOT MDBX_CXX_STANDARD LESS 11)
729716
if(NOT MDBX_AMALGAMATED_SOURCE)
717+
include(CTest)
730718
option(MDBX_ENABLE_TESTS "Build MDBX tests" ${BUILD_TESTING})
731719
endif()
732720
if(NOT MDBX_WITHOUT_MSVC_CRT
@@ -735,11 +723,27 @@ if(CMAKE_CXX_COMPILER_LOADED
735723
AND NOT (MSVC AND MSVC_VERSION LESS 1900))
736724
option(MDBX_BUILD_CXX "Build C++ portion" ON)
737725
else()
726+
if(DEFINED MDBX_BUILD_CXX AND MDBX_BUILD_CXX)
727+
if(MDBX_WITHOUT_MSVC_CRT)
728+
message(
729+
WARNING
730+
"MDBX_BUILD_CXX=${MDBX_BUILD_CXX}: But MDBX_WITHOUT_MSVC_CRT=${MDBX_WITHOUT_MSVC_CRT} which does not allow the use of C++."
731+
)
732+
else()
733+
message(WARNING "MDBX_BUILD_CXX=${MDBX_BUILD_CXX}: But there is no suitable C++ compiler available.")
734+
endif()
735+
endif()
738736
set(MDBX_BUILD_CXX FALSE)
739737
endif()
740738
else()
741-
set(MDBX_BUILD_CXX FALSE)
742-
set(MDBX_ENABLE_TESTS FALSE)
739+
if(DEFINED MDBX_BUILD_CXX AND MDBX_BUILD_CXX)
740+
message(WARNING "MDBX_BUILD_CXX=${MDBX_BUILD_CXX}: But there is no suitable C++ compiler available.")
741+
endif()
742+
if(DEFINED MDBX_ENABLE_TESTS AND MDBX_ENABLE_TESTS)
743+
message(WARNING "MDBX_ENABLE_TESTS=${MDBX_ENABLE_TESTS}: But there is no suitable C++ compiler available.")
744+
endif()
745+
set(MDBX_ENABLE_TESTS OFF)
746+
set(MDBX_BUILD_CXX OFF)
743747
endif()
744748

745749
if(CI)
@@ -764,6 +768,7 @@ if(MDBX_AMALGAMATED_SOURCE)
764768
list(APPEND LIBMDBX_SOURCES mdbx.c)
765769
else()
766770
# generate version file
771+
file(REMOVE "${MDBX_SOURCE_DIR}/version.c")
767772
configure_file("${MDBX_SOURCE_DIR}/version.c.in" "${CMAKE_CURRENT_BINARY_DIR}/version.c" ESCAPE_QUOTES)
768773
file(SHA256 "${CMAKE_CURRENT_BINARY_DIR}/version.c" MDBX_SOURCERY_DIGEST)
769774
string(MAKE_C_IDENTIFIER "${MDBX_GIT_DESCRIBE}" MDBX_SOURCERY_SUFFIX)
@@ -782,6 +787,7 @@ else()
782787
"${MDBX_SOURCE_DIR}/api-dbi.c"
783788
"${MDBX_SOURCE_DIR}/api-env.c"
784789
"${MDBX_SOURCE_DIR}/api-extra.c"
790+
"${MDBX_SOURCE_DIR}/api-get-cached.c"
785791
"${MDBX_SOURCE_DIR}/api-key-transform.c"
786792
"${MDBX_SOURCE_DIR}/api-misc.c"
787793
"${MDBX_SOURCE_DIR}/api-opts.c"
@@ -1036,10 +1042,6 @@ if(MDBX_BUILD_TOOLS)
10361042
target_setup_options(mdbx_${TOOL})
10371043
target_link_libraries(mdbx_${TOOL} ${TOOL_MDBX_LIB})
10381044
endforeach()
1039-
if(LIB_MATH)
1040-
target_link_libraries(mdbx_chk ${LIB_MATH})
1041-
target_link_libraries(mdbx_stat ${LIB_MATH})
1042-
endif()
10431045
endif()
10441046

10451047
# ######################################################################################################################
@@ -1252,6 +1254,7 @@ foreach(item IN LISTS options)
12521254
endforeach(item)
12531255

12541256
# provide config.h for library build info
1257+
file(REMOVE "${MDBX_SOURCE_DIR}/config.h")
12551258
configure_file("${MDBX_SOURCE_DIR}/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h" ESCAPE_QUOTES)
12561259
add_definitions(-DMDBX_CONFIG_H="${CMAKE_CURRENT_BINARY_DIR}/config.h")
12571260

0 commit comments

Comments
 (0)