1
1
cmake_minimum_required (VERSION 3.4 FATAL_ERROR)
2
+
2
3
PROJECT (sioclient
3
- VERSION 3.1.0
4
- )
4
+ VERSION 3.1.0
5
+ )
5
6
6
7
option (BUILD_SHARED_LIBS "Build the shared library" OFF )
7
8
option (BUILD_UNIT_TESTS "Builds unit tests target" OFF )
9
+ option (USE_SUBMODULES "Use source in local submodules instead of system libraries" OFF )
8
10
9
11
set (MAJOR 1)
10
12
set (MINOR 6)
@@ -14,6 +16,7 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
14
16
set (DEFAULT_BUILD_TYPE "Release" )
15
17
message (STATUS "Setting build type to '${DEFAULT_BUILD_TYPE} ' as none was specified." )
16
18
set (CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE} " CACHE STRING "Choose the type of build." FORCE)
19
+
17
20
# Set the possible values of build type for cmake-gui
18
21
set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo" )
19
22
endif ()
@@ -24,82 +27,144 @@ aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/internal ALL_SRC)
24
27
file (GLOB ALL_HEADERS ${CMAKE_CURRENT_LIST_DIR} /src/*.h)
25
28
26
29
add_definitions (
30
+
27
31
# These will force ASIO to compile without Boost
28
32
-DBOOST_DATE_TIME_NO_LIB
29
33
-DBOOST_REGEX_NO_LIB
30
34
-DASIO_STANDALONE
31
- # These will force WebsocketPP to compile with C++11
35
+
36
+ # These will force sioclient to compile with C++11
32
37
-D_WEBSOCKETPP_CPP11_STL_
33
38
-D_WEBSOCKETPP_CPP11_FUNCTIONAL_
39
+ -D_WEBSOCKETPP_CPP11_TYPE_TRAITS_
40
+ -D_WEBSOCKETPP_CPP11_CHRONO_
34
41
)
35
42
36
43
add_library (sioclient ${ALL_SRC} )
44
+
45
+ if (USE_SUBMODULES)
46
+ set (MODULE_INCLUDE_DIRS
47
+ ${CMAKE_CURRENT_LIST_DIR} /lib/websocketpp
48
+ ${CMAKE_CURRENT_LIST_DIR} /lib/rapidjson/include
49
+ ${CMAKE_CURRENT_LIST_DIR} /lib/asio/asio/include
50
+ )
51
+ else ()
52
+ find_package (websocketpp CONFIG REQUIRED)
53
+ find_package (asio CONFIG REQUIRED)
54
+ find_package (RapidJSON CONFIG REQUIRED)
55
+ target_link_libraries (sioclient PRIVATE websocketpp::websocketpp asio asio::asio rapidjson)
56
+ endif ()
57
+
37
58
target_include_directories (sioclient PUBLIC
38
- ${CMAKE_CURRENT_LIST_DIR} /src
59
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} >
60
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >
39
61
PRIVATE
40
- ${CMAKE_CURRENT_LIST_DIR} /lib/websocketpp
41
- ${CMAKE_CURRENT_LIST_DIR} /lib/rapidjson/include
42
- ${CMAKE_CURRENT_LIST_DIR} /lib/asio/asio/include
62
+ ${MODULE_INCLUDE_DIRS}
43
63
)
44
64
45
- if (CMAKE_VERSION VERSION_GREATER "3.1" )
46
- set_property (TARGET sioclient PROPERTY CXX_STANDARD 11)
47
- set_property (TARGET sioclient PROPERTY CXX_STANDARD_REQUIRED ON )
65
+ if (CMAKE_VERSION VERSION_GREATER "3.1" )
66
+ set_property (TARGET sioclient PROPERTY CXX_STANDARD 11)
67
+ set_property (TARGET sioclient PROPERTY CXX_STANDARD_REQUIRED ON )
48
68
else ()
49
- set_property (TARGET sioclient APPEND_STRING PROPERTY COMPILE_FLAGS "-std=c++11" )
69
+ set_property (TARGET sioclient APPEND_STRING PROPERTY COMPILE_FLAGS "-std=c++11" )
50
70
endif ()
71
+
51
72
if (BUILD_SHARED_LIBS )
52
- set_target_properties (sioclient
53
- PROPERTIES
54
- SOVERSION ${MAJOR}
55
- VERSION ${MAJOR} .${MINOR} .${PATCH}
56
- )
73
+ set_target_properties (sioclient
74
+ PROPERTIES
75
+ SOVERSION ${MAJOR}
76
+ VERSION ${MAJOR} .${MINOR} .${PATCH}
77
+ )
57
78
endif ()
79
+
58
80
list (APPEND TARGET_LIBRARIES sioclient)
59
81
60
82
find_package (OpenSSL)
83
+
61
84
if (OPENSSL_FOUND)
62
- add_library (sioclient_tls ${ALL_SRC} )
63
- target_include_directories (sioclient_tls PUBLIC
64
- ${CMAKE_CURRENT_LIST_DIR} /src
65
- PRIVATE
66
- ${CMAKE_CURRENT_LIST_DIR} /lib/websocketpp
67
- ${CMAKE_CURRENT_LIST_DIR} /lib/rapidjson/include
68
- ${CMAKE_CURRENT_LIST_DIR} /lib/asio/asio/include
69
- ${OPENSSL_INCLUDE_DIR}
70
- )
85
+ add_library (sioclient_tls ${ALL_SRC} )
86
+ target_include_directories (sioclient_tls PUBLIC
87
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} >
88
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >
89
+ PRIVATE
90
+ ${MODULE_INCLUDE_DIRS}
91
+ ${OPENSSL_INCLUDE_DIR}
92
+ )
71
93
72
- if (CMAKE_VERSION VERSION_GREATER "3.1" )
73
- set_property (TARGET sioclient_tls PROPERTY CXX_STANDARD 11)
74
- set_property (TARGET sioclient_tls PROPERTY CXX_STANDARD_REQUIRED ON )
75
- target_link_libraries (sioclient_tls PRIVATE ${OPENSSL_LIBRARIES} )
76
- else ()
77
- set_property (TARGET sioclient_tls APPEND_STRING PROPERTY COMPILE_FLAGS "-std=c++11" )
78
- endif ()
79
- target_compile_definitions (sioclient_tls PRIVATE -DSIO_TLS)
80
- if (BUILD_SHARED_LIBS )
81
- set_target_properties (sioclient_tls
82
- PROPERTIES
83
- SOVERSION ${MAJOR}
84
- VERSION ${MAJOR} .${MINOR} .${PATCH}
85
- )
86
- endif ()
87
- list (APPEND TARGET_LIBRARIES sioclient_tls)
94
+ set_property (TARGET sioclient_tls PROPERTY CXX_STANDARD 11)
95
+ set_property (TARGET sioclient_tls PROPERTY CXX_STANDARD_REQUIRED ON )
96
+
97
+ target_link_libraries (sioclient_tls PRIVATE OpenSSL::SSL OpenSSL::Crypto)
98
+ if (NOT USE_SUBMODULES)
99
+ target_link_libraries (sioclient_tls PRIVATE websocketpp::websocketpp asio asio::asio rapidjson)
100
+ endif ()
88
101
102
+ target_compile_definitions (sioclient_tls PRIVATE -DSIO_TLS)
103
+
104
+ if (BUILD_SHARED_LIBS )
105
+ set_target_properties (sioclient_tls
106
+ PROPERTIES
107
+ SOVERSION ${MAJOR}
108
+ VERSION ${MAJOR} .${MINOR} .${PATCH}
109
+ )
110
+ endif ()
111
+
112
+ list (APPEND TARGET_LIBRARIES sioclient_tls)
89
113
endif ()
90
114
115
+ export (PACKAGE sioclient)
116
+
91
117
include (GNUInstallDirs)
92
118
93
- install (FILES ${ALL_HEADERS}
119
+ install (FILES ${ALL_HEADERS}
94
120
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
95
121
)
96
122
97
- install (TARGETS ${TARGET_LIBRARIES}
98
- DESTINATION ${CMAKE_INSTALL_LIBDIR}
123
+ install (TARGETS ${TARGET_LIBRARIES} EXPORT sioclientTargets
124
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
125
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
126
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
127
+ )
128
+
129
+ # === generate a CMake Config File ===
130
+ include (CMakePackageConfigHelpers)
131
+ set (ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR} /cmake/sioclient)
132
+ string (REGEX REPLACE "([^;]+)" "find_dependency(\\ 1)" _find_dependency_calls "${_package_dependencies} " )
133
+ string (REPLACE ";" "\n " _find_dependency_calls "${_find_dependency_calls} " )
134
+
135
+ write_basic_package_version_file(
136
+ "${CMAKE_CURRENT_BINARY_DIR} /sioclient/sioclientConfigVersion.cmake"
137
+ VERSION ${sioclient_VERSION}
138
+ COMPATIBILITY AnyNewerVersion
139
+ )
140
+
141
+ export (EXPORT sioclientTargets
142
+ FILE "${CMAKE_CURRENT_BINARY_DIR} /sioclient/sioclientTargets.cmake"
143
+ NAMESPACE sioclient::
144
+ )
145
+
146
+ configure_package_config_file(sioclientConfig.cmake.in
147
+ "${CMAKE_CURRENT_BINARY_DIR} /sioclient/sioclientConfig.cmake"
148
+ INSTALL_DESTINATION "${ConfigPackageLocation} "
149
+ )
150
+
151
+ install (EXPORT sioclientTargets
152
+ NAMESPACE
153
+ sioclient::
154
+ DESTINATION
155
+ ${ConfigPackageLocation}
156
+ )
157
+ install (
158
+ FILES
159
+ "${CMAKE_CURRENT_BINARY_DIR} /sioclient/sioclientConfig.cmake"
160
+ "${CMAKE_CURRENT_BINARY_DIR} /sioclient/sioclientConfigVersion.cmake"
161
+ "${CMAKE_CURRENT_BINARY_DIR} /sioclient/sioclientConfigTargets.cmake"
162
+ DESTINATION
163
+ ${ConfigPackageLocation}
99
164
)
100
165
101
166
if (BUILD_UNIT_TESTS)
102
- message (STATUS "Building with unit test support." )
103
- enable_testing ()
104
- add_subdirectory (test )
167
+ message (STATUS "Building with unit test support." )
168
+ enable_testing ()
169
+ add_subdirectory (test )
105
170
endif ()
0 commit comments