1cmake_minimum_required(VERSION 3.0) 2 3set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/") 4include(CMakeToolsHelpers OPTIONAL) 5set(DEB_CHANGELOG_REQUIRED ON) 6set(DEB_CHANGELOG "${CMAKE_CURRENT_SOURCE_DIR}/Changelog") 7unset(CHANGELOG_LAST_VERSION) 8unset(CHANGELOG_LAST_MESSAGE) 9include(DebChangelog) 10 11set(PROJECT_NAME "iowow") 12project(${PROJECT_NAME} C) 13 14set(PROJECT_VENDOR "Softmotions (https://softmotions.com)") 15set(PROJECT_WEBSITE "https://github.com/Softmotions/iowow") 16set(PROJECT_MAINTAINER "Anton Adamansky <adamansky@gmail.com>") 17set(PROJECT_DESCRIPTION_SUMMARY "The skiplist based persistent key/value storage engine") 18set(PROJECT_DESCRIPTION "The skiplist based persistent key/value storage engine") 19set(CHANGELOG_MESSAGE ${CHANGELOG_LAST_MESSAGE}) 20set(PROJECT_PPA "ppa:adamansky/iowow") 21set(PROJECT_PPA_USER "adamansky") 22set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO") 23set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "") 24 25 26set(PROJECT_VERSION_MAJOR ${CHANGELOG_LAST_VERSION_MAJOR}) 27set(PROJECT_VERSION_MINOR ${CHANGELOG_LAST_VERSION_MINOR}) 28set(PROJECT_VERSION_PATCH ${CHANGELOG_LAST_VERSION_PATCH}) 29set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) 30set(${PROJECT_NAME}_VERSION ${PROJECT_VERSION}) 31set(${PROJECT_NAME}_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) 32set(${PROJECT_NAME}_VERSION_MINOR ${PROJECT_VERSION_MINOR}) 33set(${PROJECT_NAME}_VERSION_PATCH ${PROJECT_VERSION_PATCH}) 34 35option(BUILD_SHARED_LIBS "Build shared libraries" ON) 36option(BUILD_TESTS "Build test cases" OFF) 37option(ASAN "Turn on address sanitizer" OFF) 38option(BUILD_EXAMPLES "Build example projects" ON) 39option(BUILD_BENCHMARKS "Build benchmarks" OFF) 40option(PACKAGE_DEB "Build .deb instalation packages" OFF) 41option(PACKAGE_RPM "Build .rpm instalation packages" OFF) 42option(PACKAGE_TGZ "Build .tgz package archive" ON) 43option(PACKAGE_ZIP "Build .zip package archive" ON) 44option(ENABLE_PPA "Enable PPA package build" OFF) 45option(UPLOAD_PPA "Upload debian packages to the launchpad ppa repository" OFF) 46set(PPA_DEBIAN_VERSION "ppa1" CACHE STRING "PPA version suffix for debian packages") 47set(PROJECT_PPA_DISTRIB_TARGET "focal;bionic;xenial" CACHE STRING "Ubuntu PPA distrubutive names") 48 49if(POLICY CMP0042) 50 cmake_policy(SET CMP0042 NEW) 51endif(POLICY CMP0042) 52 53include(GNUInstallDirs) 54include(ProjectUtils) 55 56macro_ensure_out_of_source_build( 57 "${CMAKE_PROJECT_NAME} requires an out of source build." 58) 59 60if(BUILD_TESTS) 61 include(CTest) 62 find_package(CUnit REQUIRED) 63endif(BUILD_TESTS) 64 65if(UPLOAD_PPA) 66 set(ENABLE_PPA ON) 67endif(UPLOAD_PPA) 68 69# add a target to generate API documentation with Doxygen 70find_package(Doxygen) 71option(BUILD_DOCUMENTATION "Create and install the HTML based API documentation (requires Doxygen)" OFF) 72 73if(BUILD_DOCUMENTATION) 74 if(NOT DOXYGEN_FOUND) 75 message(FATAL_ERROR "Doxygen is needed to build the documentation.") 76 endif() 77 set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in) 78 set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) 79 configure_file(${doxyfile_in} ${doxyfile} @ONLY) 80 add_custom_target(docs 81 COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile} 82 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 83 COMMENT "Generating API documentation with Doxygen" 84 VERBATIM) 85 install(CODE "execute_process(COMMAND ${CMAKE_BUILD_TOOL} docs)") 86 install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION share/doc) 87endif() 88 89add_subdirectory(man) 90 91if(NOT ENABLE_PPA) 92 add_subdirectory(src) 93else() 94 set(PACKAGE_DEB ON) 95endif() 96 97set(CPACK_GENERATORS) 98if(PACKAGE_TGZ) 99 list(APPEND CPACK_GENERATORS "TGZ") 100endif() 101if(PACKAGE_ZIP) 102 list(APPEND CPACK_GENERATORS "ZIP") 103endif() 104if(PACKAGE_DEB) 105 list(APPEND CPACK_GENERATORS "DEB") 106endif() 107if(PACKAGE_RPM) 108 list(APPEND CPACK_GENERATORS "RPM") 109endif() 110 111if(CPACK_GENERATORS) 112 set(CPACK_GENERATOR "${CPACK_GENERATORS}") 113 set(CPACK_SOURCE_IGNORE_FILES 114 "/mxe/" 115 "/\\\\.vscode/" 116 "/\\\\.codelite/" 117 "/\\\\.idea/" 118 "/cmake-.*/" 119 "\\\\.sh$" 120 "\\\\.project$" 121 "\\\\.workspace$" 122 "\\\\.iml$" 123 "\\\\.mk$" 124 "\\\\.astylerc$" 125 "\\\\.editorconfig$" 126 "/Makefile$" 127 ) 128 set(PROJECT_ARCH "${CMAKE_SYSTEM_PROCESSOR}") 129 add_subdirectory(installer) 130endif(CPACK_GENERATORS) 131 132message("${PROJECT_NAME} CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}") 133message("${PROJECT_NAME} CPACK_GENERATORS: ${CPACK_GENERATORS}") 134message("${PROJECT_NAME} CMAKE_GENERATOR: ${CMAKE_GENERATOR}") 135if (MXE_HOME) 136 message("${PROJECT_NAME} MXE_HOME: ${MXE_HOME}") 137endif() 138if(CMAKE_SYSTEM_NAME) 139 message("${PROJECT_NAME} CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") 140endif() 141message("${PROJECT_NAME} CPU: ${CMAKE_SYSTEM_PROCESSOR}") 142if(CMAKE_SIZEOF_VOID_P) 143 message("${PROJECT_NAME} SIZEOF *VOID: ${CMAKE_SIZEOF_VOID_P}") 144endif() 145message("${PROJECT_NAME} PROJECT: ${CHANGELOG_LAST_LINE}") 146if(CHANGELOG_MESSAGE) 147 message("${PROJECT_NAME} CHANGELOG_MESSAGE:\n ${CHANGELOG_MESSAGE}") 148endif() 149