• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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