Skip to content

Commit 973baa3

Browse files
geiserijmigual
andauthored
build: Support vcpkg - Update cmake for system install (#367)
* Update cmake for system install * remove tooling hack * CMake 3.4 is required so this is not needed Co-authored-by: Joan Marcè i Igual <[email protected]> * Use submodules on ci * Update .github/workflows/ci.yml * Update CMakeLists.txt Co-authored-by: Joan Marcè i Igual <[email protected]>
1 parent 9bca702 commit 973baa3

File tree

3 files changed

+120
-48
lines changed

3 files changed

+120
-48
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@ jobs:
2323
submodule_update: ON
2424
run_tests: ON
2525
unit_test_build: -DBUILD_UNIT_TESTS=ON
26-
cmake_args: -DCMAKE_CXX_FLAGS=-std=c++11
26+
cmake_args: -DCMAKE_CXX_FLAGS=-std=c++11;-DUSE_SUBMODULES=ON

CMakeLists.txt

+112-47
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
cmake_minimum_required(VERSION 3.4 FATAL_ERROR)
2+
23
PROJECT(sioclient
3-
VERSION 3.1.0
4-
)
4+
VERSION 3.1.0
5+
)
56

67
option(BUILD_SHARED_LIBS "Build the shared library" OFF)
78
option(BUILD_UNIT_TESTS "Builds unit tests target" OFF)
9+
option(USE_SUBMODULES "Use source in local submodules instead of system libraries" OFF)
810

911
set(MAJOR 1)
1012
set(MINOR 6)
@@ -14,6 +16,7 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
1416
set(DEFAULT_BUILD_TYPE "Release")
1517
message(STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.")
1618
set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}" CACHE STRING "Choose the type of build." FORCE)
19+
1720
# Set the possible values of build type for cmake-gui
1821
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
1922
endif()
@@ -24,82 +27,144 @@ aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/internal ALL_SRC)
2427
file(GLOB ALL_HEADERS ${CMAKE_CURRENT_LIST_DIR}/src/*.h)
2528

2629
add_definitions(
30+
2731
# These will force ASIO to compile without Boost
2832
-DBOOST_DATE_TIME_NO_LIB
2933
-DBOOST_REGEX_NO_LIB
3034
-DASIO_STANDALONE
31-
# These will force WebsocketPP to compile with C++11
35+
36+
# These will force sioclient to compile with C++11
3237
-D_WEBSOCKETPP_CPP11_STL_
3338
-D_WEBSOCKETPP_CPP11_FUNCTIONAL_
39+
-D_WEBSOCKETPP_CPP11_TYPE_TRAITS_
40+
-D_WEBSOCKETPP_CPP11_CHRONO_
3441
)
3542

3643
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+
3758
target_include_directories(sioclient PUBLIC
38-
${CMAKE_CURRENT_LIST_DIR}/src
59+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
60+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
3961
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}
4363
)
4464

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)
4868
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")
5070
endif()
71+
5172
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+
)
5778
endif()
79+
5880
list(APPEND TARGET_LIBRARIES sioclient)
5981

6082
find_package(OpenSSL)
83+
6184
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+
)
7193

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()
88101

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)
89113
endif()
90114

115+
export(PACKAGE sioclient)
116+
91117
include(GNUInstallDirs)
92118

93-
install(FILES ${ALL_HEADERS}
119+
install(FILES ${ALL_HEADERS}
94120
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
95121
)
96122

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}
99164
)
100165

101166
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)
105170
endif()

sioclientConfig.cmake.in

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
@PACKAGE_INIT@
3+
4+
include(CMakeFindDependencyMacro)
5+
@_find_dependency_calls@
6+
7+
include("${CMAKE_CURRENT_LIST_DIR}/sioclientTargets.cmake")

0 commit comments

Comments
 (0)