-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
130 lines (104 loc) · 3.66 KB
/
Copy pathCMakeLists.txt
File metadata and controls
130 lines (104 loc) · 3.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#
# Copyright Quadrivium LLC
# All Rights Reserved
# SPDX-License-Identifier: Apache-2.0
#
cmake_minimum_required(VERSION 3.12)
option(QTILS_BUILD_TESTS "Build tests" OFF)
if (PACKAGE_MANAGER)
if(PACKAGE_MANAGER NOT MATCHES "^(hunter|vcpkg)$")
message(FATAL_ERROR "PACKAGE_MANAGER must be set to 'hunter', 'vcpkg' or left undefined")
endif ()
else ()
set(PACKAGE_MANAGER "hunter")
if (CMAKE_TOOLCHAIN_FILE)
get_filename_component(ACTUAL_NAME ${CMAKE_TOOLCHAIN_FILE} NAME)
if(ACTUAL_NAME STREQUAL "vcpkg.cmake")
message(STATUS "vcpkg will be used because vcpkg.cmake has found")
set(PACKAGE_MANAGER "vcpkg")
endif ()
endif ()
endif ()
message(STATUS "Selected package manager: ${PACKAGE_MANAGER}")
if (PACKAGE_MANAGER STREQUAL "hunter")
include(cmake/HunterGate.cmake)
HunterGate(
URL https://github.com/qdrvm/hunter/archive/refs/tags/v0.25.3-qdrvm29.tar.gz
SHA1 025920fa980ba81a150deaa534a0248dde25fd54
)
endif ()
if(QTILS_BUILD_TESTS)
if (PACKAGE_MANAGER STREQUAL "vcpkg")
list(APPEND VCPKG_MANIFEST_FEATURES qtils-tests)
endif()
endif()
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.27")
cmake_policy(SET CMP0144 NEW)
endif()
project(qtils LANGUAGES CXX VERSION 0.1.6)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
option(QTILS_ENABLE_ASSERT "Enable assertions" ON)
else()
option(QTILS_ENABLE_ASSERT "Enable assertions" OFF)
endif()
option(FORMAT_ERROR_WITH_FULLTYPE "Use the full type of the category when formatting errors" OFF)
if (PACKAGE_MANAGER STREQUAL "hunter")
hunter_add_package(Boost)
find_package(Boost)
else ()
find_package(Boost REQUIRED COMPONENTS algorithm outcome)
endif ()
if (PACKAGE_MANAGER STREQUAL "hunter")
hunter_add_package(fmt)
endif ()
find_package(fmt CONFIG REQUIRED)
add_library(qtils INTERFACE)
target_link_libraries(qtils INTERFACE
Boost::algorithm
Boost::outcome
fmt::fmt
)
if (QTILS_ENABLE_ASSERT)
target_compile_definitions(qtils INTERFACE QTILS_ENABLE_ASSERT)
endif()
if (FORMAT_ERROR_WITH_FULLTYPE)
target_compile_definitions(qtils INTERFACE FORMAT_ERROR_WITH_FULLTYPE)
endif ()
include(GNUInstallDirs)
target_include_directories(qtils INTERFACE
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
install(DIRECTORY src/qtils
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING PATTERN "*.hpp"
)
install(TARGETS qtils EXPORT qtils-config)
install(EXPORT qtils-config
DESTINATION share/qtils
NAMESPACE qtils::
)
install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_PREFIX}/share/qtils/copyright)
if (QTILS_BUILD_TESTS)
enable_testing()
# since it's hard to check locally for a header-only library, generate a file that includes all headers
# and check that it compiles
file(GLOB_RECURSE headers RELATIVE "${PROJECT_SOURCE_DIR}/src/" CONFIGURE_DEPENDS "${PROJECT_SOURCE_DIR}/src/qtils/*.hpp")
set(qtils_compiles_content "// THIS FILE IS GENERATED AUTOMATICALLY\n")
foreach(file ${headers})
string(APPEND qtils_compiles_content "#include <${file}>\n")
endforeach()
string(APPEND qtils_compiles_content "int main(){}\n")
file(WRITE "${PROJECT_SOURCE_DIR}/test/qtils_compiles.cpp" "${qtils_compiles_content}")
add_executable(qtils_compiles test/qtils_compiles.cpp)
target_link_libraries(qtils_compiles qtils)
# Unit tests
find_package(GTest CONFIG REQUIRED)
set(GTEST_DEPS GTest::gtest_main)
include_directories(src)
add_subdirectory(test)
endif()