Version 0.13.0
[marnav.git] / CMakeLists.txt
blob7aa597fde4345bb71ce5bd708877861cf8c1aebd
1 cmake_minimum_required(VERSION 3.11)
3 project(marnav
4         VERSION 0.13.0
5         LANGUAGES CXX C
6         DESCRIPTION "Library for maritime navigation."
7         )
9 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
10 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
11 set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
13 # compilation traits
14 set(CMAKE_CXX_STANDARD 11)
15 set(CMAKE_CXX_STANDARD_REQUIRED ON)
16 set(CMAKE_CXX_EXTENSIONS OFF)
17 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
19 ### options
20 option(ENABLE_STATIC "Enable static library" ON)
21 option(ENABLE_PROFILING "Enable Profiling" OFF)
22 option(ENABLE_BENCHMARK "Enable Benchmark" OFF)
23 option(ENABLE_SANITIZER "Enable Sanitizing (address, undefined)" OFF)
24 option(ENABLE_IO "Enable IO support" ON)
25 option(ENABLE_EXAMPLES "Enable Examples" ON)
26 option(ENABLE_TESTS "Enable Tests" ON)
27 option(ENABLE_TESTS_BENCHMARK "Enable Test Benchmarks" ON)
28 option(ENABLE_TOOLS "Enable Tools" ON)
30 if(NOT DEFINED BUILD_SHARED_LIBS)
31         if(ENABLE_STATIC)
32                 set(BUILD_SHARED_LIBS FALSE)
33         else()
34                 set(BUILD_SHARED_LIBS TRUE)
35         endif()
36 endif()
38 # misc
39 include(RepoInformation)
40 include(Documentation)
41 include(CppCheck)
42 include(ExternalProject)
44 if(ENABLE_TOOLS)
45         include(ExternCxxopts)
46         include(ExternFmt)
47 endif()
49 ### common
50 message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
51 file(MAKE_DIRECTORY
52         ${CMAKE_CURRENT_BINARY_DIR}/doc
53         ${CMAKE_CURRENT_BINARY_DIR}/doc/coverage
54         ${CMAKE_CURRENT_BINARY_DIR}/local/include
55         )
57 ### library
58 add_subdirectory(src)
60 ### examples
61 message(STATUS "Build Examples: ${ENABLE_EXAMPLES}")
62 if(ENABLE_EXAMPLES)
63         add_subdirectory(examples)
64 endif()
66 ### ctags / cscope
67 include(CTags)
68 if(CTAGS_PATH AND CSCOPE_PATH)
69         setup_ctags_target("${CMAKE_CURRENT_SOURCE_DIR}/src/*.?pp;${CMAKE_CURRENT_SOURCE_DIR}/include/*.?pp")
70 endif()
72 ### testing
73 message(STATUS "Build Tests: ${ENABLE_TESTS}")
74 message(STATUS "Build Tests Benchmark: ${ENABLE_TESTS_BENCHMARK}")
75 if(ENABLE_TESTS)
76         enable_testing()
77         include(ExternGoogletest)
79         if(ENABLE_TESTS_BENCHMARK)
80                 include(ExternBenchmark)
81         endif()
83         add_subdirectory(test)
84 endif()
86 ### coverage
87 if(CMAKE_BUILD_TYPE MATCHES Coverage)
88         include(CodeCoverage)
89         setup_target_for_coverage(coverage
90                 testrunner
91                 doc/coverage
92                 )
93 endif()
95 set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
96 set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
97 set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
98 set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
99 set(CPACK_PACKAGE_NAME "marnav")
100 set(CPACK_PACKAGE_VENDOR "Mario Konrad")
101 set(CPACK_PACKAGE_CONTACT "Mario Konrad <mario.konrad@gmx.net>")
102 set(CPACK_PACAKGE_DESCRIPTION "Library for maritime navigation.")
103 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Library")
104 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
105 set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
106 set(CPACK_MONOLITHIC_INSTALL 1)
107 #set(CPACK_PACKAGE_EXECUTABLES "??" "??")
108 set(CPACK_STRIP_FILES true)
110 # package: debian
111 set(CPACK_DEBIAN_PACKAGE_NAME ${CPACK_DEBIAN_PACKAGE_NAME})
112 set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_CONTACT})
113 set(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${CPACK_PACAKGE_DESCRIPTION})
114 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libstdc++6 (>= 4.9)")
115 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3)")
116 set(CPACK_DEBIAN_PACKAGE_SECTION "misc")
117 if (CMAKE_SIZEOF_VOID_P MATCHES "8")
118         set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
119 else()
120         set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "i386")
121 endif()
123 include(CPack)