Compare commits

..

3 Commits

Author SHA1 Message Date
Dennis Klein
60f27b94b2 Support BUILD_SHARED_LIBS flag
https://cmake.org/cmake/help/v3.0/variable/BUILD_SHARED_LIBS.html
2018-09-19 19:09:10 +02:00
Dennis Klein
adfa0e2c95 Fix ODR violation
fairmq/shmem/Monitor.cxx:39:27: error: redefinition of ‘volatile sig_atomic_t {anonymous}::gSignalStatus’
     volatile sig_atomic_t gSignalStatus = 0;
                           ^~~~~~~~~~~~~
In file included from fairmq/cotire/FairMQ__CXX_unity_20_29.cxx:4:
fairmq/plugins/Control.cxx:20:27: note: ‘volatile sig_atomic_t {anonymous}::gSignalStatus’ previously defined here
     volatile sig_atomic_t gSignalStatus = 0;
                           ^~~~~~~~~~~~~
2018-09-19 19:09:10 +02:00
Dennis Klein
c2bea85b90 Bump coolness factor
Log ascii logo with some metadata.
Metadata added to header <fairmq/Version.h>.
2018-09-13 22:25:05 +02:00
5 changed files with 229 additions and 198 deletions

View File

@@ -123,8 +123,14 @@ macro(set_fairmq_defaults)
endif() endif()
set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_EXTENSIONS OFF)
if(NOT BUILD_SHARED_LIBS)
set(BUILD_SHARED_LIBS ON CACHE BOOL "Whether to build shared libraries or static archives")
endif()
# Set -fPIC as default for all library types # Set -fPIC as default for all library types
set(CMAKE_POSITION_INDEPENDENT_CODE ON) if(NOT CMAKE_POSITION_INDEPENDENT_CODE)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()
# Generate compile_commands.json file (https://clang.llvm.org/docs/JSONCompilationDatabase.html) # Generate compile_commands.json file (https://clang.llvm.org/docs/JSONCompilationDatabase.html)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

View File

@@ -38,146 +38,144 @@ endif()
# libFairMQ header files # # libFairMQ header files #
########################## ##########################
set(FAIRMQ_PUBLIC_HEADER_FILES set(FAIRMQ_PUBLIC_HEADER_FILES
DeviceRunner.h DeviceRunner.h
EventManager.h EventManager.h
FairMQChannel.h FairMQChannel.h
FairMQDevice.h FairMQDevice.h
FairMQLogger.h FairMQLogger.h
FairMQMessage.h FairMQMessage.h
FairMQParts.h FairMQParts.h
FairMQPoller.h FairMQPoller.h
FairMQUnmanagedRegion.h FairMQUnmanagedRegion.h
FairMQSocket.h FairMQSocket.h
FairMQStateMachine.h FairMQStateMachine.h
FairMQTransportFactory.h FairMQTransportFactory.h
Tools.h Tools.h
Transports.h Transports.h
options/FairMQProgOptions.h options/FairMQProgOptions.h
options/FairProgOptions.h options/FairProgOptions.h
Plugin.h Plugin.h
PluginManager.h PluginManager.h
PluginServices.h PluginServices.h
runFairMQDevice.h runFairMQDevice.h
tools/CppSTL.h tools/CppSTL.h
tools/Network.h tools/Network.h
tools/Process.h tools/Process.h
tools/RateLimit.h tools/RateLimit.h
tools/Strings.h tools/Strings.h
tools/Unique.h tools/Unique.h
tools/Version.h tools/Version.h
) )
set(FAIRMQ_PRIVATE_HEADER_FILES set(FAIRMQ_PRIVATE_HEADER_FILES
devices/FairMQBenchmarkSampler.h devices/FairMQBenchmarkSampler.h
devices/FairMQMerger.h devices/FairMQMerger.h
devices/FairMQMultiplier.h devices/FairMQMultiplier.h
devices/FairMQProxy.h devices/FairMQProxy.h
devices/FairMQSink.h devices/FairMQSink.h
devices/FairMQSplitter.h devices/FairMQSplitter.h
options/FairMQParser.h options/FairMQParser.h
options/FairMQSuboptParser.h options/FairMQSuboptParser.h
options/FairProgOptionsHelper.h options/FairProgOptionsHelper.h
plugins/Builtin.h plugins/Builtin.h
plugins/Control.h plugins/Control.h
StateMachine.h StateMachine.h
shmem/FairMQMessageSHM.h shmem/FairMQMessageSHM.h
shmem/FairMQPollerSHM.h shmem/FairMQPollerSHM.h
shmem/FairMQUnmanagedRegionSHM.h shmem/FairMQUnmanagedRegionSHM.h
shmem/FairMQSocketSHM.h shmem/FairMQSocketSHM.h
shmem/FairMQTransportFactorySHM.h shmem/FairMQTransportFactorySHM.h
shmem/Common.h shmem/Common.h
shmem/Manager.h shmem/Manager.h
shmem/Monitor.h shmem/Region.h
shmem/Region.h zeromq/FairMQMessageZMQ.h
zeromq/FairMQMessageZMQ.h zeromq/FairMQPollerZMQ.h
zeromq/FairMQPollerZMQ.h zeromq/FairMQUnmanagedRegionZMQ.h
zeromq/FairMQUnmanagedRegionZMQ.h zeromq/FairMQSocketZMQ.h
zeromq/FairMQSocketZMQ.h zeromq/FairMQTransportFactoryZMQ.h
zeromq/FairMQTransportFactoryZMQ.h
) )
if(BUILD_NANOMSG_TRANSPORT) if(BUILD_NANOMSG_TRANSPORT)
set(FAIRMQ_PRIVATE_HEADER_FILES ${FAIRMQ_PRIVATE_HEADER_FILES} set(FAIRMQ_PRIVATE_HEADER_FILES ${FAIRMQ_PRIVATE_HEADER_FILES}
nanomsg/FairMQMessageNN.h nanomsg/FairMQMessageNN.h
nanomsg/FairMQPollerNN.h nanomsg/FairMQPollerNN.h
nanomsg/FairMQUnmanagedRegionNN.h nanomsg/FairMQUnmanagedRegionNN.h
nanomsg/FairMQSocketNN.h nanomsg/FairMQSocketNN.h
nanomsg/FairMQTransportFactoryNN.h nanomsg/FairMQTransportFactoryNN.h
) )
endif() endif()
if(BUILD_OFI_TRANSPORT) if(BUILD_OFI_TRANSPORT)
set(FAIRMQ_PRIVATE_HEADER_FILES ${FAIRMQ_PRIVATE_HEADER_FILES} set(FAIRMQ_PRIVATE_HEADER_FILES ${FAIRMQ_PRIVATE_HEADER_FILES}
ofi/Context.h ofi/Context.h
ofi/Message.h ofi/Message.h
ofi/Poller.h ofi/Poller.h
ofi/Socket.h ofi/Socket.h
ofi/TransportFactory.h ofi/TransportFactory.h
) )
endif() endif()
########################## ##########################
# libFairMQ source files # # libFairMQ source files #
########################## ##########################
set(FAIRMQ_SOURCE_FILES set(FAIRMQ_SOURCE_FILES
DeviceRunner.cxx DeviceRunner.cxx
FairMQChannel.cxx FairMQChannel.cxx
FairMQDevice.cxx FairMQDevice.cxx
FairMQLogger.cxx FairMQLogger.cxx
FairMQMessage.cxx FairMQMessage.cxx
FairMQPoller.cxx FairMQPoller.cxx
FairMQSocket.cxx FairMQSocket.cxx
FairMQStateMachine.cxx FairMQStateMachine.cxx
FairMQTransportFactory.cxx FairMQTransportFactory.cxx
devices/FairMQBenchmarkSampler.cxx devices/FairMQBenchmarkSampler.cxx
devices/FairMQMerger.cxx devices/FairMQMerger.cxx
devices/FairMQMultiplier.cxx devices/FairMQMultiplier.cxx
devices/FairMQProxy.cxx devices/FairMQProxy.cxx
devices/FairMQSplitter.cxx devices/FairMQSplitter.cxx
options/FairMQParser.cxx options/FairMQParser.cxx
options/FairMQProgOptions.cxx options/FairMQProgOptions.cxx
options/FairMQSuboptParser.cxx options/FairMQSuboptParser.cxx
Plugin.cxx Plugin.cxx
PluginManager.cxx PluginManager.cxx
PluginServices.cxx PluginServices.cxx
plugins/Control.cxx plugins/Control.cxx
StateMachine.cxx StateMachine.cxx
shmem/FairMQMessageSHM.cxx shmem/FairMQMessageSHM.cxx
shmem/FairMQPollerSHM.cxx shmem/FairMQPollerSHM.cxx
shmem/FairMQUnmanagedRegionSHM.cxx shmem/FairMQUnmanagedRegionSHM.cxx
shmem/FairMQSocketSHM.cxx shmem/FairMQSocketSHM.cxx
shmem/FairMQTransportFactorySHM.cxx shmem/FairMQTransportFactorySHM.cxx
shmem/Manager.cxx shmem/Manager.cxx
shmem/Monitor.cxx shmem/Region.cxx
shmem/Region.cxx tools/Network.cxx
tools/Network.cxx tools/Process.cxx
tools/Process.cxx tools/Unique.cxx
tools/Unique.cxx zeromq/FairMQMessageZMQ.cxx
zeromq/FairMQMessageZMQ.cxx zeromq/FairMQPollerZMQ.cxx
zeromq/FairMQPollerZMQ.cxx zeromq/FairMQUnmanagedRegionZMQ.cxx
zeromq/FairMQUnmanagedRegionZMQ.cxx zeromq/FairMQSocketZMQ.cxx
zeromq/FairMQSocketZMQ.cxx zeromq/FairMQTransportFactoryZMQ.cxx
zeromq/FairMQTransportFactoryZMQ.cxx
) )
if(BUILD_NANOMSG_TRANSPORT) if(BUILD_NANOMSG_TRANSPORT)
set(FAIRMQ_SOURCE_FILES ${FAIRMQ_SOURCE_FILES} set(FAIRMQ_SOURCE_FILES ${FAIRMQ_SOURCE_FILES}
nanomsg/FairMQMessageNN.cxx nanomsg/FairMQMessageNN.cxx
nanomsg/FairMQPollerNN.cxx nanomsg/FairMQPollerNN.cxx
nanomsg/FairMQUnmanagedRegionNN.cxx nanomsg/FairMQUnmanagedRegionNN.cxx
nanomsg/FairMQSocketNN.cxx nanomsg/FairMQSocketNN.cxx
nanomsg/FairMQTransportFactoryNN.cxx nanomsg/FairMQTransportFactoryNN.cxx
) )
endif() endif()
if(BUILD_OFI_TRANSPORT) if(BUILD_OFI_TRANSPORT)
set(FAIRMQ_SOURCE_FILES ${FAIRMQ_SOURCE_FILES} set(FAIRMQ_SOURCE_FILES ${FAIRMQ_SOURCE_FILES}
ofi/Context.cxx ofi/Context.cxx
ofi/Message.cxx ofi/Message.cxx
ofi/Poller.cxx ofi/Poller.cxx
ofi/Socket.cxx ofi/Socket.cxx
ofi/TransportFactory.cxx ofi/TransportFactory.cxx
) )
endif() endif()
@@ -197,7 +195,7 @@ if(FAST_BUILD)
else() else()
set(_target FairMQ) set(_target FairMQ)
endif() endif()
add_library(${_target} SHARED add_library(${_target}
${FAIRMQ_SOURCE_FILES} ${FAIRMQ_SOURCE_FILES}
${FAIRMQ_PUBLIC_HEADER_FILES} # for IDE integration ${FAIRMQ_PUBLIC_HEADER_FILES} # for IDE integration
${FAIRMQ_PRIVATE_HEADER_FILES} # for IDE integration ${FAIRMQ_PRIVATE_HEADER_FILES} # for IDE integration
@@ -211,12 +209,12 @@ endif()
# include directories # # include directories #
####################### #######################
target_include_directories(${_target} target_include_directories(${_target}
PUBLIC # consumers inherit public include directories PUBLIC # consumers inherit public include directories
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}> $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}> $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<INSTALL_INTERFACE:include/fairmq> $<INSTALL_INTERFACE:include/fairmq>
$<INSTALL_INTERFACE:include> $<INSTALL_INTERFACE:include>
) )
################## ##################
@@ -234,25 +232,26 @@ if(optional_deps)
endif() endif()
target_link_libraries(${_target} target_link_libraries(${_target}
INTERFACE # only consumers link against interface dependencies INTERFACE # only consumers link against interface dependencies
PUBLIC # libFairMQ AND consumers of libFairMQ link aginst public dependencies PUBLIC # libFairMQ AND consumers of libFairMQ link aginst public dependencies
Threads::Threads Threads::Threads
dl dl
Boost::boost $<$<PLATFORM_ID:Linux>:rt>
Boost::program_options Boost::boost
Boost::thread Boost::program_options
Boost::system Boost::thread
Boost::filesystem Boost::system
Boost::regex Boost::filesystem
Boost::date_time Boost::regex
Boost::signals Boost::date_time
FairLogger::FairLogger Boost::signals
FairLogger::FairLogger
PRIVATE # only libFairMQ links against private dependencies PRIVATE # only libFairMQ links against private dependencies
libzmq libzmq
${NANOMSG_DEPS} ${NANOMSG_DEPS}
${OFI_DEPS} ${OFI_DEPS}
) )
set_target_properties(${_target} PROPERTIES set_target_properties(${_target} PROPERTIES
VERSION ${PROJECT_GIT_VERSION} VERSION ${PROJECT_GIT_VERSION}
@@ -299,8 +298,17 @@ target_link_libraries(fairmq-splitter FairMQ)
add_executable(runConfigExample options/runConfigEx.cxx) add_executable(runConfigExample options/runConfigEx.cxx)
target_link_libraries(runConfigExample FairMQ) target_link_libraries(runConfigExample FairMQ)
add_executable(fairmq-shmmonitor shmem/runMonitor.cxx) add_executable(fairmq-shmmonitor shmem/Monitor.cxx shmem/Monitor.h shmem/runMonitor.cxx)
target_link_libraries(fairmq-shmmonitor FairMQ) target_link_libraries(fairmq-shmmonitor PUBLIC
Threads::Threads
$<$<PLATFORM_ID:Linux>:rt>
Boost::boost
Boost::date_time
Boost::program_options
)
target_include_directories(fairmq-shmmonitor PUBLIC
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}>
)
add_executable(fairmq-uuid-gen run/runUuidGenerator.cxx) add_executable(fairmq-uuid-gen run/runUuidGenerator.cxx)
target_link_libraries(fairmq-uuid-gen FairMQ) target_link_libraries(fairmq-uuid-gen FairMQ)
@@ -310,27 +318,28 @@ target_link_libraries(fairmq-uuid-gen FairMQ)
# install # # install #
########### ###########
install( install(
TARGETS TARGETS
FairMQ FairMQ
fairmq-bsampler fairmq-bsampler
fairmq-merger fairmq-merger
fairmq-multiplier fairmq-multiplier
fairmq-proxy fairmq-proxy
fairmq-sink fairmq-sink
fairmq-splitter fairmq-splitter
fairmq-shmmonitor fairmq-shmmonitor
fairmq-uuid-gen fairmq-uuid-gen
EXPORT ${PROJECT_EXPORT_SET} EXPORT ${PROJECT_EXPORT_SET}
RUNTIME DESTINATION ${PROJECT_INSTALL_BINDIR} RUNTIME DESTINATION ${PROJECT_INSTALL_BINDIR}
LIBRARY DESTINATION ${PROJECT_INSTALL_LIBDIR} LIBRARY DESTINATION ${PROJECT_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${PROJECT_INSTALL_LIBDIR}
) )
# preserve relative path and prepend fairmq # preserve relative path and prepend fairmq
foreach(HEADER ${FAIRMQ_PUBLIC_HEADER_FILES}) foreach(HEADER ${FAIRMQ_PUBLIC_HEADER_FILES})
get_filename_component(_path ${HEADER} DIRECTORY) get_filename_component(_path ${HEADER} DIRECTORY)
file(TO_CMAKE_PATH ${PROJECT_INSTALL_INCDIR}/${_path} _destination) file(TO_CMAKE_PATH ${PROJECT_INSTALL_INCDIR}/${_path} _destination)
install(FILES ${HEADER} install(FILES ${HEADER}
DESTINATION ${_destination} DESTINATION ${_destination}
) )
endforeach() endforeach()

View File

@@ -1,5 +1,5 @@
/******************************************************************************** /********************************************************************************
* Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * * Copyright (C) 2017-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
* * * *
* This software is distributed under the terms of the * * This software is distributed under the terms of the *
* GNU Lesser General Public Licence (LGPL) version 3, * * GNU Lesser General Public Licence (LGPL) version 3, *
@@ -7,16 +7,19 @@
********************************************************************************/ ********************************************************************************/
#include "DeviceRunner.h" #include "DeviceRunner.h"
#include <fairmq/Tools.h>
#include <exception> #include <exception>
#include <fairmq/Tools.h>
#include <fairmq/Version.h>
using namespace fair::mq; using namespace fair::mq;
DeviceRunner::DeviceRunner(int argc, char* const argv[]) DeviceRunner::DeviceRunner(int argc, char* const argv[], bool printLogo)
: fRawCmdLineArgs(tools::ToStrVector(argc, argv, false)) : fRawCmdLineArgs(tools::ToStrVector(argc, argv, false))
, fConfig() , fConfig()
, fDevice(nullptr) , fDevice(nullptr)
, fPluginManager(fRawCmdLineArgs) , fPluginManager(fRawCmdLineArgs)
, fPrintLogo(printLogo)
, fEvents() , fEvents()
{} {}
@@ -33,26 +36,34 @@ auto DeviceRunner::Run() -> int
fEvents.Emit<hooks::SetCustomCmdLineOptions>(*this); fEvents.Emit<hooks::SetCustomCmdLineOptions>(*this);
//////////////////////// ////////////////////////
fPluginManager.ForEachPluginProgOptions([&](boost::program_options::options_description options){ fPluginManager.ForEachPluginProgOptions(
fConfig.AddToCmdLineOptions(options); [&](boost::program_options::options_description options) {
}); fConfig.AddToCmdLineOptions(options);
});
fConfig.AddToCmdLineOptions(fPluginManager.ProgramOptions()); fConfig.AddToCmdLineOptions(fPluginManager.ProgramOptions());
////// CALL HOOK /////// ////// CALL HOOK ///////
fEvents.Emit<hooks::ModifyRawCmdLineArgs>(*this); fEvents.Emit<hooks::ModifyRawCmdLineArgs>(*this);
//////////////////////// ////////////////////////
if (fConfig.ParseAll(fRawCmdLineArgs, true)) if (fConfig.ParseAll(fRawCmdLineArgs, true)) {
{
return 0; return 0;
} }
if (fPrintLogo) {
LOG(info) << std::endl
<< " ______ _ _______ _________ " << std::endl
<< " / ____/___ _(_)_______ |/ /_ __ \\ version " << FAIRMQ_GIT_VERSION << std::endl
<< " / /_ / __ `/ / ___/__ /|_/ /_ / / / build " << FAIRMQ_BUILD_TYPE << std::endl
<< " / __/ / /_/ / / / _ / / / / /_/ / " << FAIRMQ_REPO_URL << std::endl
<< " /_/ \\__,_/_/_/ /_/ /_/ \\___\\_\\ " << FAIRMQ_LICENSE << " © " << FAIRMQ_COPYRIGHT << std::endl;
}
////// CALL HOOK /////// ////// CALL HOOK ///////
fEvents.Emit<hooks::InstantiateDevice>(*this); fEvents.Emit<hooks::InstantiateDevice>(*this);
//////////////////////// ////////////////////////
if (!fDevice) if (!fDevice) {
{
LOG(error) << "getDevice(): no valid device provided. Exiting."; LOG(error) << "getDevice(): no valid device provided. Exiting.";
return 1; return 1;
} }
@@ -61,16 +72,14 @@ auto DeviceRunner::Run() -> int
// Handle --print-channels // Handle --print-channels
fDevice->RegisterChannelEndpoints(); fDevice->RegisterChannelEndpoints();
if (fConfig.Count("print-channels")) if (fConfig.Count("print-channels")) {
{
fDevice->PrintRegisteredChannels(); fDevice->PrintRegisteredChannels();
fDevice->ChangeState(FairMQDevice::END); fDevice->ChangeState(FairMQDevice::END);
return 0; return 0;
} }
// Handle --version // Handle --version
if (fConfig.Count("version")) if (fConfig.Count("version")) {
{
std::cout << "User device version: " << fDevice->GetVersion() << std::endl; std::cout << "User device version: " << fDevice->GetVersion() << std::endl;
std::cout << "FAIRMQ_INTERFACE_VERSION: " << FAIRMQ_INTERFACE_VERSION << std::endl; std::cout << "FAIRMQ_INTERFACE_VERSION: " << FAIRMQ_INTERFACE_VERSION << std::endl;
fDevice->ChangeState(FairMQDevice::END); fDevice->ChangeState(FairMQDevice::END);
@@ -99,18 +108,15 @@ auto DeviceRunner::Run() -> int
auto DeviceRunner::RunWithExceptionHandlers() -> int auto DeviceRunner::RunWithExceptionHandlers() -> int
{ {
try try {
{
return Run(); return Run();
} } catch (std::exception& e) {
catch (std::exception& e) LOG(error) << "Unhandled exception reached the top of main: " << e.what()
{ << ", application will now exit";
LOG(error) << "Unhandled exception reached the top of main: " << e.what() << ", application will now exit";
return 1; return 1;
} } catch (...) {
catch (...) LOG(error) << "Non-exception instance being thrown. Please make sure you use "
{ "std::runtime_exception() instead. Application will now exit.";
LOG(error) << "Non-exception instance being thrown. Please make sure you use std::runtime_exception() instead. Application will now exit.";
return 1; return 1;
} }
} }

View File

@@ -1,5 +1,5 @@
/******************************************************************************** /********************************************************************************
* Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * * Copyright (C) 2017-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
* * * *
* This software is distributed under the terms of the * * This software is distributed under the terms of the *
* GNU Lesser General Public Licence (LGPL) version 3, * * GNU Lesser General Public Licence (LGPL) version 3, *
@@ -20,10 +20,8 @@
#include <string> #include <string>
#include <vector> #include <vector>
namespace fair namespace fair {
{ namespace mq {
namespace mq
{
/** /**
* @class DeviceRunner DeviceRunner.h <fairmq/DeviceRunner.h> * @class DeviceRunner DeviceRunner.h <fairmq/DeviceRunner.h>
@@ -31,7 +29,8 @@ namespace mq
* *
* Runs a single FairMQ device with config and plugin support. * Runs a single FairMQ device with config and plugin support.
* *
* For customization user hooks are executed at various steps during device launch/shutdown in the following sequence: * For customization user hooks are executed at various steps during device launch/shutdown in the
* following sequence:
* *
* LoadPlugins * LoadPlugins
* | * |
@@ -44,34 +43,41 @@ namespace mq
* v * v
* InstatiateDevice * InstatiateDevice
* *
* Each hook has access to all members of the DeviceRunner and really only differs by the point in time it is called. * Each hook has access to all members of the DeviceRunner and really only differs by the point in
* time it is called.
* *
* For an example usage of this class see the fairmq/runFairMQDevice.h header. * For an example usage of this class see the fairmq/runFairMQDevice.h header.
*/ */
class DeviceRunner class DeviceRunner
{ {
public: public:
DeviceRunner(int argc, char* const argv[]); DeviceRunner(int argc, char* const argv[], bool printLogo = true);
auto Run() -> int; auto Run() -> int;
auto RunWithExceptionHandlers() -> int; auto RunWithExceptionHandlers() -> int;
template<typename H> template<typename H>
auto AddHook(std::function<void(DeviceRunner&)> hook) -> void { fEvents.Subscribe<H>("runner", hook); } auto AddHook(std::function<void(DeviceRunner&)> hook) -> void
{
fEvents.Subscribe<H>("runner", hook);
}
template<typename H> template<typename H>
auto RemoveHook() -> void { fEvents.Unsubscribe<H>("runner"); } auto RemoveHook() -> void
{
fEvents.Unsubscribe<H>("runner");
}
std::vector<std::string> fRawCmdLineArgs; std::vector<std::string> fRawCmdLineArgs;
FairMQProgOptions fConfig; FairMQProgOptions fConfig;
std::unique_ptr<FairMQDevice> fDevice; std::unique_ptr<FairMQDevice> fDevice;
PluginManager fPluginManager; PluginManager fPluginManager;
const bool fPrintLogo;
private: private:
EventManager fEvents; EventManager fEvents;
}; };
namespace hooks namespace hooks {
{
struct LoadPlugins : Event<DeviceRunner&> {}; struct LoadPlugins : Event<DeviceRunner&> {};
struct SetCustomCmdLineOptions : Event<DeviceRunner&> {}; struct SetCustomCmdLineOptions : Event<DeviceRunner&> {};
struct ModifyRawCmdLineArgs : Event<DeviceRunner&> {}; struct ModifyRawCmdLineArgs : Event<DeviceRunner&> {};

View File

@@ -15,5 +15,9 @@
#define FAIRMQ_VERSION_PATCH @PROJECT_VERSION_PATCH@ #define FAIRMQ_VERSION_PATCH @PROJECT_VERSION_PATCH@
#define FAIRMQ_GIT_VERSION "@PROJECT_GIT_VERSION@" #define FAIRMQ_GIT_VERSION "@PROJECT_GIT_VERSION@"
#define FAIRMQ_GIT_DATE "@PROJECT_GIT_DATE@" #define FAIRMQ_GIT_DATE "@PROJECT_GIT_DATE@"
#define FAIRMQ_REPO_URL "https://github.com/FairRootGroup/FairMQ"
#define FAIRMQ_LICENSE "LGPL-3.0"
#define FAIRMQ_COPYRIGHT "2012-2018 GSI"
#define FAIRMQ_BUILD_TYPE "@CMAKE_BUILD_TYPE@"
#endif // FAIR_MQ_VERSION_H #endif // FAIR_MQ_VERSION_H