2022-09-04 11:15:31 +00:00
|
|
|
cmake_minimum_required(VERSION 3.16)
|
2022-09-04 10:14:42 +00:00
|
|
|
|
2023-04-10 21:01:19 +00:00
|
|
|
project(LMDBAL
|
2024-02-04 19:10:43 +00:00
|
|
|
VERSION 0.5.4
|
2023-04-10 21:01:19 +00:00
|
|
|
DESCRIPTION "LMDB (Lightning Memory-Mapped Database Manager) Abstraction Layer"
|
|
|
|
LANGUAGES CXX
|
|
|
|
)
|
2023-03-22 16:30:41 +00:00
|
|
|
string(TOLOWER ${PROJECT_NAME} PROJECT_LOW)
|
2022-09-04 10:14:42 +00:00
|
|
|
|
2022-09-04 11:15:31 +00:00
|
|
|
cmake_policy(SET CMP0076 NEW)
|
|
|
|
cmake_policy(SET CMP0079 NEW)
|
2022-09-15 21:34:39 +00:00
|
|
|
|
2023-03-22 16:30:41 +00:00
|
|
|
option(BUILD_STATIC "Builds library as static library" OFF)
|
|
|
|
option(BUILD_TESTS "Builds tests" OFF)
|
2023-03-23 17:27:46 +00:00
|
|
|
option(BUILD_DOC "Builds documentation" OFF)
|
2023-04-09 17:19:23 +00:00
|
|
|
option(BUILD_DOXYGEN_AWESOME "Builds documentation alternative style" OFF)
|
2023-03-22 16:30:41 +00:00
|
|
|
|
2022-09-15 21:34:39 +00:00
|
|
|
include(GNUInstallDirs)
|
2023-03-22 16:30:41 +00:00
|
|
|
include(CMakePackageConfigHelpers)
|
2022-09-15 21:34:39 +00:00
|
|
|
|
2022-10-10 20:51:48 +00:00
|
|
|
set(CMAKE_AUTOMOC ON)
|
2022-09-04 11:15:31 +00:00
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
2024-01-31 13:13:27 +00:00
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
2022-09-04 11:15:31 +00:00
|
|
|
|
|
|
|
if (NOT DEFINED QT_VERSION_MAJOR)
|
|
|
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
|
|
|
|
endif()
|
|
|
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
|
|
|
|
|
|
|
|
find_package(LMDB REQUIRED)
|
|
|
|
|
|
|
|
# Build type
|
|
|
|
if (NOT CMAKE_BUILD_TYPE)
|
|
|
|
set(CMAKE_BUILD_TYPE Debug)
|
|
|
|
endif ()
|
|
|
|
|
2022-09-15 21:34:39 +00:00
|
|
|
if (BUILD_STATIC)
|
2023-03-22 16:30:41 +00:00
|
|
|
add_library(${PROJECT_NAME} STATIC)
|
2022-09-15 21:34:39 +00:00
|
|
|
else ()
|
2023-03-22 16:30:41 +00:00
|
|
|
add_library(${PROJECT_NAME} SHARED)
|
2022-09-15 21:34:39 +00:00
|
|
|
endif()
|
|
|
|
|
2023-04-02 13:00:21 +00:00
|
|
|
if (CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
|
|
list(APPEND COMPILE_OPTIONS -O3)
|
|
|
|
elseif (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
|
|
list(APPEND COMPILE_OPTIONS -g)
|
|
|
|
list(APPEND COMPILE_OPTIONS -Wall)
|
|
|
|
list(APPEND COMPILE_OPTIONS -Wextra)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
message("Compilation options: " ${COMPILE_OPTIONS})
|
|
|
|
target_compile_options(${PROJECT_NAME} PRIVATE ${COMPILE_OPTIONS})
|
|
|
|
|
2023-03-22 16:30:41 +00:00
|
|
|
set_property(TARGET ${PROJECT_NAME} PROPERTY VERSION ${version})
|
|
|
|
set_property(TARGET ${PROJECT_NAME} PROPERTY SOVERSION 1)
|
2024-02-01 16:05:49 +00:00
|
|
|
set_property(TARGET ${PROJECT_NAME} PROPERTY EXPORT_NAME ${PROJECT_NAME})
|
2024-02-04 19:10:43 +00:00
|
|
|
set_property(TARGET ${PROJECT_NAME} PROPERTY INTERFACE_${PROJECT_NAME}_MAJOR_VERSION 1)
|
2023-03-22 16:30:41 +00:00
|
|
|
set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY
|
|
|
|
COMPATIBLE_INTERFACE_STRING ${PROJECT_NAME}_MAJOR_VERSION
|
|
|
|
)
|
|
|
|
|
2024-02-04 19:10:43 +00:00
|
|
|
if (UNIX)
|
|
|
|
set_property(TARGET ${PROJECT_NAME} PROPERTY INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${PROJECT_LOW}")
|
|
|
|
endif()
|
2024-02-01 16:05:49 +00:00
|
|
|
|
2023-03-21 11:05:54 +00:00
|
|
|
add_subdirectory(src)
|
2023-03-23 17:27:46 +00:00
|
|
|
if (BUILD_DOC)
|
|
|
|
find_package(Doxygen)
|
|
|
|
if (DOXYGEN_FOUND)
|
|
|
|
add_subdirectory(doc)
|
|
|
|
else()
|
|
|
|
message("Was trying to build documentation, but Doxygen was not found, skipping documentation")
|
|
|
|
endif()
|
|
|
|
endif()
|
2023-03-21 11:05:54 +00:00
|
|
|
|
2022-09-15 21:34:39 +00:00
|
|
|
if (BUILD_TESTS)
|
|
|
|
add_subdirectory(test)
|
|
|
|
endif ()
|
|
|
|
|
2024-02-01 16:05:49 +00:00
|
|
|
target_include_directories(
|
|
|
|
${PROJECT_NAME}
|
|
|
|
PUBLIC
|
|
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_LOW}>
|
|
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
|
|
|
|
)
|
2023-03-22 16:30:41 +00:00
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE ${Qt${QT_VERSION_MAJOR}_INCLUDE_DIRS})
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE ${Qt${QT_VERSION_MAJOR}Core_INCLUDE_DIRS})
|
|
|
|
|
2024-02-01 16:05:49 +00:00
|
|
|
target_link_libraries(
|
|
|
|
${PROJECT_NAME}
|
|
|
|
PRIVATE
|
|
|
|
Qt${QT_VERSION_MAJOR}::Core
|
|
|
|
lmdb
|
2023-03-22 16:30:41 +00:00
|
|
|
)
|
2022-09-04 11:15:31 +00:00
|
|
|
|
2023-03-22 16:30:41 +00:00
|
|
|
configure_package_config_file(
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Config.cmake.in
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_LOW}Config.cmake"
|
|
|
|
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_LOW}
|
2022-09-04 11:15:31 +00:00
|
|
|
)
|
2022-09-04 10:14:42 +00:00
|
|
|
|
2023-03-22 16:30:41 +00:00
|
|
|
write_basic_package_version_file(
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_LOW}ConfigVersion.cmake"
|
|
|
|
VERSION "${version}"
|
|
|
|
COMPATIBILITY AnyNewerVersion
|
|
|
|
)
|
|
|
|
|
|
|
|
install(TARGETS ${PROJECT_NAME}
|
|
|
|
EXPORT ${PROJECT_LOW}Targets
|
2022-09-15 21:34:39 +00:00
|
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
2023-03-22 16:30:41 +00:00
|
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_LOW}
|
|
|
|
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_LOW}
|
2022-09-15 21:34:39 +00:00
|
|
|
)
|
|
|
|
|
2023-03-22 16:30:41 +00:00
|
|
|
install(EXPORT ${PROJECT_LOW}Targets
|
|
|
|
FILE ${PROJECT_LOW}Targets.cmake
|
|
|
|
NAMESPACE ${PROJECT_NAME}::
|
|
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_LOW}
|
|
|
|
)
|
|
|
|
|
|
|
|
install(FILES
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_LOW}Config.cmake"
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_LOW}ConfigVersion.cmake"
|
|
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_LOW}
|
|
|
|
)
|