@@ -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 ()
239237endif ()
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 )
247244endif ()
@@ -335,19 +332,6 @@ if(NOT APPLE
335332 endif ()
336333endif ()
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-
351335if (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
693679mark_as_advanced (MDBX_TRUST_RTC)
694680add_option(MDBX FORCE_ASSERTIONS "Force enable assertion checking" OFF )
695681add_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 )
700685mark_as_advanced (MDBX_DISABLE_VALIDATION)
@@ -707,6 +692,8 @@ mark_as_advanced(MDBX_ENABLE_PROFGC)
707692add_option(MDBX ENABLE_DBI_SPARSE
708693 "Support for sparse sets of DBI handles to reduce overhead when starting and processing transactions" ON )
709694add_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
711698if (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 ()
740738else ()
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 )
743747endif ()
744748
745749if (CI)
@@ -764,6 +768,7 @@ if(MDBX_AMALGAMATED_SOURCE)
764768 list (APPEND LIBMDBX_SOURCES mdbx.c)
765769else ()
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 ()
10431045endif ()
10441046
10451047# ######################################################################################################################
@@ -1252,6 +1254,7 @@ foreach(item IN LISTS options)
12521254endforeach (item)
12531255
12541256# provide config.h for library build info
1257+ file (REMOVE "${MDBX_SOURCE_DIR} /config.h" )
12551258configure_file ("${MDBX_SOURCE_DIR} /config.h.in" "${CMAKE_CURRENT_BINARY_DIR} /config.h" ESCAPE_QUOTES )
12561259add_definitions (-DMDBX_CONFIG_H="${CMAKE_CURRENT_BINARY_DIR} /config.h" )
12571260
0 commit comments