forked from karastojko/mailio
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
157 lines (134 loc) · 5.96 KB
/
Copy pathCMakeLists.txt
File metadata and controls
157 lines (134 loc) · 5.96 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
cmake_minimum_required(VERSION "3.30.0")
if("${CMAKE_CURRENT_BINARY_DIR}/" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/")
message(FATAL_ERROR "In-source builds are not allowed.")
endif()
# General
project(
"mailio"
DESCRIPTION "Cross-platform MIME library for SMTP, POP3, and IMAP protocols."
HOMEPAGE_URL "https://github.com/karastojko/mailio"
LANGUAGES "CXX"
VERSION "0.26.0")
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Modules
include("CMakeDependentOption")
include("CMakePackageConfigHelpers")
include("GenerateExportHeader")
include("GNUInstallDirs")
# Options
option(BUILD_SHARED_LIBS "Turn on to build mailio as a shared library. When off mailio is build as a static library." ON)
option(MAILIO_BUILD_DOCUMENTATION "Turn on to build doxygen based documentation." OFF)
option(MAILIO_BUILD_EXAMPLES "Turn on to build examples." ON)
option(MAILIO_BUILD_LATEX_DOCUMENTATION "Turn on to build latex documentation." OFF)
option(MAILIO_BUILD_TESTS "Turn on to build the tests." ON)
option(MAILIO_DYN_LINK_TESTS "Turn on to dynamically link the tests.")
if(${MAILIO_BUILD_LATEX_DOCUMENTATION} AND NOT ${MAILIO_BUILD_DOCUMENTATION})
message(FATAL_ERROR "LaTeX documentation requires documentation.")
endif()
if(${MAILIO_DYN_LINK_TESTS} AND NOT ${MAILIO_BUILD_TESTS})
message(FATAL_ERROR "Tests with dynamic linking require tests.")
endif()
# Dependencies
if(${WIN32})
set(Boost_USE_STATIC_LIBS ON)
endif()
find_package("Boost" REQUIRED COMPONENTS "date_time" "regex")
find_package("OpenSSL" REQUIRED COMPONENTS "SSL")
if(${MAILIO_BUILD_DOCUMENTATION})
find_package(
"Doxygen" REQUIRED
COMPONENTS "doxygen"
OPTIONAL_COMPONENTS "dot")
endif()
# Target
set(PROJECT_SOURCES
"${CMAKE_CURRENT_SOURCE_DIR}/src/base64.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/binary.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/bit7.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/bit8.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/codec.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/dialog.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/imap.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/mailboxes.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/message.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/mime.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/percent.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/pop3.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/quoted_printable.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/q_codec.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/smtp.cpp")
add_library("${PROJECT_NAME}" "${PROJECT_SOURCES}")
# Headers
target_include_directories("${PROJECT_NAME}" PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/>)
target_include_directories("${PROJECT_NAME}" PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/>)
# Link libraries
target_link_libraries("${PROJECT_NAME}" PUBLIC "Boost::date_time" "Boost::regex")
target_link_libraries("${PROJECT_NAME}" PUBLIC "OpenSSL::SSL")
if(${MINGW})
target_link_libraries("${PROJECT_NAME}" PUBLIC "-lws2_32")
endif()
# Compile options
if(${MSVC})
target_compile_options("${PROJECT_NAME}" PRIVATE "/W2" "/WX")
else()
target_compile_options("${PROJECT_NAME}" PRIVATE "-Wall" "-Wextra" "-Wpedantic")
endif()
# Documentation
if(${MAILIO_BUILD_DOCUMENTATION})
if(${MAILIO_BUILD_LATEX_DOCUMENTATION})
set(DOXYGEN_GENERATE_LATEX "YES")
else()
set(DOXYGEN_GENERATE_LATEX "NO")
endif()
set(DOXYGEN_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/docs/${PROJECT_NAME}/")
doxygen_add_docs("${PROJECT_NAME}-documentation" "${CMAKE_CURRENT_SOURCE_DIR}/include/" ALL
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/")
endif()
# Tests
if(${MAILIO_BUILD_TESTS})
enable_testing()
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/test/")
endif()
# Examples
if(${MAILIO_BUILD_EXAMPLES})
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/examples/")
endif()
# Installation
generate_export_header("${PROJECT_NAME}" EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/export.hpp")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc"
@ONLY)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/include/version.hpp.in" "${CMAKE_CURRENT_BINARY_DIR}/version.hpp")
install(
TARGETS "${PROJECT_NAME}"
EXPORT "${PROJECT_NAME}-export"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/"
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/"
INCLUDES
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/")
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/${PROJECT_NAME}/"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/export.hpp" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/version.hpp" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/")
# Target installation
install(
EXPORT "${PROJECT_NAME}-export"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/"
FILE "${PROJECT_NAME}-targets.cmake"
NAMESPACE "${PROJECT_NAME}::")
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/")
write_basic_package_version_file(
"${PROJECT_NAME}-config-version.cmake"
COMPATIBILITY SameMajorVersion
VERSION "${PROJECT_VERSION}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/")