From 34883599bc74e8b98795fd2df24d306fe8aa1cca Mon Sep 17 00:00:00 2001 From: Thomas Winget Date: Sun, 18 Jan 2015 18:30:31 -0500 Subject: [PATCH] Add in-source lmdb to build process Working on Linux, needs verified for other platforms but should be fine. --- CMakeLists.txt | 5 +++- cmake/FindLMDB.cmake | 4 --- db_drivers/CMakeLists.txt | 49 +++++++++++++++++++++++++++++++ db_drivers/liblmdb/CMakeLists.txt | 39 ++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 5 deletions(-) create mode 100644 db_drivers/CMakeLists.txt create mode 100644 db_drivers/liblmdb/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index ee5d5f2c..632eecbd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -138,7 +138,10 @@ link_directories(${UNBOUND_LIBRARY_DIRS}) # Final setup for rapidjson include_directories(external/rapidjson) -find_package(LMDB REQUIRED) + +add_subdirectory(db_drivers) + +# Final setup for liblmdb include_directories(${LMDB_INCLUDE}) if(MSVC) diff --git a/cmake/FindLMDB.cmake b/cmake/FindLMDB.cmake index 743cc486..b4c90dea 100644 --- a/cmake/FindLMDB.cmake +++ b/cmake/FindLMDB.cmake @@ -53,9 +53,5 @@ IF(LMDB_INCLUDE_DIR) MESSAGE(STATUS "Found liblmdb library") set(LMDB_INCLUDE ${LMDB_INCLUDE_DIR}) set(LMDB_LIBRARY ${LMDB_LIBRARIES}) - ELSE() - MESSAGE(FATAL_ERROR "${BoldRed}Could not find liblmdb library, please make sure you have installed liblmdb or liblmdb-dev or the equivalent${ColourReset}") ENDIF() -ELSE() - MESSAGE(FATAL_ERROR "${BoldRed}Could not find liblmdb library, please make sure you have installed liblmdb or liblmdb-dev or the equivalent${ColourReset}") ENDIF() diff --git a/db_drivers/CMakeLists.txt b/db_drivers/CMakeLists.txt new file mode 100644 index 00000000..5993ed3a --- /dev/null +++ b/db_drivers/CMakeLists.txt @@ -0,0 +1,49 @@ +# Copyright (c) 2014-2015, The Monero Project +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are +# permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this list of +# conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, this list +# of conditions and the following disclaimer in the documentation and/or other +# materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +find_package(LMDB) + +if(NOT LMDB_LIBRARIES OR STATIC) + add_subdirectory(liblmdb) + message(STATUS "lmdb not found, building from src tree") + + set(LMDB_STATIC true PARENT_SCOPE) + set(LMDB_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/liblmdb" PARENT_SCOPE) + set(LMDB_LIBRARY "lmdb" PARENT_SCOPE) +else() + message(STATUS "Found liblmdb include (lmdb.h) in ${LMDB_INCLUDE_DIR}") + if(LMDB_LIBRARIES) + message(STATUS "Found liblmdb shared library") + set(LMDB_STATIC false PARENT_SCOPE) + set(LMDB_INCLUDE ${LMDB_INCLUDE_DIR} PARENT_SCOPE) + set(LMDB_LIBRARY ${LMDB_LIBRARIES} PARENT_SCOPE) + set(LMDB_LIBRARY_DIRS "" PARENT_SCOPE) + else() + die("Found liblmdb includes, but could not find liblmdb library. Please make sure you have installed liblmdb or liblmdb-dev or the equivalent") + endif() +endif() diff --git a/db_drivers/liblmdb/CMakeLists.txt b/db_drivers/liblmdb/CMakeLists.txt new file mode 100644 index 00000000..62b80013 --- /dev/null +++ b/db_drivers/liblmdb/CMakeLists.txt @@ -0,0 +1,39 @@ +# Copyright (c) 2014-2015, The Monero Project +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are +# permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this list of +# conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, this list +# of conditions and the following disclaimer in the documentation and/or other +# materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +set (lmdb_sources +mdb.c +midl.c) + +include_directories("${CMAKE_CURRENT_SOURCE_DIR}") + +add_library(lmdb + ${lmdb_sources}) +target_link_libraries(lmdb + LINK_PRIVATE + ${CMAKE_THREAD_LIBS_INIT})