-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
210 lines (176 loc) · 7.6 KB
/
CMakeLists.txt
File metadata and controls
210 lines (176 loc) · 7.6 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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
cmake_minimum_required(VERSION 3.0)
# Define Windows toolchain by default if not provided; must go before project definition
if (NOT DEFINED CMAKE_TOOLCHAIN_FILE)
if (WIN32)
set(CMAKE_TOOLCHAIN_FILE "cmake/WindowsToolchain.cmake" CACHE PATH "Windows toolchain file")
endif ()
endif ()
project(easyhttpcpp)
option(EASYHTTPCPP_VERBOSE_MESSAGES "Enable informational messages during configure" OFF)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
if (WIN32)
if (NOT FORCE_SHAREDLIB)
set(STATIC_POSTFIX "md" CACHE STRING "Set static library postfix" FORCE)
else ()
set(STATIC_POSTFIX "" CACHE STRING "Set static library postfix" FORCE)
endif ()
else ()
set(STATIC_POSTFIX "" CACHE STRING "Set static library postfix" FORCE)
endif ()
# For Debug build types, append a "d" to the library names.
set(CMAKE_DEBUG_POSTFIX "${STATIC_POSTFIX}d" CACHE STRING "Set debug library postfix" FORCE)
# set default build type to Release
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Project's CMAKE_BUILD_TYPE" FORCE)
endif ()
include(DefineProjectVersion)
include(DefineProjectMacros)
#############################################################
# various library configurations
option(ENABLE_TESTS
"Set to OFF|ON (default is ON) to control building tests (requires GTest)" OFF)
option(ENABLE_DOCS
"Set to OFF|ON (default is ON) to control building api docs (requires Doxygen)" OFF)
option(FORCE_SHAREDLIB
"Set to OFF|ON (default is ON) to force build project as SHARED library" OFF)
if (FORCE_SHAREDLIB)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(LIB_MODE SHARED)
if (EASYHTTPCPP_VERBOSE_MESSAGES)
message(STATUS "Building shared ${CMAKE_PROJECT_NAME} libraries")
endif ()
else ()
set(LIB_MODE STATIC)
if (EASYHTTPCPP_VERBOSE_MESSAGES)
message(STATUS "Building static ${CMAKE_PROJECT_NAME} libraries")
endif ()
endif ()
#############################################################
# build & install library target
set(LIBRARY_TARGET_NAME "easyhttp")
# dependent libraries
if (WIN32)
find_package(Poco REQUIRED Foundation Data DataSQLite Net NetSSLWin CONFIG)
else ()
find_package(OpenSSL REQUIRED)
find_package(Poco REQUIRED Foundation Data DataSQLite Net NetSSL Crypto CONFIG)
endif ()
# sources
if (WIN32)
set(PLATFORM_SPECIFIC_SRC_DIR_NAME "windows")
else ()
# assume unix
set(PLATFORM_SPECIFIC_SRC_DIR_NAME "unix")
endif ()
file(GLOB COMMON_SRCS_G "src/common/*.cpp")
file(GLOB COMMON_SRCS_PLAT_G "src/common/${PLATFORM_SPECIFIC_SRC_DIR_NAME}/*.cpp")
file(GLOB DB_SRCS_G "src/db/*.cpp")
file(GLOB DB_SRCS_PLAT_G "src/db/${PLATFORM_SPECIFIC_SRC_DIR_NAME}/*.cpp")
file(GLOB MESSAGEDIGEST_SRCS_G "src/messagedigest/*.cpp")
file(GLOB MESSAGEDIGEST_SRCS_PLAT_G "src/messagedigest/${PLATFORM_SPECIFIC_SRC_DIR_NAME}/*.cpp")
file(GLOB EXECUTORSERVICE_SRCS_G "src/executorservice/*.cpp")
file(GLOB EXECUTORSERVICE_SRCS_PLAT_G "src/executorservice/${PLATFORM_SPECIFIC_SRC_DIR_NAME}/*.cpp")
file(GLOB HTTP_SRCS_G "src/*.cpp")
file(GLOB HTTP_SRCS_PLAT_G "src/${PLATFORM_SPECIFIC_SRC_DIR_NAME}/*.cpp")
list(APPEND SRCS
${COMMON_SRCS_G} ${COMMON_SRCS_PLAT_G}
${DB_SRCS_G} ${DB_SRCS_PLAT_G}
${MESSAGEDIGEST_SRCS_G} ${MESSAGEDIGEST_SRCS_PLAT_G}
${EXECUTORSERVICE_SRCS_G} ${EXECUTORSERVICE_SRCS_PLAT_G}
${HTTP_SRCS_G} ${HTTP_SRCS_PLAT_G})
file(GLOB_RECURSE HDRS_G "include/*.h")
list(APPEND SRCS ${HDRS_G})
add_library(${LIBRARY_TARGET_NAME} ${LIB_MODE} ${SRCS})
set_target_properties(${LIBRARY_TARGET_NAME}
PROPERTIES
VERSION ${PROJECT_VERSION} SOVERSION ${SHARED_LIBRARY_VERSION}
OUTPUT_NAME ${LIBRARY_TARGET_NAME}
)
target_link_libraries(${LIBRARY_TARGET_NAME}
${Poco_LIBRARIES}
${OPENSSL_SSL_LIBRARY}
${OPENSSL_CRYPTO_LIBRARY})
target_include_directories(${LIBRARY_TARGET_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/src/${PLATFORM_SPECIFIC_SRC_DIR_NAME}
${CMAKE_CURRENT_SOURCE_DIR}/src/common/${PLATFORM_SPECIFIC_SRC_DIR_NAME}
${CMAKE_CURRENT_SOURCE_DIR}/src/db/${PLATFORM_SPECIFIC_SRC_DIR_NAME}
${CMAKE_CURRENT_SOURCE_DIR}/src/messagedigest/${PLATFORM_SPECIFIC_SRC_DIR_NAME}
${CMAKE_CURRENT_SOURCE_DIR}/src/executorservice/${PLATFORM_SPECIFIC_SRC_DIR_NAME}
)
easyhttpcpp_install(${LIBRARY_TARGET_NAME})
easyhttpcpp_generate_package(${LIBRARY_TARGET_NAME})
#############################################################
# build & install test target
if (ENABLE_TESTS)
include(CTest)
enable_testing()
add_subdirectory(tests)
if (EASYHTTPCPP_VERBOSE_MESSAGES)
message(STATUS "Building with tests.")
endif ()
else ()
if (EASYHTTPCPP_VERBOSE_MESSAGES)
message(STATUS "Building without tests.")
endif ()
endif ()
#############################################################
# build & install docs
if (ENABLE_DOCS)
if (EASYHTTPCPP_VERBOSE_MESSAGES)
message(STATUS "Building with docs.")
endif ()
find_package(Doxygen REQUIRED)
if (DOXYGEN_FOUND)
set(DOC_INPUT_DIRS "${PROJECT_SOURCE_DIR}/include")
add_subdirectory(doc)
endif ()
else ()
if (EASYHTTPCPP_VERBOSE_MESSAGES)
message(STATUS "Building without docs.")
endif ()
endif ()
#############################################################
# cmake config files
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion
)
configure_file(cmake/DefineProjectConfig.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}/${CMAKE_PROJECT_NAME}Config.cmake" @ONLY)
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}/${CMAKE_PROJECT_NAME}Config.cmake
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
DESTINATION
"lib/cmake/${CMAKE_PROJECT_NAME}"
COMPONENT
Devel
)
#############################################################
# verbose messages
if (EASYHTTPCPP_VERBOSE_MESSAGES)
message(STATUS "CMake ${CMAKE_VERSION} successfully configured ${PROJECT_NAME} using ${CMAKE_GENERATOR} generator")
message(STATUS "Installation target path: ${CMAKE_INSTALL_PREFIX}")
message(STATUS "LD_LIBRARY_PATH:=${LD_LIBRARY_PATH}")
message(STATUS "CMAKE_C_FLAGS:=${CMAKE_C_FLAGS}")
message(STATUS "CMAKE_C_FLAGS_DEBUG:=${CMAKE_C_FLAGS_DEBUG}")
message(STATUS "CMAKE_C_FLAGS_RELEASE:=${CMAKE_C_FLAGS_RELEASE}")
message(STATUS "CMAKE_C_FLAGS_MINSIZEREL:=${CMAKE_C_FLAGS_MINSIZEREL}")
message(STATUS "CMAKE_C_FLAGS_RELWITHDEBINFO:=${CMAKE_C_FLAGS_RELWITHDEBINFO}")
message(STATUS "")
message(STATUS "")
message(STATUS "CMAKE_CXX_FLAGS:=${CMAKE_CXX_FLAGS}")
message(STATUS "CMAKE_CXX_FLAGS_DEBUG:=${CMAKE_CXX_FLAGS_DEBUG}")
message(STATUS "CMAKE_CXX_FLAGS_RELEASE:=${CMAKE_CXX_FLAGS_RELEASE}")
message(STATUS "CMAKE_CXX_FLAGS_MINSIZEREL:=${CMAKE_CXX_FLAGS_MINSIZEREL}")
message(STATUS "CMAKE_CXX_FLAGS_RELWITHDEBINFO:=${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
endif ()