From ef380f7fff2c50b5f5c8bd332855d7d404787f3b Mon Sep 17 00:00:00 2001 From: Peter Thorson Date: Wed, 29 Jul 2015 08:57:56 -0400 Subject: [PATCH] Add CMake build support for examples and tests, zlib dependencies --- .gitignore | 2 + CMakeLists.txt | 5 +++ changelog.md | 3 ++ cmake/CMakeHelpers.cmake | 6 ++- examples/debug_client/CMakeLists.txt | 5 +++ examples/dev/CMakeLists.txt | 10 ++--- test/endpoint/CMakeLists.txt | 5 +++ test/extension/CMakeLists.txt | 24 +++++++---- test/http/CMakeLists.txt | 5 +-- test/message_buffer/CMakeLists.txt | 21 ++++++---- test/processors/CMakeLists.txt | 63 ++++++++++++++++++++++++---- test/random/CMakeLists.txt | 21 ++++++---- test/roles/CMakeLists.txt | 21 ++++++---- test/transport/CMakeLists.txt | 57 +++++++++++++++++++++++-- test/utility/CMakeLists.txt | 57 +++++++++++++++++++++---- 15 files changed, 245 insertions(+), 60 deletions(-) diff --git a/.gitignore b/.gitignore index 558a1b3..a7ec1f5 100644 --- a/.gitignore +++ b/.gitignore @@ -88,3 +88,5 @@ examples/wsperf/wsperf_client *.vcxproj.filters *.user install +Makefile +bin diff --git a/CMakeLists.txt b/CMakeLists.txt index d11f40c..4f32738 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -186,6 +186,10 @@ if (BUILD_TESTS OR BUILD_EXAMPLES) set (Boost_USE_STATIC_LIBS FALSE) endif () + if (BOOST_STATIC) + set (Boost_USE_STATIC_LIBS TRUE) + endif () + set (Boost_FIND_REQUIRED TRUE) set (Boost_FIND_QUIETLY TRUE) set (Boost_DEBUG FALSE) @@ -218,6 +222,7 @@ if (BUILD_TESTS OR BUILD_EXAMPLES) endif () find_package(OpenSSL) + find_package(ZLIB) endif() ############ Add projects diff --git a/changelog.md b/changelog.md index 8c63cbc..2b57a77 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,8 @@ HEAD - Improvement: Better automatic std::chrono feature detection for Visual Studio +- Improvement: Major refactoring to bundled CMake build system. CMake can now be used to + build all of the examples and the test suite. Thank you Thijs Wenker for a significant + portion of this code. #378, #435, #449 0.6.0 - MINOR BREAKING TRANSPORT POLICY CHANGE: Custom transport policies will now be diff --git a/cmake/CMakeHelpers.cmake b/cmake/CMakeHelpers.cmake index ab4bc99..a3e4973 100644 --- a/cmake/CMakeHelpers.cmake +++ b/cmake/CMakeHelpers.cmake @@ -13,7 +13,7 @@ macro (print_used_build_config) message ("") message (STATUS "WEBSOCKETPP_BOOST_LIBS = ${WEBSOCKETPP_BOOST_LIBS}") message (STATUS "WEBSOCKETPP_PLATFORM_LIBS = ${WEBSOCKETPP_PLATFORM_LIBS}") - message (STATUS "WEBSOCKETPP_PLATFORM_TSL_LIBS = ${WEBSOCKETPP_PLATFORM_TSL_LIBS}") + message (STATUS "WEBSOCKETPP_PLATFORM_TLS_LIBS = ${WEBSOCKETPP_PLATFORM_TLS_LIBS}") message ("") endmacro () @@ -77,6 +77,10 @@ macro (link_openssl) target_link_libraries (${TARGET_NAME} ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY}) endmacro () +macro (link_zlib) + target_link_libraries (${TARGET_NAME} ${ZLIB_LIBRARIES}) +endmacro () + macro (include_subdirs PARENT) file (GLOB SDIRS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${PARENT}/*") foreach (SUBDIR ${SDIRS}) diff --git a/examples/debug_client/CMakeLists.txt b/examples/debug_client/CMakeLists.txt index 5f31108..651208a 100644 --- a/examples/debug_client/CMakeLists.txt +++ b/examples/debug_client/CMakeLists.txt @@ -2,11 +2,16 @@ file (GLOB SOURCE_FILES *.cpp) file (GLOB HEADER_FILES *.hpp) +if (OPENSSL_FOUND) + init_target (debug_client) build_executable (${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES}) link_boost () +link_openssl() final_target () set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "examples") + +endif() \ No newline at end of file diff --git a/examples/dev/CMakeLists.txt b/examples/dev/CMakeLists.txt index 810da8b..f820c6b 100644 --- a/examples/dev/CMakeLists.txt +++ b/examples/dev/CMakeLists.txt @@ -2,11 +2,11 @@ file (GLOB SOURCE_FILES *.cpp) file (GLOB HEADER_FILES *.hpp) -init_target (dev) +#init_target (dev) -build_executable (${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES}) +#build_executable (${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES}) -link_boost () -final_target () +#link_boost () +#final_target () -set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "examples") +#set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "examples") diff --git a/test/endpoint/CMakeLists.txt b/test/endpoint/CMakeLists.txt index 22de20f..5e6cb4c 100644 --- a/test/endpoint/CMakeLists.txt +++ b/test/endpoint/CMakeLists.txt @@ -2,11 +2,16 @@ file (GLOB SOURCE_FILES *.cpp) file (GLOB HEADER_FILES *.hpp) +if (OPENSSL_FOUND) + init_target (test_endpoint) build_executable (${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES}) link_boost () +link_openssl () final_target () set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +endif() \ No newline at end of file diff --git a/test/extension/CMakeLists.txt b/test/extension/CMakeLists.txt index f4e36d7..df4acbe 100644 --- a/test/extension/CMakeLists.txt +++ b/test/extension/CMakeLists.txt @@ -1,12 +1,22 @@ - -file (GLOB SOURCE_FILES *.cpp) -file (GLOB HEADER_FILES *.hpp) +# Extension Tests +file (GLOB SOURCE extension.cpp) init_target (test_extension) - -build_executable (${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES}) - +build_executable (${TARGET_NAME} ${SOURCE}) link_boost () final_target () - set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +if ( ZLIB_FOUND ) + +# Permessage-deflate tests +file (GLOB SOURCE permessage_deflate.cpp) + +init_target (test_permessage_deflate) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +link_zlib() +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +endif ( ZLIB_FOUND ) \ No newline at end of file diff --git a/test/http/CMakeLists.txt b/test/http/CMakeLists.txt index c1f011e..dd9a4ce 100644 --- a/test/http/CMakeLists.txt +++ b/test/http/CMakeLists.txt @@ -1,10 +1,9 @@ -file (GLOB SOURCE_FILES *.cpp) -file (GLOB HEADER_FILES *.hpp) +file (GLOB SOURCE_FILES parser.cpp) init_target (test_http) -build_executable (${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES}) +build_executable (${TARGET_NAME} ${SOURCE_FILES}) link_boost () final_target () diff --git a/test/message_buffer/CMakeLists.txt b/test/message_buffer/CMakeLists.txt index e169204..7191989 100644 --- a/test/message_buffer/CMakeLists.txt +++ b/test/message_buffer/CMakeLists.txt @@ -1,12 +1,17 @@ +# Test alloc message buffer strategy +file (GLOB SOURCE alloc.cpp) -file (GLOB SOURCE_FILES *.cpp) -file (GLOB HEADER_FILES *.hpp) - -init_target (test_message_buffer) - -build_executable (${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES}) - +init_target (test_message_alloc) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +# Test message buffers +file (GLOB SOURCE message.cpp) + +init_target (test_message_buffer) +build_executable (${TARGET_NAME} ${SOURCE}) link_boost () final_target () - set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") diff --git a/test/processors/CMakeLists.txt b/test/processors/CMakeLists.txt index de24a8e..7441089 100644 --- a/test/processors/CMakeLists.txt +++ b/test/processors/CMakeLists.txt @@ -1,12 +1,59 @@ +# Generic processor tests +file (GLOB SOURCE processor.cpp) -file (GLOB SOURCE_FILES *.cpp) -file (GLOB HEADER_FILES *.hpp) - -init_target (test_processors) - -build_executable (${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES}) - +init_target (test_processor) +build_executable (${TARGET_NAME} ${SOURCE}) link_boost () final_target () - set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +# Hybi00 processor tests +file (GLOB SOURCE hybi00.cpp) + +init_target (test_processor_hybi00) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +# Hybi07 processor tests +file (GLOB SOURCE hybi07.cpp) + +init_target (test_processor_hybi07) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +# Hybi08 processor tests +file (GLOB SOURCE hybi08.cpp) + +init_target (test_processor_hybi08) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +if (ZLIB_FOUND) + +# Hybi13 processor tests +file (GLOB SOURCE hybi13.cpp) + +init_target (test_processor_hybi13) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +link_zlib() +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +# Permessage compression extension processor tests +file (GLOB SOURCE extension_permessage_compress.cpp) + +init_target (test_processor_extension_permessage_compress) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +link_zlib() +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +endif ( ZLIB_FOUND ) \ No newline at end of file diff --git a/test/random/CMakeLists.txt b/test/random/CMakeLists.txt index 1d6f1cd..d375f4b 100644 --- a/test/random/CMakeLists.txt +++ b/test/random/CMakeLists.txt @@ -1,12 +1,17 @@ +# Test RNG policy none +file (GLOB SOURCE none.cpp) -file (GLOB SOURCE_FILES *.cpp) -file (GLOB HEADER_FILES *.hpp) - -init_target (test_random) - -build_executable (${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES}) - +init_target (test_random_none) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +# Test RNG policy random_device +file (GLOB SOURCE random_device.cpp) + +init_target (test_random_random_device) +build_executable (${TARGET_NAME} ${SOURCE}) link_boost () final_target () - set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") diff --git a/test/roles/CMakeLists.txt b/test/roles/CMakeLists.txt index b4100c2..0d6771f 100644 --- a/test/roles/CMakeLists.txt +++ b/test/roles/CMakeLists.txt @@ -1,12 +1,17 @@ +# Test client role +file (GLOB SOURCE client.cpp) -file (GLOB SOURCE_FILES *.cpp) -file (GLOB HEADER_FILES *.hpp) - -init_target (test_roles) - -build_executable (${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES}) - +init_target (test_roles_client) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +# Test server role +file (GLOB SOURCE server.cpp) + +init_target (test_roles_server) +build_executable (${TARGET_NAME} ${SOURCE}) link_boost () final_target () - set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") diff --git a/test/transport/CMakeLists.txt b/test/transport/CMakeLists.txt index 4fe7037..d1365cf 100644 --- a/test/transport/CMakeLists.txt +++ b/test/transport/CMakeLists.txt @@ -1,12 +1,61 @@ +if (OPENSSL_FOUND) -file (GLOB SOURCE_FILES *.cpp) -file (GLOB HEADER_FILES *.hpp) +# Test transport integration +file (GLOB SOURCE integration.cpp) init_target (test_transport) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +link_openssl() +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") -build_executable (${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES}) +# Test transport asio timers +file (GLOB SOURCE asio/timers.cpp) +init_target (test_transport_asio_timers) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +link_openssl() +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +endif() + +# Test transport iostream base +file (GLOB SOURCE iostream/base.cpp) + +init_target (test_transport_iostream_base) +build_executable (${TARGET_NAME} ${SOURCE}) link_boost () final_target () - set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +# Test transport iostream endpoint +file (GLOB SOURCE iostream/endpoint.cpp) + +init_target (test_transport_iostream_endpoint) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +# Test transport iostream connection +file (GLOB SOURCE iostream/connection.cpp) + +init_target (test_transport_iostream_connection) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +# Test transport asio base +file (GLOB SOURCE asio/base.cpp) + +init_target (test_transport_asio_base) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + + diff --git a/test/utility/CMakeLists.txt b/test/utility/CMakeLists.txt index 30a1d96..8db99e3 100644 --- a/test/utility/CMakeLists.txt +++ b/test/utility/CMakeLists.txt @@ -1,12 +1,53 @@ +# Test close utilities +file (GLOB SOURCE close.cpp) -file (GLOB SOURCE_FILES *.cpp) -file (GLOB HEADER_FILES *.hpp) - -init_target (test_utility) - -build_executable (${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES}) - +init_target (test_close) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +# Test error utilities +file (GLOB SOURCE error.cpp) + +init_target (test_error) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +# Test frame utilities +file (GLOB SOURCE frame.cpp) + +init_target (test_frame) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +# Test sha1 utilities +file (GLOB SOURCE sha1.cpp) + +init_target (test_sha1) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +# Test uri utilities +file (GLOB SOURCE uri.cpp) + +init_target (test_uri) +build_executable (${TARGET_NAME} ${SOURCE}) +link_boost () +final_target () +set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test") + +# Test misc utilities +file (GLOB SOURCE utilities.cpp) + +init_target (test_utilities) +build_executable (${TARGET_NAME} ${SOURCE}) link_boost () final_target () - set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "test")