mdbx-build: sourcery pinning (but cmake requires manually config-files removal for now).

This commit is contained in:
Leonid Yuriev
2019-09-05 11:57:52 +03:00
parent 0667f4f211
commit 449307a69f
20 changed files with 261 additions and 168 deletions

View File

@@ -13,12 +13,8 @@
##
# Get version
if(HAVE_MDBX_VERSIONINFO)
fetch_version(MDBX "${CMAKE_CURRENT_SOURCE_DIR}/../VERSION")
message(STATUS "libmdbx version is ${MDBX_VERSION}")
else()
set(MDBX_VERSION "unversioned")
endif()
fetch_version(MDBX "${CMAKE_CURRENT_SOURCE_DIR}/../VERSION")
message(STATUS "libmdbx version is ${MDBX_VERSION}")
if(MDBX_ALLOY_MODE)
set(LIBMDBX_SOURCES alloy.c)
@@ -33,10 +29,10 @@ else()
elements/core.c elements/osal.c elements/lck-${LIBMDBX_OSAL}.c)
endif()
list(APPEND LIBMDBX_SOURCES ../mdbx.h
"${CMAKE_CURRENT_BINARY_DIR}/version.c"
"${CMAKE_CURRENT_BINARY_DIR}/mdbx-config.h")
"${CMAKE_CURRENT_SOURCE_DIR}/elements/version.c"
"${CMAKE_CURRENT_SOURCE_DIR}/elements/config.h")
if(BUILD_SHARED_LIBS)
if(MDBX_BUILD_SHARED_LIBRARY)
add_library(mdbx SHARED ${LIBMDBX_SOURCES})
target_compile_definitions(mdbx PRIVATE LIBMDBX_EXPORTS INTERFACE LIBMDBX_IMPORTS)
if(CC_HAS_VISIBILITY AND (LTO_ENABLED OR INTERPROCEDURAL_OPTIMIZATION))
@@ -52,43 +48,42 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
if(MSVC)
if(NOT MSVC_LIB_EXE)
# Find lib.exe
get_filename_component (CL_NAME ${CMAKE_C_COMPILER} NAME)
string (REPLACE cl.exe lib.exe MSVC_LIB_EXE ${CL_NAME})
get_filename_component(CL_NAME ${CMAKE_C_COMPILER} NAME)
string(REPLACE cl.exe lib.exe MSVC_LIB_EXE ${CL_NAME})
find_program(MSVC_LIB_EXE ${MSVC_LIB_EXE})
endif()
if(MSVC_LIB_EXE)
message (STATUS "Found MSVC's lib tool: ${MSVC_LIB_EXE}")
message(STATUS "Found MSVC's lib tool: ${MSVC_LIB_EXE}")
set(MDBX_NTDLL_EXTRA_IMPLIB ${CMAKE_CURRENT_BINARY_DIR}/mdbx_ntdll_extra.lib)
add_custom_command(OUTPUT ${MDBX_NTDLL_EXTRA_IMPLIB}
COMMENT "Create extra-import-library for ntdll.dll"
MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/elements/ntdll.def"
COMMAND ${MSVC_LIB_EXE} /def:"${CMAKE_CURRENT_SOURCE_DIR}/elements/ntdll.def" /out:"${MDBX_NTDLL_EXTRA_IMPLIB}" ${INITIAL_CMAKE_STATIC_LINKER_FLAGS})
else()
message (SEND_ERROR "MSVC's lib tool not found")
message(SEND_ERROR "MSVC's lib tool not found")
endif()
elseif(MINGW OR MINGW64)
if(NOT DLLTOOL)
# Find dlltool
get_filename_component (GCC_NAME ${CMAKE_C_COMPILER} NAME)
string (REPLACE gcc dlltool DLLTOOL_NAME ${GCC_NAME})
find_program (DLLTOOL NAMES ${DLLTOOL_NAME})
get_filename_component(GCC_NAME ${CMAKE_C_COMPILER} NAME)
string(REPLACE gcc dlltool DLLTOOL_NAME ${GCC_NAME})
find_program(DLLTOOL NAMES ${DLLTOOL_NAME})
endif()
if(DLLTOOL)
message (STATUS "Found dlltool: ${DLLTOOL}")
message(STATUS "Found dlltool: ${DLLTOOL}")
set(MDBX_NTDLL_EXTRA_IMPLIB "${CMAKE_CURRENT_BINARY_DIR}/mdbx_ntdll_extra.a")
add_custom_command(OUTPUT ${MDBX_NTDLL_EXTRA_IMPLIB}
COMMENT "Create extra-import-library for ntdll.dll"
MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/elements/ntdll.def"
COMMAND ${DLLTOOL} -d "${CMAKE_CURRENT_SOURCE_DIR}/elements/ntdll.def" -l "${MDBX_NTDLL_EXTRA_IMPLIB}")
else()
message (SEND_ERROR "dlltool not found")
message(SEND_ERROR "dlltool not found")
endif()
endif()
endif()
target_link_libraries(mdbx ${MDBX_LIBDEP_MODE} ${CMAKE_THREAD_LIBS_INIT})
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
target_compile_definitions(mdbx ${MDBX_LIBDEP_MODE} MDBX_BUILD_DLL)
target_link_libraries(mdbx ${MDBX_LIBDEP_MODE} ntdll.lib)
if(MDBX_NTDLL_EXTRA_IMPLIB)
# LY: Sometimes Cmake requires a nightmarish magic for simple things.
@@ -110,8 +105,6 @@ set_target_properties(mdbx PROPERTIES
C_STANDARD 11
C_STANDARD_REQUIRED OFF
PUBLIC_HEADER "../mdbx.h")
target_include_directories(mdbx PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}")
if(CC_HAS_FASTMATH)
target_compile_options(mdbx PRIVATE "-ffast-math")
@@ -179,19 +172,19 @@ endif()
list(REMOVE_DUPLICATES mdbx_compile_options)
# make string of space separated flags
string(REPLACE ";" " " MDBX_COMPILE_FLAGS "${mdbx_compile_options}")
string(REPLACE ";" " " MDBX_BUILD_FLAGS "${mdbx_compile_options}")
unset(mdbx_compile_options)
string(STRIP "${MDBX_COMPILE_FLAGS}${MDBX_DEFINITIONS}" MDBX_COMPILE_FLAGS)
string(STRIP "${MDBX_BUILD_FLAGS}${MDBX_DEFINITIONS}" MDBX_BUILD_FLAGS)
if(CMAKE_CONFIGURATION_TYPES)
# add dynamic part via per-configuration define
message(STATUS "MDBX Compile Flags: ${MDBX_COMPILE_FLAGS} <AND CONFIGURATION DEPENDENT>")
set(MDBX_COMPILE_FLAGS "${MDBX_COMPILE_FLAGS}")
message(STATUS "MDBX Compile Flags: ${MDBX_BUILD_FLAGS} <AND CONFIGURATION DEPENDENT>")
set(MDBX_BUILD_FLAGS "${MDBX_BUILD_FLAGS}")
add_definitions(
-DMDBX_COMPILE_FLAGS="$<$<CONFIG:Debug>:${CMAKE_C_FLAGS_DEBUG} ${CMAKE_C_DEFINES_DEBUG}>$<$<CONFIG:Release>:${CMAKE_C_FLAGS_RELEASE} ${CMAKE_C_DEFINES_RELEASE}>$<$<CONFIG:RelWithDebInfo>:${CMAKE_C_FLAGS_RELWITHDEBINFO} ${CMAKE_C_DEFINES_RELWITHDEBINFO}>$<$<CONFIG:MinSizeRel>:${CMAKE_C_FLAGS_MINSIZEREL} ${CMAKE_C_DEFINES_MINSIZEREL}>"
)
else()
message(STATUS "MDBX Compile Flags: ${MDBX_COMPILE_FLAGS}")
set(MDBX_COMPILE_FLAGS "${MDBX_COMPILE_FLAGS}")
message(STATUS "MDBX Compile Flags: ${MDBX_BUILD_FLAGS}")
set(MDBX_BUILD_FLAGS "${MDBX_BUILD_FLAGS}")
endif()
# get compiler info
@@ -201,11 +194,8 @@ execute_process(COMMAND sh -c "${CMAKE_C_COMPILER} --version | head -1"
ERROR_QUIET
RESULT_VARIABLE rc)
if(rc OR NOT MDBX_BUILD_COMPILER)
set(MDBX_BUILD_COMPILER "")
else()
set(MDBX_BUILD_COMPILER " | ${MDBX_BUILD_COMPILER}" )
string(STRIP "${CMAKE_C_COMPILER_ID}-${CMAKE_C_COMPILER_VERSION}" MDBX_BUILD_COMPILER)
endif()
string(STRIP "${CMAKE_C_COMPILER_ID}-${CMAKE_C_COMPILER_VERSION}${MDBX_BUILD_COMPILER}" MDBX_BUILD_COMPILER)
# make a build-target triplet
if(CMAKE_C_COMPILER_TARGET)
@@ -229,15 +219,15 @@ endif()
# options
string(TIMESTAMP MDBX_BUILD_TIMESTAMP UTC)
set(MDBX_OPTIONS_STRING -DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")
set(MDBX_BUILD_OPTIONS_STRING -DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")
foreach(item IN LISTS MDBX_BUILD_OPTIONS)
if(DEFINED ${item} AND NOT "${${item}}" STREQUAL "AUTO")
string(APPEND MDBX_OPTIONS_STRING " -D${item}=${${item}}")
string(APPEND MDBX_BUILD_OPTIONS_STRING " -D${item}=${${item}}")
message(STATUS "${item}: ${${item}}")
else()
unset(${item} CACHE)
set(${item}_AUTO ON)
string(APPEND MDBX_OPTIONS_STRING " -D${item}=AUTO")
string(APPEND MDBX_BUILD_OPTIONS_STRING " -D${item}=AUTO")
message(STATUS "${item}: AUTO")
endif()
endforeach()
@@ -257,12 +247,15 @@ foreach(item IN LISTS options)
message(STATUS "${item}: ${value}")
endforeach(item)
# generate version file
# generate version and config files
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/elements/version.c.in"
"${CMAKE_CURRENT_BINARY_DIR}/version.c" ESCAPE_QUOTES)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/elements/config.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/mdbx-config.h" ESCAPE_QUOTES)
"${CMAKE_CURRENT_SOURCE_DIR}/elements/version.c" ESCAPE_QUOTES)
target_compile_definitions(mdbx PRIVATE MDBX_CONFIG_H="${CMAKE_CURRENT_BINARY_DIR}/mdbx-config.h")
file(SHA256 "${CMAKE_CURRENT_SOURCE_DIR}/elements/version.c" MDBX_SOURCERY_DIGEST)
string(MAKE_C_IDENTIFIER "${MDBX_GIT_DESCRIBE}" MDBX_SOURCERY_SUFFIX)
set(MDBX_BUILD_SOURCERY "${MDBX_SOURCERY_DIGEST}_${MDBX_SOURCERY_SUFFIX}")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/elements/config.h.in"
"${CMAKE_CURRENT_SOURCE_DIR}/elements/config.h" ESCAPE_QUOTES)
add_subdirectory(tools)

View File

@@ -15,12 +15,9 @@
#define MDBX_ALLOY 1
#include "elements/internals.h" /* must be included fisrt */
#include "../mdbx.h"
#include "elements/defs.h"
#include "elements/osal.h"
#include "elements/core.c"
#include "elements/osal.c"
#include "elements/version.c"
#if defined(_WIN32) || defined(_WIN64)
#include "elements/lck-windows.c"

View File

@@ -1,4 +1,7 @@
#cmakedefine HAVE_VALGRIND_MEMCHECK_H
/* *INDENT-OFF* */
/* clang-format off */
#cmakedefine HAVE_VALGRIND_MEMCHECK_H
#cmakedefine HAS_RELAXED_CONSTEXPR
#cmakedefine LTO_ENABLED
@@ -7,16 +10,14 @@
#cmakedefine ENABLE_GCOV
#cmakedefine ENABLE_ASAN
#cmakedefine01 HAVE_MDBX_VERSIONINFO
/* Common */
#cmakedefine01 MDBX_TXN_CHECKPID
#cmakedefine01 MDBX_TXN_CHECKOWNER
#cmakedefine01 MDBX_BUILD_SHARED_LIBRARY
/* Windows */
#cmakedefine MDBX_BUILD_DLL
#cmakedefine01 MDBX_CONFIG_MANUAL_TLS_CALLBACK
#cmakedefine MDBX_AVOID_CRT
#cmakedefine01 MDBX_AVOID_CRT
/* MacOS */
#cmakedefine01 MDBX_OSX_SPEED_INSTEADOF_DURABILITY
@@ -26,6 +27,10 @@
#cmakedefine01 MDBX_USE_OFDLOCKS
/* Simulate "AUTO" values of tristate options */
#cmakedefine MDBX_TXN_CHECKPID_AUTO
#ifdef MDBX_TXN_CHECKPID_AUTO
#undef MDBX_TXN_CHECKPID
#endif
#cmakedefine MDBX_USE_ROBUST_AUTO
#ifdef MDBX_USE_ROBUST_AUTO
#undef MDBX_USE_ROBUST
@@ -34,3 +39,15 @@
#ifdef MDBX_USE_OFDLOCKS_AUTO
#undef MDBX_USE_OFDLOCKS
#endif
/* Build Info */
#cmakedefine MDBX_BUILD_TIMESTAMP "@MDBX_BUILD_TIMESTAMP@"
#cmakedefine MDBX_BUILD_TARGET "@MDBX_BUILD_TARGET@"
#cmakedefine MDBX_BUILD_CONFIG "@MDBX_BUILD_CONFIG@"
#cmakedefine MDBX_BUILD_OPTIONS_STRING "@MDBX_BUILD_OPTIONS_STRING@"
#cmakedefine MDBX_BUILD_COMPILER "@MDBX_BUILD_COMPILER@"
#cmakedefine MDBX_BUILD_FLAGS "@MDBX_BUILD_FLAGS@"
#cmakedefine MDBX_BUILD_SOURCERY @MDBX_BUILD_SOURCERY@
/* *INDENT-ON* */
/* clang-format on */

View File

@@ -14686,6 +14686,53 @@ int mdbx_set_attr(MDBX_txn *txn, MDBX_dbi dbi, MDBX_val *key, MDBX_val *data,
//----------------------------------------------------------------------------
__dll_export
#ifdef __attribute_used__
__attribute_used__
#elif defined(__GNUC__) || __has_attribute(__used__)
__attribute__((__used__))
#endif
#ifdef __attribute_externally_visible__
__attribute_externally_visible__
#elif (defined(__GNUC__) && !defined(__clang__)) || \
__has_attribute(__externally_visible__)
__attribute__((__externally_visible__))
#endif
const mdbx_build_info mdbx_build = {
#ifdef MDBX_BUILD_TIMESTAMP
MDBX_BUILD_TIMESTAMP
#else
__DATE__ " " __TIME__
#endif
,
#ifdef MDBX_BUILD_TARGET
MDBX_BUILD_TARGET
#else
"UNKNOWN_BUILD_TARGET"
#endif
#ifdef MDBX_BUILD_CONFIG
"-" MDBX_BUILD_CONFIG
#endif
,
#ifdef MDBX_BUILD_OPTIONS_STRING
MDBX_BUILD_OPTIONS_STRING
#else
"@TODO: MDBX_BUILD_OPTIONS_STRING"
#endif
,
#ifdef MDBX_BUILD_COMPILER
MDBX_BUILD_COMPILER
#else
"@TODO: MDBX_BUILD_COMPILER"
#endif
,
#ifdef MDBX_BUILD_FLAGS
MDBX_BUILD_FLAGS
#else
"@TODO: MDBX_BUILD_FLAGS"
#endif
};
#ifdef __SANITIZE_ADDRESS__
LIBMDBX_API __attribute__((__weak__)) const char *__asan_default_options() {
return "symbolize=1:allow_addr2line=1:"

View File

@@ -417,6 +417,9 @@ typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__)));
# define STRINGIFY(x) STRINGIFY_HELPER(x)
#endif /* STRINGIFY */
#define CONCAT(a,b) a##b
#define XCONCAT(a,b) CONCAT(a,b)
#ifndef offsetof
# define offsetof(type, member) __builtin_offsetof(type, member)
#endif /* offsetof */

View File

@@ -15,9 +15,7 @@
/* *INDENT-OFF* */
/* clang-format off */
#ifdef MDBX_CONFIG_H
#include MDBX_CONFIG_H
#endif
#include "config.h"
/* In case the MDBX_DEBUG is undefined set it corresponding to NDEBUG */
#ifndef MDBX_DEBUG
@@ -153,6 +151,57 @@
#define MDBX_WORDBITS 32
#endif /* MDBX_WORDBITS */
/* Some platforms define the EOWNERDEAD error code even though they
* don't support Robust Mutexes. Compile with -DMDBX_USE_ROBUST=0. */
#ifndef MDBX_USE_ROBUST
#define MDBX_USE_ROBUST_CONFIG AUTO
/* Howard Chu: Android currently lacks Robust Mutex support */
#if defined(EOWNERDEAD) && !defined(__ANDROID__) && !defined(__APPLE__) && \
(!defined(__GLIBC__) || \
__GLIBC_PREREQ( \
2, \
10) /* LY: glibc before 2.10 has a troubles with Robust Mutex too. */ \
|| _POSIX_C_SOURCE >= 200809L)
#define MDBX_USE_ROBUST 1
#else
#define MDBX_USE_ROBUST 0
#endif
#else
#define MDBX_USE_ROBUST_CONFIG MDBX_USE_ROBUST
#endif /* MDBX_USE_ROBUST */
#ifndef MDBX_USE_OFDLOCKS
#define MDBX_USE_OFDLOCKS_CONFIG AUTO
#if defined(F_OFD_SETLK) && defined(F_OFD_SETLKW) && defined(F_OFD_GETLK)
#define MDBX_USE_OFDLOCKS 1
#else
#define MDBX_USE_OFDLOCKS 0
#endif
#else
#define MDBX_USE_OFDLOCKS_CONFIG MDBX_USE_OFDLOCKS
#endif /* MDBX_USE_OFDLOCKS */
/* Controls checking PID against reuse DB environment after the fork() */
#ifndef MDBX_TXN_CHECKPID
#define MDBX_TXN_CHECKPID_CONFIG AUTO
#if defined(MADV_DONTFORK) || defined(_WIN32) || defined(_WIN64)
/* PID check could be ommited:
* - on Linux when madvise(MADV_DONTFORK) is available. i.e. after the fork()
* mapped pages will not be available for child process.
* - in Windows where fork() not available. */
#define MDBX_TXN_CHECKPID 0
#else
#define MDBX_TXN_CHECKPID 1
#endif
#else
#define MDBX_TXN_CHECKPID_CONFIG MDBX_TXN_CHECKPID
#endif /* MDBX_TXN_CHECKPID */
#define mdbx_sourcery_anchor XCONCAT(mdbx_sourcery_, MDBX_BUILD_SOURCERY)
#if defined(MDBX_TOOLS)
extern LIBMDBX_API const char *const mdbx_sourcery_anchor;
#endif
/*----------------------------------------------------------------------------*/
/* Basic constants and types */
@@ -202,11 +251,7 @@ typedef uint32_t pgno_t;
/* A transaction ID. */
typedef uint64_t txnid_t;
#define PRIaTXN PRIi64
#if MDBX_DEBUG
#define MIN_TXNID UINT64_C(0x100000000)
#else
#define MIN_TXNID UINT64_C(1)
#endif /* MIN_TXNID */
/* Used for offsets within a single page.
* Since memory pages are typically 4 or 8KB in size, 12-13 bits,
@@ -1274,16 +1319,3 @@ static __inline void mdbx_jitter4testing(bool tiny) {
(void)tiny;
#endif
}
/* Controls checking PID against reuse DB environment after the fork() */
#ifndef MDBX_TXN_CHECKPID
#if defined(MADV_DONTFORK) || defined(_WIN32) || defined(_WIN64)
/* PID check could be ommited:
* - on Linux when madvise(MADV_DONTFORK) is available. i.e. after the fork()
* mapped pages will not be available for child process.
* - in Windows where fork() not available. */
#define MDBX_TXN_CHECKPID 0
#else
#define MDBX_TXN_CHECKPID 1
#endif
#endif /* MDBX_TXN_CHECKPID */

View File

@@ -14,30 +14,6 @@
#include "./internals.h"
/* Some platforms define the EOWNERDEAD error code even though they
* don't support Robust Mutexes. Compile with -DMDBX_USE_ROBUST=0. */
#ifndef MDBX_USE_ROBUST
/* Howard Chu: Android currently lacks Robust Mutex support */
#if defined(EOWNERDEAD) && !defined(__ANDROID__) && !defined(__APPLE__) && \
(!defined(__GLIBC__) || \
__GLIBC_PREREQ( \
2, \
10) /* LY: glibc before 2.10 has a troubles with Robust Mutex too. */ \
|| _POSIX_C_SOURCE >= 200809L)
#define MDBX_USE_ROBUST 1
#else
#define MDBX_USE_ROBUST 0
#endif
#endif /* MDBX_USE_ROBUST */
#ifndef MDBX_USE_OFDLOCKS
#if defined(F_OFD_SETLK) && defined(F_OFD_SETLKW) && defined(F_OFD_GETLK)
#define MDBX_USE_OFDLOCKS 1
#else
#define MDBX_USE_OFDLOCKS 0
#endif
#endif /* MDBX_USE_OFDLOCKS */
/*----------------------------------------------------------------------------*/
/* global constructor/destructor */

View File

@@ -26,7 +26,7 @@
static void mdbx_winnt_import(void);
#ifdef MDBX_BUILD_DLL
#ifdef MDBX_BUILD_SHARED_LIBRARY
#if MDBX_AVOID_CRT && defined(NDEBUG)
/* DEBUG/CHECKED builds still require MSVC's CRT for runtime checks.
*
@@ -44,7 +44,7 @@ static
#endif /* !MDBX_CONFIG_MANUAL_TLS_CALLBACK */
void NTAPI
mdbx_dll_callback(PVOID module, DWORD reason, PVOID reserved)
#endif /* MDBX_BUILD_DLL */
#endif /* MDBX_BUILD_SHARED_LIBRARY */
{
(void)reserved;
switch (reason) {
@@ -62,12 +62,12 @@ static
mdbx_rthc_thread_dtor(module);
break;
}
#ifdef MDBX_BUILD_DLL
#if MDBX_BUILD_SHARED_LIBRARY
return TRUE;
#endif
}
#if !defined(MDBX_BUILD_DLL) && !MDBX_CONFIG_MANUAL_TLS_CALLBACK
#if !MDBX_BUILD_SHARED_LIBRARY && !MDBX_CONFIG_MANUAL_TLS_CALLBACK
/* *INDENT-OFF* */
/* clang-format off */
#if defined(_MSC_VER)
@@ -105,7 +105,7 @@ static
#endif
/* *INDENT-ON* */
/* clang-format on */
#endif /* !defined(MDBX_BUILD_DLL) && !MDBX_CONFIG_MANUAL_TLS_CALLBACK */
#endif /* !MDBX_BUILD_SHARED_LIBRARY && !MDBX_CONFIG_MANUAL_TLS_CALLBACK */
/*----------------------------------------------------------------------------*/

View File

@@ -34,7 +34,8 @@
#if !defined(_CRT_SECURE_NO_WARNINGS)
#define _CRT_SECURE_NO_WARNINGS
#endif
#if !defined(_NO_CRT_STDIO_INLINE) && defined(MDBX_BUILD_DLL)
#if !defined(_NO_CRT_STDIO_INLINE) && MDBX_BUILD_SHARED_LIBRARY && \
!defined(MDBX_TOOLS)
#define _NO_CRT_STDIO_INLINE
#endif
#endif /* Windows */
@@ -109,7 +110,7 @@ typedef struct {
} mdbx_condmutex_t;
typedef CRITICAL_SECTION mdbx_fastmutex_t;
#ifdef MDBX_AVOID_CRT
#if MDBX_AVOID_CRT
#ifndef mdbx_malloc
static inline void *mdbx_malloc(size_t bytes) {
return LocalAlloc(LMEM_FIXED, bytes);

View File

@@ -12,14 +12,13 @@
* <http://www.OpenLDAP.org/license.html>.
*/
#include "elements/internals.h"
#include "internals.h"
#if defined(_MSC_VER) && defined(MDBX_BUILD_TARGET)
#pragma message("Configuration-depended MDBX_BUILD_TARGET: " MDBX_BUILD_TARGET)
#endif
#if defined(_MSC_VER) && defined(MDBX_COMPILE_FLAGS)
#pragma message( \
"Configuration-depended MDBX_COMPILE_FLAGS: " MDBX_COMPILE_FLAGS)
#if defined(_MSC_VER) && defined(MDBX_BUILD_FLAGS)
#pragma message("Configuration-depended MDBX_BUILD_FLAGS: " MDBX_BUILD_FLAGS)
#endif
#if MDBX_VERSION_MAJOR != ${MDBX_VERSION_MAJOR} || \
@@ -27,19 +26,39 @@
#error "API version mismatch! Had `git fetch --tags` done?"
#endif
/*LIBMDBX_API*/ const mdbx_version_info mdbx_version = {
${MDBX_VERSION_MAJOR},
${MDBX_VERSION_MINOR},
${MDBX_VERSION_RELEASE},
${MDBX_VERSION_REVISION},
{"@MDBX_GIT_TIMESTAMP@", "@MDBX_GIT_TREE@", "@MDBX_GIT_COMMIT@",
"@MDBX_GIT_DESCRIBE@"}};
static const char sourcery[] = STRINGIFY(MDBX_BUILD_SOURCERY);
/*LIBMDBX_API*/ const mdbx_build_info mdbx_build = {
"@MDBX_BUILD_TIMESTAMP@",
"${MDBX_BUILD_TARGET}"
#ifdef DMDBX_BUILD_CONFIG
"-" DMDBX_BUILD_CONFIG
__dll_export
#ifdef __attribute_used__
__attribute_used__
#elif defined(__GNUC__) || __has_attribute(__used__)
__attribute__((__used__))
#endif
,
"@MDBX_OPTIONS_STRING@", "@MDBX_BUILD_COMPILER@", "${MDBX_COMPILE_FLAGS}"};
#ifdef __attribute_externally_visible__
__attribute_externally_visible__
#elif (defined(__GNUC__) && !defined(__clang__)) || \
__has_attribute(__externally_visible__)
__attribute__((__externally_visible__))
#endif
const mdbx_version_info mdbx_version = {
${MDBX_VERSION_MAJOR},
${MDBX_VERSION_MINOR},
${MDBX_VERSION_RELEASE},
${MDBX_VERSION_REVISION},
{"@MDBX_GIT_TIMESTAMP@", "@MDBX_GIT_TREE@", "@MDBX_GIT_COMMIT@",
"@MDBX_GIT_DESCRIBE@"},
sourcery};
__dll_export
#ifdef __attribute_used__
__attribute_used__
#elif defined(__GNUC__) || __has_attribute(__used__)
__attribute__((__used__))
#endif
#ifdef __attribute_externally_visible__
__attribute_externally_visible__
#elif (defined(__GNUC__) && !defined(__clang__)) || \
__has_attribute(__externally_visible__)
__attribute__((__externally_visible__))
#endif
const char *const mdbx_sourcery_anchor = sourcery;

View File

@@ -13,7 +13,7 @@ foreach (TOOL ${MDBX_TOOLS})
add_executable(${TOOL} ${TOOL}.c)
endif()
target_link_libraries(${TOOL} mdbx)
target_link_libraries(${TOOL} mdbx ${CMAKE_THREAD_LIBS_INIT})
set_target_properties(${TOOL} PROPERTIES
INTERPROCEDURAL_OPTIMIZATION $<BOOL:${INTERPROCEDURAL_OPTIMIZATION}>)

View File

@@ -938,14 +938,16 @@ int main(int argc, char *argv[]) {
case 'V':
printf("mdbx_chk version %d.%d.%d.%d\n"
" - source: %s %s, commit %s, tree %s\n"
" - anchor: %s\n"
" - build: %s for %s by %s\n"
" - flags: %s\n"
" - options: %s\n",
mdbx_version.major, mdbx_version.minor, mdbx_version.release,
mdbx_version.revision, mdbx_version.git.describe,
mdbx_version.git.datetime, mdbx_version.git.commit,
mdbx_version.git.tree, mdbx_build.datetime, mdbx_build.target,
mdbx_build.compiler, mdbx_build.flags, mdbx_build.options);
mdbx_version.git.tree, mdbx_sourcery_anchor, mdbx_build.datetime,
mdbx_build.target, mdbx_build.compiler, mdbx_build.flags,
mdbx_build.options);
return EXIT_SUCCESS;
case 'v':
verbose++;

View File

@@ -58,14 +58,16 @@ int main(int argc, char *argv[]) {
else if (argv[1][1] == 'V' && argv[1][2] == '\0') {
printf("mdbx_copy version %d.%d.%d.%d\n"
" - source: %s %s, commit %s, tree %s\n"
" - anchor: %s\n"
" - build: %s for %s by %s\n"
" - flags: %s\n"
" - options: %s\n",
mdbx_version.major, mdbx_version.minor, mdbx_version.release,
mdbx_version.revision, mdbx_version.git.describe,
mdbx_version.git.datetime, mdbx_version.git.commit,
mdbx_version.git.tree, mdbx_build.datetime, mdbx_build.target,
mdbx_build.compiler, mdbx_build.flags, mdbx_build.options);
mdbx_version.git.tree, mdbx_sourcery_anchor, mdbx_build.datetime,
mdbx_build.target, mdbx_build.compiler, mdbx_build.flags,
mdbx_build.options);
return EXIT_SUCCESS;
} else
argc = 0;

View File

@@ -191,14 +191,16 @@ int main(int argc, char *argv[]) {
case 'V':
printf("mdbx_dump version %d.%d.%d.%d\n"
" - source: %s %s, commit %s, tree %s\n"
" - anchor: %s\n"
" - build: %s for %s by %s\n"
" - flags: %s\n"
" - options: %s\n",
mdbx_version.major, mdbx_version.minor, mdbx_version.release,
mdbx_version.revision, mdbx_version.git.describe,
mdbx_version.git.datetime, mdbx_version.git.commit,
mdbx_version.git.tree, mdbx_build.datetime, mdbx_build.target,
mdbx_build.compiler, mdbx_build.flags, mdbx_build.options);
mdbx_version.git.tree, mdbx_sourcery_anchor, mdbx_build.datetime,
mdbx_build.target, mdbx_build.compiler, mdbx_build.flags,
mdbx_build.options);
return EXIT_SUCCESS;
case 'l':
list = 1;

View File

@@ -346,14 +346,16 @@ int main(int argc, char *argv[]) {
case 'V':
printf("mdbx_load version %d.%d.%d.%d\n"
" - source: %s %s, commit %s, tree %s\n"
" - anchor: %s\n"
" - build: %s for %s by %s\n"
" - flags: %s\n"
" - options: %s\n",
mdbx_version.major, mdbx_version.minor, mdbx_version.release,
mdbx_version.revision, mdbx_version.git.describe,
mdbx_version.git.datetime, mdbx_version.git.commit,
mdbx_version.git.tree, mdbx_build.datetime, mdbx_build.target,
mdbx_build.compiler, mdbx_build.flags, mdbx_build.options);
mdbx_version.git.tree, mdbx_sourcery_anchor, mdbx_build.datetime,
mdbx_build.target, mdbx_build.compiler, mdbx_build.flags,
mdbx_build.options);
return EXIT_SUCCESS;
case 'a':
append = 1;

View File

@@ -88,14 +88,16 @@ int main(int argc, char *argv[]) {
case 'V':
printf("mdbx_stat version %d.%d.%d.%d\n"
" - source: %s %s, commit %s, tree %s\n"
" - anchor: %s\n"
" - build: %s for %s by %s\n"
" - flags: %s\n"
" - options: %s\n",
mdbx_version.major, mdbx_version.minor, mdbx_version.release,
mdbx_version.revision, mdbx_version.git.describe,
mdbx_version.git.datetime, mdbx_version.git.commit,
mdbx_version.git.tree, mdbx_build.datetime, mdbx_build.target,
mdbx_build.compiler, mdbx_build.flags, mdbx_build.options);
mdbx_version.git.tree, mdbx_sourcery_anchor, mdbx_build.datetime,
mdbx_build.target, mdbx_build.compiler, mdbx_build.flags,
mdbx_build.options);
return EXIT_SUCCESS;
case 'a':
if (subname)