From 0ed8a1f43561a23ac313b0906c32ac00aeaca10f Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sun, 15 Sep 2024 11:40:25 -0500 Subject: [PATCH 1/2] xo-websock: build: update to use latest xo-cmake macros --- CMakeLists.txt | 20 ++------------------ cmake/xo-bootstrap-macros.cmake | 33 +++++++++++++++++++++++++++------ 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e3d66093..a3a89b7f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,25 +3,11 @@ cmake_minimum_required(VERSION 3.10) project(websock VERSION 1.0) -enable_language(CXX) -# common XO cmake macros (see proj/xo-cmake) +include(GNUInstallDirs) include(cmake/xo-bootstrap-macros.cmake) -# ---------------------------------------------------------------- -# unit test setup - -enable_testing() -# activate code coverage for all executables + libraries (when configured with -DCODE_COVERAGE=ON) -add_code_coverage() -# 1. assuming that /nix/store/ prefixes .hpp files belonging to gcc, catch2 etc. -# we're not interested in code coverage for these sources. -# 2. exclude the utest/ subdir, we don't need coverage on the unit tests themselves; -# rather, want coverage on the code that the unit tests exercise. -# -# NOTE: this seems to work only with the 'ccov-all' target. In particular, doesn't seem to do anything with the 'ccov' target -# -add_code_coverage_all_targets(EXCLUDE /nix/store/* ${PROJECT_SOURCE_DIR}/utest/* ${PROJECT_BINARY_DIR}/local/* ${PROJECT_SOURCE_DIR}/repo/*) +xo_cxx_toplevel_options3() # ---------------------------------------------------------------- # c++ settings @@ -31,8 +17,6 @@ set(PROJECT_CXX_FLAGS "") #set(PROJECT_CXX_FLAGS "-fconcepts-diagnostics-depth=2") add_definitions(${PROJECT_CXX_FLAGS}) -xo_toplevel_compile_options() - # ---------------------------------------------------------------- add_subdirectory(src/websock) diff --git a/cmake/xo-bootstrap-macros.cmake b/cmake/xo-bootstrap-macros.cmake index 96592216..aba31169 100644 --- a/cmake/xo-bootstrap-macros.cmake +++ b/cmake/xo-bootstrap-macros.cmake @@ -1,14 +1,35 @@ -if (("${CMAKE_MODULE_PATH}" STREQUAL "") OR ("${CMAKE_MODULE_PATH}" STREQUAL "prefix")) - # default to typical install location for xo-project-macros - set(CMAKE_MODULE_PATH ${CMAKE_INSTALL_PREFIX}/share/cmake) +# ---------------------------------------------------------------- +# for example: +# $ PREFIX=/usr/local # for example +# $ cmake -DCMAKE_MODULE_PATH=prefix -DCMAKE_INSTALL_PREFIX=$PREFIX -B .build +# +# will get +# CMAKE_MODULE_PATH +# from xo-cmake-config --cmake-module-path +# +# and expect .cmake macros in +# CMAKE_MODULE_PATH/xo_macros/xo_cxx.cmake +# ---------------------------------------------------------------- + +find_program(XO_CMAKE_CONFIG_EXECUTABLE NAMES xo-cmake-config REQUIRED) + +if ("${XO_CMAKE_CONFIG_EXECUTABLE}" STREQUAL "XO_CMAKE_CONFIG_EXECUTABLE-NOT_FOUND") + message(FATAL "could not find xo-cmake-config executable") endif() +message(STATUS "XO_CMAKE_CONFIG_EXECUTABLE=${XO_CMAKE_CONFIG_EXECUTABLE}") + if (NOT XO_SUBMODULE_BUILD) - message("-- CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") - message("-- CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}") + if (("${CMAKE_MODULE_PATH}" STREQUAL "") OR ("${CMAKE_MODULE_PATH}" STREQUAL prefix)) + # default to typical install location for xo-project-macros + execute_process(COMMAND ${XO_CMAKE_CONFIG_EXECUTABLE} --cmake-module-path OUTPUT_VARIABLE CMAKE_MODULE_PATH) + message(STATUS "CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}") + endif() endif() # needs to have been installed somewhere on CMAKE_MODULE_PATH, # (e.g. from xo-cmake with the same value for CMAKE_INSTALL_PREFIX) # -include(xo_macros/xo-project-macros) +include(xo_macros/xo_cxx) + +xo_cxx_bootstrap_message() From c42b6c70eb5ab5ca539bb1e74a00e953d7071942 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sun, 15 Sep 2024 11:41:13 -0500 Subject: [PATCH 2/2] xo-websock: bugfix: track xo::ref::rp -> xo::rp --- include/xo/websock/DynamicEndpoint.hpp | 2 +- include/xo/websock/Webserver.hpp | 4 ++-- include/xo/websock/WebsocketSink.hpp | 8 ++++---- src/websock/DynamicEndpoint.cpp | 1 - src/websock/Webserver.cpp | 1 - src/websock/WebsocketSink.cpp | 13 ++++++------- 6 files changed, 13 insertions(+), 16 deletions(-) diff --git a/include/xo/websock/DynamicEndpoint.hpp b/include/xo/websock/DynamicEndpoint.hpp index 8753b835..7403904f 100644 --- a/include/xo/websock/DynamicEndpoint.hpp +++ b/include/xo/websock/DynamicEndpoint.hpp @@ -67,7 +67,7 @@ namespace xo { * send output to ws_sink */ CallbackId subscribe(std::string const & incoming_uri, - ref::rp const & ws_sink) const; + rp const & ws_sink) const; /* unsubscribe stream from this endpoint; * reverses the effect of a previous call to .subscribe() diff --git a/include/xo/websock/Webserver.hpp b/include/xo/websock/Webserver.hpp index 57b0ccf7..12ad316f 100644 --- a/include/xo/websock/Webserver.hpp +++ b/include/xo/websock/Webserver.hpp @@ -83,8 +83,8 @@ namespace xo { * the underlying libwebsocket library is not advertised to be * threadsafe */ - static ref::rp make(WebserverConfig const & ws_config, - ref::rp const & pjson); + static rp make(WebserverConfig const & ws_config, + rp const & pjson); /* current state */ virtual Runstate state() const = 0; diff --git a/include/xo/websock/WebsocketSink.hpp b/include/xo/websock/WebsocketSink.hpp index 863bda34..cd7aa96a 100644 --- a/include/xo/websock/WebsocketSink.hpp +++ b/include/xo/websock/WebsocketSink.hpp @@ -17,10 +17,10 @@ namespace xo { using PrintJson = xo::json::PrintJson; public: - static ref::rp make(ref::rp const & websrv, - ref::rp const & pjson, - uint32_t session_id, - std::string const & stream_name); + static rp make(rp const & websrv, + rp const & pjson, + uint32_t session_id, + std::string const & stream_name); }; /*WebsocketSink*/ } /*namespace web*/ } /*namespace xo*/ diff --git a/src/websock/DynamicEndpoint.cpp b/src/websock/DynamicEndpoint.cpp index 3df46d47..5b7daea9 100644 --- a/src/websock/DynamicEndpoint.cpp +++ b/src/websock/DynamicEndpoint.cpp @@ -8,7 +8,6 @@ namespace xo { using xo::web::Alist; using xo::fn::CallbackId; - using xo::ref::rp; namespace web { DynamicEndpoint::DynamicEndpoint(std::string uri_pattern, diff --git a/src/websock/Webserver.cpp b/src/websock/Webserver.cpp index 09f90439..6e830425 100644 --- a/src/websock/Webserver.cpp +++ b/src/websock/Webserver.cpp @@ -34,7 +34,6 @@ namespace xo { using xo::reactor::AbstractSink; using xo::json::PrintJson; using xo::fn::CallbackId; - using xo::ref::rp; using xo::scope; using xo::xtag; diff --git a/src/websock/WebsocketSink.cpp b/src/websock/WebsocketSink.cpp index 1c406432..f0a9fef5 100644 --- a/src/websock/WebsocketSink.cpp +++ b/src/websock/WebsocketSink.cpp @@ -16,9 +16,8 @@ namespace xo { using xo::reflect::Reflect; using xo::reflect::TaggedPtr; using xo::reflect::TypeDescr; - using xo::ref::rp; using xo::ref::brw; - using xo::print::quoted; + using xo::print::quot; using xo::print::qcstr; using xo::scope; using xo::xtag; @@ -36,8 +35,8 @@ namespace xo { using AbstractSource = reactor::AbstractSource; public: - WebsocketSinkImpl(ref::rp const & websrv, - ref::rp const & pjson, + WebsocketSinkImpl(rp const & websrv, + rp const & pjson, uint32_t session_id, std::string stream_name) : websrv_{std::move(websrv)}, @@ -56,7 +55,7 @@ namespace xo { virtual TypeDescr sink_ev_type() const override; virtual bool allow_volatile_source() const override { return true; } virtual uint32_t n_in_ev() const override { return n_in_ev_; } - virtual void attach_source(ref::rp const & src) override; + virtual void attach_source(rp const & src) override; virtual void notify_ev_tp(TaggedPtr const & ev_tp) override; private: @@ -66,9 +65,9 @@ namespace xo { */ std::string name_; /* webserver implementation */ - ref::rp websrv_; + rp websrv_; /* print arbitrary reflected stuff as json */ - ref::rp pjson_; + rp pjson_; /* websocket session id# - events arriving at this sink * will be sent only to the session identified by .session_id */