From 5b4b3fa9eaa001a3c3c0b9601411866b52360f56 Mon Sep 17 00:00:00 2001 From: Leonid Yuriev Date: Sun, 10 May 2020 03:41:28 +0300 Subject: [PATCH] mdbx-windows: fix MDBX_AVOID_CRT option & ntdll.def distribution. Resolve https://github.com/erthink/libmdbx/issues/100 Change-Id: I18ab055e79e249fca856353b2585739c88e01758 --- CMakeLists.txt | 12 +++++++++++- GNUmakefile | 7 +++++-- src/osal.h | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7516da55..c3652ee9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,6 +38,9 @@ cmake_minimum_required(VERSION 3.8.2) cmake_policy(PUSH) cmake_policy(VERSION 3.8.2) +if(NOT CMAKE_VERSION VERSION_LESS 3.15) + cmake_policy(SET CMP0091 NEW) +endif() if(NOT CMAKE_VERSION VERSION_LESS 3.13) cmake_policy(SET CMP0077 NEW) endif() @@ -465,7 +468,7 @@ macro(libmdbx_setup_libs TARGET MODE) target_link_libraries(${TARGET} ${MODE} ${CMAKE_THREAD_LIBS_INIT}) if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows") target_link_libraries(${TARGET} ${MODE} ntdll.lib) - if(MDBX_NTDLL_EXTRA_IMPLIB) + if(MDBX_NTDLL_EXTRA_IMPLIB AND MDBX_AVOID_CRT) target_link_libraries(${TARGET} ${MODE} ntdll_extra) endif() elseif(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Solaris") @@ -504,6 +507,13 @@ if(MDBX_BUILD_SHARED_LIBRARY) target_compile_definitions(mdbx PRIVATE LIBMDBX_EXPORTS MDBX_BUILD_SHARED_LIBRARY=1 INTERFACE LIBMDBX_IMPORTS) target_setup_options(mdbx) libmdbx_setup_libs(mdbx PRIVATE) + if(MSVC) + if(MDBX_NTDLL_EXTRA_IMPLIB AND MDBX_AVOID_CRT) + set_property(TARGET mdbx PROPERTY LINKER_FLAGS "/NODEFAULTLIB") + else() + set_property(TARGET mdbx PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") + endif() + endif() if(CC_HAS_VISIBILITY AND (LTO_ENABLED OR INTERPROCEDURAL_OPTIMIZATION)) set_target_properties(mdbx PROPERTIES LINK_FLAGS "-fvisibility=hidden") endif() diff --git a/GNUmakefile b/GNUmakefile index 6628469e..b6869f14 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -113,7 +113,7 @@ define uname2titer esac endef -DIST_EXTRA := LICENSE README.md CMakeLists.txt GNUmakefile Makefile VERSION config.h.in \ +DIST_EXTRA := LICENSE README.md CMakeLists.txt GNUmakefile Makefile VERSION config.h.in ntdll.def \ $(addprefix man1/, $(MANPAGES)) cmake/compiler.cmake cmake/profile.cmake cmake/utils.cmake DIST_SRC := mdbx.h mdbx.c $(addsuffix .c, $(TOOLS)) @@ -280,11 +280,14 @@ dist/$(1): $(1) mkdir -p $$(dir $$@) && sed -e '/^#> dist-cutoff-begin/,/^#< dist-cutoff-end/d' $$< > $$@ endef -$(foreach file,$(filter-out man1/% VERSION %.in,$(DIST_EXTRA)),$(eval $(call dist-extra-rule,$(file)))) +$(foreach file,$(filter-out man1/% VERSION %.in ntdll.def,$(DIST_EXTRA)),$(eval $(call dist-extra-rule,$(file)))) dist/VERSION: src/version.c mkdir -p dist/ && echo "$(MDBX_VERSION_GIT).$(MDBX_REVISION_GIT)" > $@ +dist/ntdll.def: src/ntdll.def + mkdir -p dist/cmake/ && cp $< $@ + dist/config.h.in: src/config.h.in mkdir -p dist/cmake/ && cp $< $@ diff --git a/src/osal.h b/src/osal.h index 7ea5913f..ddead087 100644 --- a/src/osal.h +++ b/src/osal.h @@ -35,7 +35,7 @@ #define _CRT_SECURE_NO_WARNINGS #endif #if !defined(_NO_CRT_STDIO_INLINE) && MDBX_BUILD_SHARED_LIBRARY && \ - !defined(MDBX_TOOLS) + !defined(MDBX_TOOLS) && MDBX_AVOID_CRT #define _NO_CRT_STDIO_INLINE #endif #elif !defined(_POSIX_C_SOURCE)