|
1 | | -project(MARC-FS) |
2 | | -cmake_minimum_required(VERSION 2.8) |
3 | | -aux_source_directory(. SRC_LIST) |
| 1 | +cmake_minimum_required(VERSION 3.3) |
| 2 | + |
| 3 | +include("cmake/HunterGate.cmake") |
| 4 | +HunterGate( |
| 5 | + URL "https://github.com/rusdevops/hunter/archive/v0.19.109.6.tar.gz" |
| 6 | + SHA1 "1d5ec3d14107ef4fd5ac40af1ab9aa82680fdbe3" |
| 7 | +) |
| 8 | + |
| 9 | +set(MARC_VERSION_MAJOR 0) |
| 10 | +set(MARC_VERSION_MINOR 4) |
| 11 | +set(MARC_VERSION_PATCH 0) |
| 12 | +set(MARC_VERSION ${MARC_VERSION_MAJOR}.${MARC_VERSION_MINOR}.${MARC_VERSION_PATCH}) |
| 13 | + |
| 14 | +project(MARC VERSION ${MARC_VERSION}) |
4 | 15 |
|
5 | | -# C++ standard |
6 | 16 | set(CMAKE_CXX_STANDARD 14) |
7 | | -MESSAGE(STATUS "Cmake system: " ${CMAKE_SYSTEM} ) |
8 | | -MESSAGE(STATUS "Cmake arch: " ${CMAKE_SYSTEM_PROCESSOR} ) |
9 | | - |
10 | | -# custom compile flags |
11 | | -set(FUSE_REQUIRED_FLAGS "-D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26") |
12 | | -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FUSE_REQUIRED_FLAGS}") |
13 | | - |
14 | | -# modules |
15 | | -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/CMakeModules") |
16 | | - |
17 | | -# # |
18 | | -# internal libs and packages # |
19 | | -# # |
20 | | - |
21 | | -# Curl C++ bindings |
22 | | -ADD_SUBDIRECTORY(contrib/curlcpp EXCLUDE_FROM_ALL) |
23 | | -INCLUDE_DIRECTORIES(${CURLCPP_SOURCE_DIR}/include) |
24 | | - |
25 | | -# Googletest bindings |
26 | | -ADD_SUBDIRECTORY(contrib/googletest/googletest EXCLUDE_FROM_ALL) |
27 | | -INCLUDE_DIRECTORIES(${gtest_SOURCE_DIR}/include) |
28 | | - |
29 | | -# # |
30 | | -# external libs and packages # |
31 | | -# # |
32 | | - |
33 | | -# FUSE |
34 | | -find_package(FUSE REQUIRED) |
35 | | -if(NOT FUSE_FOUND) |
36 | | - message(SEND_ERROR "Failed to find fuse") |
37 | | - return() |
38 | | -else() |
39 | | - include_directories(${FUSE_INCLUDE_DIR}) |
40 | | -endif() |
| 17 | +set(CMAKE_CXX_STANDARD_REQUIRED ON) |
41 | 18 |
|
42 | | -# JSONCPP |
43 | | -find_package(JSONCPP REQUIRED) |
44 | | -if (NOT JSONCPP_FOUND) |
45 | | - message(SEND_ERROR "Failed to find jsoncpp") |
46 | | - return() |
47 | | -else() |
48 | | - include_directories(${JSONCPP_INCLUDE_DIR}) |
49 | | -endif() |
| 19 | +option(BUILD_TESTS "Build tests" OFF) |
50 | 20 |
|
51 | | -# JEMALLOC - optional |
52 | | -find_package(JEMALLOC) |
53 | | -if(JEMALLOC_FOUND) |
54 | | - include_directories(${JEMALLOC_INCLUDE_DIRS}) |
55 | | -else() |
56 | | - message(WARNING "jemalloc not found but highly recommended") |
57 | | -endif() |
| 21 | +hunter_add_package(CURLCPP) |
| 22 | +find_package(CURLCPP CONFIG REQUIRED) |
| 23 | + |
| 24 | +hunter_add_package(jsoncpp) |
| 25 | +find_package(jsoncpp CONFIG REQUIRED) |
58 | 26 |
|
59 | | -# first, run tests |
60 | | -set(SRC_NO_MAIN ${SRC_LIST}) |
61 | | -list(REMOVE_ITEM SRC_NO_MAIN ./main.cpp) |
62 | | -add_executable(apitest ${SRC_NO_MAIN} tests/apitest.cpp) |
63 | | -target_link_libraries(apitest |
64 | | - gtest_main |
65 | | - curlcpp |
66 | | - ${JSONCPP_LIBRARIES} |
67 | | - ${FUSE_LIBRARIES}) |
68 | | -add_test(NAME rest_api_test COMMAND apitest) |
69 | | - |
70 | | -# final binary |
71 | | -add_executable(marcfs ${SRC_LIST}) |
72 | | -target_link_libraries(marcfs |
73 | | - curlcpp |
74 | | - pthread |
75 | | - ${JSONCPP_LIBRARIES} |
76 | | - ${FUSE_LIBRARIES} |
| 27 | + |
| 28 | +file(GLOB ${PROJECT_NAME}_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/sources/*.cpp") |
| 29 | +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/) |
| 30 | + |
| 31 | +add_library(libmarc ${${PROJECT_NAME}_SOURCES}) |
| 32 | +set_target_properties(libmarc PROPERTIES PREFIX "") |
| 33 | +set_target_properties(libmarc PROPERTIES IMPORT_PREFIX "") |
| 34 | + |
| 35 | + |
| 36 | +target_link_libraries(libmarc jsoncpp_lib_static CURLCPP::libcurlcpp) |
| 37 | + |
| 38 | +target_include_directories(libmarc PUBLIC |
| 39 | + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |
| 40 | + $<INSTALL_INTERFACE:include> |
77 | 41 | ) |
78 | 42 |
|
79 | | -# optional libs |
80 | | -if(JEMALLOC_FOUND) |
81 | | - target_link_libraries(marcfs ${JEMALLOC_LIBRARIES}) |
| 43 | +# Install |
| 44 | + |
| 45 | +set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") |
| 46 | + |
| 47 | +set(CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}") |
| 48 | +set(INCLUDE_INSTALL_DIR "include") |
| 49 | + |
| 50 | +set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake") |
| 51 | +set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}Config.cmake") |
| 52 | +set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") |
| 53 | +set(NAMESPACE "${PROJECT_NAME}::") |
| 54 | + |
| 55 | +include(CMakePackageConfigHelpers) |
| 56 | +write_basic_package_version_file( |
| 57 | + "${VERSION_CONFIG}" COMPATIBILITY SameMajorVersion |
| 58 | +) |
| 59 | + |
| 60 | +configure_package_config_file( |
| 61 | + "${PROJECT_SOURCE_DIR}/cmake/Config.cmake.in" |
| 62 | + "${PROJECT_CONFIG}" |
| 63 | + INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}" |
| 64 | +) |
| 65 | + |
| 66 | +install(TARGETS libmarc |
| 67 | + EXPORT "${TARGETS_EXPORT_NAME}" |
| 68 | + RUNTIME DESTINATION bin |
| 69 | + ARCHIVE DESTINATION lib |
| 70 | + LIBRARY DESTINATION lib |
| 71 | +) |
| 72 | + |
| 73 | +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION include) |
| 74 | + |
| 75 | +install( |
| 76 | + FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}" |
| 77 | + DESTINATION "${CONFIG_INSTALL_DIR}" |
| 78 | + ) |
| 79 | + |
| 80 | +install(EXPORT "${TARGETS_EXPORT_NAME}" |
| 81 | + NAMESPACE "${NAMESPACE}" |
| 82 | + DESTINATION "${CONFIG_INSTALL_DIR}" |
| 83 | +) |
| 84 | + |
| 85 | +if(BUILD_TESTS) |
| 86 | + hunter_add_package(GTest) |
| 87 | + find_package(GTest CONFIG REQUIRED) |
| 88 | + enable_testing() |
| 89 | + file(GLOB ${PROJECT_NAME}_TEST_SOURCES tests/*.cpp) |
| 90 | + add_executable(check ${${PROJECT_NAME}_TEST_SOURCES}) |
| 91 | + target_link_libraries(check libmarc GTest::main) |
| 92 | + add_test(NAME check COMMAND check) |
82 | 93 | endif() |
83 | 94 |
|
84 | | -install(TARGETS marcfs RUNTIME DESTINATION bin) |
| 95 | + |
| 96 | + |
0 commit comments