diff --git a/CHANGELOG.md b/CHANGELOG.md index 7baa05fa..af4e29c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,6 @@ Version 55: * Don't allocate memory to handle obs-fold -* Add Beast CMake interface target * Avoid a parser allocation using non-flat buffer * read_size replaces read_size_helper diff --git a/CMakeLists.txt b/CMakeLists.txt index 9166cbc2..c4a7bab7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,12 +1,8 @@ -#------------------------------------------------------------------------------- -# -# Beast -# -#------------------------------------------------------------------------------- +# Part of Beast cmake_minimum_required (VERSION 3.5.2) -project (Beast VERSION 1.0.0) +project (Beast) set_property (GLOBAL PROPERTY USE_FOLDERS ON) @@ -33,10 +29,10 @@ if (MSVC) set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO ${replacement_flags}) else() - set (THREADS_PREFER_PTHREAD_FLAG ON) - find_package (Threads) + set(THREADS_PREFER_PTHREAD_FLAG ON) + find_package(Threads) - set (CMAKE_CXX_FLAGS + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Wpedantic -Wno-unused-parameter") endif() @@ -44,25 +40,31 @@ endif() # # Boost # -#------------------------------------------------------------------------------- option (Boost_USE_STATIC_LIBS "Use static libraries for boost" ON) set (Boost_NO_SYSTEM_PATHS ON) set (Boost_USE_MULTITHREADED ON) +add_definitions (-DBOOST_COROUTINES_NO_DEPRECATION_WARNING=1) # for asio + unset (Boost_INCLUDE_DIR CACHE) unset (Boost_LIBRARY_DIRS CACHE) -set (BOOST_COMPONENTS coroutine context filesystem program_options system thread) -find_package (Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS}) +if (MSVC) + find_package (Boost REQUIRED) +else() + find_package (Boost REQUIRED COMPONENTS + coroutine + context + filesystem + program_options + system + thread + ) + link_libraries (${Boost_LIBRARIES}) +endif() -# Workaround for Jenkins incomplete install -if (NOT TARGET Boost::atomic) - add_library(Boost::atomic INTERFACE IMPORTED) -endif() -if (NOT TARGET Boost::date_time) - add_library(Boost::date_time INTERFACE IMPORTED) -endif() +include_directories (SYSTEM ${Boost_INCLUDE_DIRS}) if (MINGW) link_libraries(ws2_32 mswsock) @@ -72,18 +74,17 @@ endif() # # OpenSSL # -#------------------------------------------------------------------------------- if (APPLE AND NOT DEFINED ENV{OPENSSL_ROOT_DIR}) - find_program(HOMEBREW brew) - if (NOT HOMEBREW STREQUAL "HOMEBREW-NOTFOUND") - execute_process(COMMAND brew --prefix openssl - OUTPUT_VARIABLE OPENSSL_ROOT_DIR - OUTPUT_STRIP_TRAILING_WHITESPACE) - endif() + find_program(HOMEBREW brew) + if (NOT HOMEBREW STREQUAL "HOMEBREW-NOTFOUND") + execute_process(COMMAND brew --prefix openssl + OUTPUT_VARIABLE OPENSSL_ROOT_DIR + OUTPUT_STRIP_TRAILING_WHITESPACE) + endif() endif() -find_package (OpenSSL) +find_package(OpenSSL) # #------------------------------------------------------------------------------- @@ -129,25 +130,6 @@ elseif ("${VARIANT}" STREQUAL "release") endif() -#------------------------------------------------------------------------------- -# -# Library interface -# -#------------------------------------------------------------------------------- - -add_library(${PROJECT_NAME} INTERFACE) -target_link_libraries(${PROJECT_NAME} INTERFACE Boost::system Boost::disable_autolinking) -if (NOT MSVC) - target_link_libraries(${PROJECT_NAME} INTERFACE Threads::Threads) -endif() -target_compile_definitions(${PROJECT_NAME} INTERFACE BOOST_COROUTINES_NO_DEPRECATION_WARNING=1) - -#------------------------------------------------------------------------------- -# -# Tests and Examples -# -#------------------------------------------------------------------------------- - include_directories (.) include_directories (extras) include_directories (include) @@ -189,12 +171,6 @@ file(GLOB_RECURSE EXTRAS_INCLUDES ${PROJECT_SOURCE_DIR}/extras/beast/*.ipp ) -add_subdirectory (test) -add_subdirectory (test/core) -add_subdirectory (test/http) -add_subdirectory (test/websocket) -add_subdirectory (test/zlib) - add_subdirectory (examples) if (NOT OPENSSL_FOUND) message("OpenSSL not found. Not building SSL tests and examples") @@ -202,3 +178,9 @@ else() add_subdirectory (examples/ssl) add_subdirectory (test/websocket/ssl) endif() + +add_subdirectory (test) +add_subdirectory (test/core) +add_subdirectory (test/http) +add_subdirectory (test/websocket) +add_subdirectory (test/zlib) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 41f2afb5..ad53efe0 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -10,7 +10,11 @@ add_executable (echo-op echo_op.cpp ) -target_link_libraries(echo-op Beast) +if (NOT WIN32) + target_link_libraries(echo-op ${Boost_LIBRARIES} Threads::Threads) +else() + target_link_libraries(echo-op ${Boost_LIBRARIES}) +endif() add_executable (http-crawl ${BEAST_INCLUDES} @@ -20,7 +24,11 @@ add_executable (http-crawl http_crawl.cpp ) -target_link_libraries(http-crawl Beast) +if (NOT WIN32) + target_link_libraries(http-crawl ${Boost_LIBRARIES} Threads::Threads) +else() + target_link_libraries(http-crawl ${Boost_LIBRARIES}) +endif() add_executable (http-server ${BEAST_INCLUDES} @@ -32,7 +40,11 @@ add_executable (http-server http_server.cpp ) -target_link_libraries(http-server Beast Boost::program_options Boost::filesystem) +if (NOT WIN32) + target_link_libraries(http-server ${Boost_LIBRARIES} Threads::Threads) +else() + target_link_libraries(http-server ${Boost_LIBRARIES}) +endif() add_executable (http-example @@ -41,7 +53,11 @@ add_executable (http-example http_example.cpp ) -target_link_libraries(http-example Beast) +if (NOT WIN32) + target_link_libraries(http-example ${Boost_LIBRARIES} Threads::Threads) +else() + target_link_libraries(http-example ${Boost_LIBRARIES}) +endif() add_executable (websocket-echo @@ -51,7 +67,11 @@ add_executable (websocket-echo websocket_echo.cpp ) -target_link_libraries(websocket-echo Beast) +if (NOT WIN32) + target_link_libraries(websocket-echo ${Boost_LIBRARIES} Threads::Threads) +else() + target_link_libraries(websocket-echo ${Boost_LIBRARIES}) +endif() add_executable (websocket-example @@ -60,4 +80,8 @@ add_executable (websocket-example websocket_example.cpp ) -target_link_libraries(websocket-example Beast) +if (NOT WIN32) + target_link_libraries(websocket-example ${Boost_LIBRARIES} Threads::Threads) +else() + target_link_libraries(websocket-example ${Boost_LIBRARIES}) +endif() diff --git a/examples/ssl/CMakeLists.txt b/examples/ssl/CMakeLists.txt index fd7d9827..df35e5f3 100644 --- a/examples/ssl/CMakeLists.txt +++ b/examples/ssl/CMakeLists.txt @@ -5,13 +5,19 @@ GroupSources(include/beast beast) GroupSources(examples/ssl "/") +include_directories(${OPENSSL_INCLUDE_DIR}) + add_executable (http-ssl-example ${BEAST_INCLUDES} ${EXTRAS_INCLUDES} http_ssl_example.cpp ) -target_link_libraries(http-ssl-example Beast OpenSSL::SSL) +target_link_libraries(http-ssl-example ${OPENSSL_LIBRARIES}) + +if (NOT WIN32) + target_link_libraries(http-ssl-example ${Boost_LIBRARIES} Threads::Threads) +endif() add_executable (websocket-ssl-example ${BEAST_INCLUDES} @@ -19,4 +25,8 @@ add_executable (websocket-ssl-example websocket_ssl_example.cpp ) -target_link_libraries(websocket-ssl-example Beast OpenSSL::SSL) +target_link_libraries(websocket-ssl-example ${OPENSSL_LIBRARIES}) + +if (NOT WIN32) + target_link_libraries(websocket-ssl-example ${Boost_LIBRARIES} Threads::Threads) +endif() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index de3782c7..ff15cb4d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -16,7 +16,11 @@ add_executable (lib-tests zlib.cpp ) -target_link_libraries(lib-tests Beast Boost::program_options) +if (NOT WIN32) + target_link_libraries(lib-tests ${Boost_LIBRARIES} Threads::Threads) +else() + target_link_libraries(lib-tests ${Boost_LIBRARIES}) +endif() if (MINGW) set_target_properties(lib-tests PROPERTIES COMPILE_FLAGS "-Wa,-mbig-obj") diff --git a/test/core/CMakeLists.txt b/test/core/CMakeLists.txt index 4aa8e429..f40db665 100644 --- a/test/core/CMakeLists.txt +++ b/test/core/CMakeLists.txt @@ -40,4 +40,6 @@ add_executable (core-tests sha1.cpp ) -target_link_libraries(core-tests Beast Boost::program_options Boost::filesystem Boost::coroutine Boost::thread Boost::context) +if (NOT WIN32) + target_link_libraries(core-tests ${Boost_LIBRARIES} Threads::Threads) +endif() diff --git a/test/http/CMakeLists.txt b/test/http/CMakeLists.txt index b4c57625..4f302ff3 100644 --- a/test/http/CMakeLists.txt +++ b/test/http/CMakeLists.txt @@ -33,7 +33,11 @@ add_executable (http-tests write.cpp ) -target_link_libraries(http-tests Beast Boost::program_options Boost::filesystem Boost::coroutine Boost::thread Boost::context) +if (NOT WIN32) + target_link_libraries(http-tests ${Boost_LIBRARIES} Threads::Threads) +else() + target_link_libraries(http-tests ${Boost_LIBRARIES}) +endif() add_executable (http-bench ${BEAST_INCLUDES} @@ -45,4 +49,8 @@ add_executable (http-bench parser_bench.cpp ) -target_link_libraries(http-bench Beast Boost::program_options Boost::filesystem) +if (NOT WIN32) + target_link_libraries(http-bench ${Boost_LIBRARIES} Threads::Threads) +else() + target_link_libraries(http-bench ${Boost_LIBRARIES}) +endif() diff --git a/test/websocket/CMakeLists.txt b/test/websocket/CMakeLists.txt index 2f7692a3..d6c5a034 100644 --- a/test/websocket/CMakeLists.txt +++ b/test/websocket/CMakeLists.txt @@ -21,7 +21,11 @@ add_executable (websocket-tests utf8_checker.cpp ) -target_link_libraries(websocket-tests Beast Boost::program_options Boost::filesystem Boost::coroutine Boost::thread Boost::context) +if (NOT WIN32) + target_link_libraries(websocket-tests ${Boost_LIBRARIES} Threads::Threads) +else() + target_link_libraries(websocket-tests ${Boost_LIBRARIES}) +endif() if (MINGW) set_target_properties(websocket-tests PROPERTIES COMPILE_FLAGS "-Wa,-mbig-obj -Og") diff --git a/test/websocket/ssl/CMakeLists.txt b/test/websocket/ssl/CMakeLists.txt index 418e8019..4132e4c6 100644 --- a/test/websocket/ssl/CMakeLists.txt +++ b/test/websocket/ssl/CMakeLists.txt @@ -5,6 +5,8 @@ GroupSources(include/beast beast) GroupSources(test/websocket/ssl "/") +include_directories(${OPENSSL_INCLUDE_DIR}) + add_executable (websocket-ssl-tests ${BEAST_INCLUDES} ${EXTRAS_INCLUDES} @@ -14,4 +16,8 @@ add_executable (websocket-ssl-tests ssl_server.cpp ) -target_link_libraries(websocket-ssl-tests Beast Boost::program_options Boost::filesystem OpenSSL::SSL) +target_link_libraries(websocket-ssl-tests ${OPENSSL_LIBRARIES}) + +if (NOT WIN32) + target_link_libraries(websocket-ssl-tests ${Boost_LIBRARIES} Threads::Threads) +endif() diff --git a/test/zlib/CMakeLists.txt b/test/zlib/CMakeLists.txt index 16652015..4d955e26 100644 --- a/test/zlib/CMakeLists.txt +++ b/test/zlib/CMakeLists.txt @@ -19,4 +19,8 @@ add_executable (zlib-tests inflate_stream.cpp ) -target_link_libraries(zlib-tests Beast Boost::program_options Boost::filesystem) +if (NOT WIN32) + target_link_libraries(zlib-tests ${Boost_LIBRARIES} Threads::Threads) +else() + target_link_libraries(zlib-tests ${Boost_LIBRARIES}) +endif()