diff --git a/CMakeLists.txt b/CMakeLists.txt index faaefd42..54aa0dea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -121,7 +121,7 @@ if(BUILD_DOCS) DESTINATION ${PROJECT_INSTALL_DATADIR}/docs ) endif() -if(BUILD_SDK) +if(BUILD_FAIRMQ OR BUILD_SDK) if(asio_BUNDLED) install_bundled(asio) endif() diff --git a/cmake/FairMQDependencies.cmake b/cmake/FairMQDependencies.cmake index 46fdbf44..bb9abeb3 100644 --- a/cmake/FairMQDependencies.cmake +++ b/cmake/FairMQDependencies.cmake @@ -42,9 +42,6 @@ if(BUILD_FAIRMQ OR BUILD_SDK) find_package2(PUBLIC Boost REQUIRED VERSION 1.66 COMPONENTS container program_options filesystem date_time regex ) -endif() - -if(BUILD_SDK) set(__asio_version 1.18.1) find_package2(BUNDLED asio VERSION ${__asio_version}) if(NOT asio_FOUND AND NOT asio_BUNDLED) diff --git a/fairmq/CMakeLists.txt b/fairmq/CMakeLists.txt index 1a5f2cb3..6ee9186d 100644 --- a/fairmq/CMakeLists.txt +++ b/fairmq/CMakeLists.txt @@ -49,12 +49,6 @@ if(BUILD_FAIRMQ OR BUILD_SDK) ) target_compile_features(${target} PUBLIC cxx_std_17) target_compile_definitions(${target} PUBLIC BOOST_ERROR_CODE_HEADER_ONLY) - # workaround https://github.com/boostorg/asio/commit/43874d5497414c67655d901e48c939ef01337edb - if( Boost_VERSION VERSION_LESS 1.69 - AND CMAKE_CXX_COMPILER_ID STREQUAL AppleClang - AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0.1) - target_compile_definitions(${target} PUBLIC BOOST_ASIO_HAS_STD_STRING_VIEW) - endif() target_include_directories(${target} PUBLIC $ @@ -64,8 +58,9 @@ if(BUILD_FAIRMQ OR BUILD_SDK) PRIVATE FairLogger::FairLogger Threads::Threads - PUBLIC Boost::boost + PUBLIC + asio::asio ) set_target_properties(${target} PROPERTIES VERSION ${PROJECT_VERSION} diff --git a/fairmq/plugins/DDS/CMakeLists.txt b/fairmq/plugins/DDS/CMakeLists.txt index 04e8689b..5efc2572 100644 --- a/fairmq/plugins/DDS/CMakeLists.txt +++ b/fairmq/plugins/DDS/CMakeLists.txt @@ -9,7 +9,7 @@ set(plugin FairMQPlugin_dds) add_library(${plugin} SHARED ${CMAKE_CURRENT_SOURCE_DIR}/DDS.cxx ${CMAKE_CURRENT_SOURCE_DIR}/DDS.h) target_compile_features(${plugin} PUBLIC cxx_std_17) -target_link_libraries(${plugin} PUBLIC FairMQ StateMachine DDS::dds_intercom_lib DDS::dds_protocol_lib Boost::boost PRIVATE Commands) +target_link_libraries(${plugin} PUBLIC FairMQ StateMachine DDS::dds_intercom_lib DDS::dds_protocol_lib Boost::boost PRIVATE Commands asio::asio) target_include_directories(${plugin} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) set_target_properties(${plugin} PROPERTIES CXX_VISIBILITY_PRESET hidden) set_target_properties(${plugin} PROPERTIES diff --git a/fairmq/plugins/DDS/DDS.cxx b/fairmq/plugins/DDS/DDS.cxx index e758e617..f17d4342 100644 --- a/fairmq/plugins/DDS/DDS.cxx +++ b/fairmq/plugins/DDS/DDS.cxx @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include @@ -243,7 +243,7 @@ auto DDS::SubscribeForConnectingChannels() -> void string channelName = key.substr(8); LOG(info) << "Update for channel name: " << channelName; - boost::asio::post(fWorkerQueue, [=]() { + asio::post(fWorkerQueue, [=]() { try { { unique_lock lk(fUpdateMutex); diff --git a/fairmq/plugins/DDS/DDS.h b/fairmq/plugins/DDS/DDS.h index 586b11db..fdea789e 100644 --- a/fairmq/plugins/DDS/DDS.h +++ b/fairmq/plugins/DDS/DDS.h @@ -18,9 +18,9 @@ #include #undef BOOST_BIND_GLOBAL_PLACEHOLDERS -#include -#include -#include +#include +#include +#include #include #include @@ -168,8 +168,8 @@ class DDS : public Plugin std::condition_variable fUpdateCondition; std::thread fWorkerThread; - boost::asio::io_context fWorkerQueue; - boost::asio::executor_work_guard fWorkGuard; + asio::io_context fWorkerQueue; + asio::executor_work_guard fWorkGuard; }; Plugin::ProgOptions DDSProgramOptions() diff --git a/fairmq/tools/Network.cxx b/fairmq/tools/Network.cxx index 327b2437..a5e9e4bb 100644 --- a/fairmq/tools/Network.cxx +++ b/fairmq/tools/Network.cxx @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * + * Copyright (C) 2017-2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * * * * This software is distributed under the terms of the * * GNU Lesser General Public Licence (LGPL) version 3, * @@ -10,31 +10,28 @@ #include #ifndef _GNU_SOURCE -#define _GNU_SOURCE // To get defns of NI_MAXSERV and NI_MAXHOST +#define _GNU_SOURCE // To get defns of NI_MAXSERV and NI_MAXHOST #endif -#include // trim -#include - -#include -#include -#include -#include - #include #include +#include // trim +#include #include #include #include +#include #include #include +#include #include #include +#include +#include using namespace std; -namespace fair::mq::tools -{ +namespace fair::mq::tools { // returns a map with network interface names as keys and their IP addresses as values map getHostIPs() @@ -56,7 +53,13 @@ map getHostIPs() } if (ifa->ifa_addr->sa_family == AF_INET) { - s = getnameinfo(ifa->ifa_addr, sizeof(sockaddr_in), host.data(), NI_MAXHOST, nullptr, 0, NI_NUMERICHOST); + s = getnameinfo(ifa->ifa_addr, + sizeof(sockaddr_in), + host.data(), + NI_MAXHOST, + nullptr, + 0, + NI_NUMERICHOST); if (s != 0) { cout << "getnameinfo() failed: " << gai_strerror(s) << endl; throw runtime_error("getnameinfo() failed"); @@ -79,7 +82,8 @@ string getInterfaceIP(const string& interface) if (IPs.count(interface) > 0) { return IPs[interface]; } - LOG(error) << "Could not find provided network interface: \"" << interface << "\"!, exiting."; + LOG(error) << "Could not find provided network interface: \"" + << interface << "\"!, exiting."; return ""; } catch (runtime_error& re) { cout << "could not get interface IP: " << re.what(); @@ -94,9 +98,10 @@ string getDefaultRouteNetworkInterface() array buffer{}; string interfaceName; -#ifdef __APPLE__ // MacOS - unique_ptr file(popen("route -n get default | grep interface | cut -d \":\" -f 2", "r"), pclose); -#else // Linux +#ifdef __APPLE__ // MacOS + unique_ptr file( + popen("route -n get default | grep interface | cut -d \":\" -f 2", "r"), pclose); +#else // Linux ifstream is("/proc/net/route"); string line; @@ -114,14 +119,17 @@ string getDefaultRouteNetworkInterface() if (line.substr(pos + 1, 8) == "00000000") { interfaceName = line.substr(0, pos); - LOG(debug) << "Detected network interface name for the default route: " << interfaceName; + LOG(debug) << "Detected network interface name for the default route: " + << interfaceName; return interfaceName; } } - LOG(debug) << "could not get network interface of the default route from /proc/net/route, going to try via 'ip route'"; + LOG(debug) << "could not get network interface of the default route from /proc/net/route, " + "going to try via 'ip route'"; - unique_ptr file(popen("ip route | grep default | cut -d \" \" -f 5 | head -n 1", "r"), pclose); + unique_ptr file( + popen("ip route | grep default | cut -d \" \" -f 5 | head -n 1", "r"), pclose); #endif if (!file) { @@ -138,8 +146,10 @@ string getDefaultRouteNetworkInterface() boost::algorithm::trim(interfaceName); if (interfaceName.empty()) { - LOG(debug) << "Could not detect default route network interface name from /proc/net/route nor 'ip route'"; - throw DefaultRouteDetectionError("Could not detect default route network interface name from /proc/net/route nor 'ip route'"); + LOG(debug) << "Could not detect default route network interface name from /proc/net/route " + "nor 'ip route'"; + throw DefaultRouteDetectionError("Could not detect default route network interface name " + "from /proc/net/route nor 'ip route'"); } else { LOG(debug) << "Detected network interface name for the default route: " << interfaceName; } @@ -149,25 +159,22 @@ string getDefaultRouteNetworkInterface() string getIpFromHostname(const string& hostname) { - boost::asio::io_service ios; - return getIpFromHostname(hostname, ios); -} + boost::asio::io_context ioc; + + using namespace boost::asio::ip; -string getIpFromHostname(const string& hostname, boost::asio::io_service& ios) -{ try { - namespace bai = boost::asio::ip; - bai::tcp::resolver resolver(ios); - bai::tcp::resolver::query query(hostname, ""); - bai::tcp::resolver::iterator end; + tcp::resolver resolver(ioc); + tcp::resolver::query query(hostname, ""); + tcp::resolver::iterator end; - auto it = find_if(static_cast>(resolver.resolve(query)), end, [](const bai::tcp::endpoint& ep) { - return ep.address().is_v4(); - }); + auto it = find_if(static_cast>(resolver.resolve(query)), + end, + [](const tcp::endpoint& ep) { return ep.address().is_v4(); }); if (it != end) { stringstream ss; - ss << static_cast(*it).address(); + ss << static_cast(*it).address(); return ss.str(); } @@ -180,4 +187,4 @@ string getIpFromHostname(const string& hostname, boost::asio::io_service& ios) } } -} // namespace fair::mq::tools +} // namespace fair::mq::tools diff --git a/fairmq/tools/Network.h b/fairmq/tools/Network.h index c3868a5b..e6f4ea64 100644 --- a/fairmq/tools/Network.h +++ b/fairmq/tools/Network.h @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * + * Copyright (C) 2017-2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * * * * This software is distributed under the terms of the * * GNU Lesser General Public Licence (LGPL) version 3, * @@ -13,18 +13,6 @@ #include #include -// forward declarations -namespace boost -{ -namespace asio -{ - -class io_context; -using io_service = class io_context; - -} // namespace asio -} // namespace boost - namespace fair::mq::tools { @@ -41,8 +29,6 @@ std::string getDefaultRouteNetworkInterface(); std::string getIpFromHostname(const std::string& hostname); -std::string getIpFromHostname(const std::string& hostname, boost::asio::io_service& ios); - } // namespace fair::mq::tools #endif /* FAIR_MQ_TOOLS_NETWORK_H */