# Build `zio` ###### tags: `DAQ` `protoDUNE` `artdaq` `DUNE` `Software Management` ## Build zyre UPS product The UPS tarball is [here v2.0.0.](https://home.fnal.gov/~dingpf/zyre-2.0.0-sl7-x86_64-e17.tar.bz2) It depends on the following UPS products: * [ZMQ v4.3.2](https://home.fnal.gov/~dingpf/zmq-4.3.2-sl7-x86_64-e17.tar.bz2) * [CZMQ v4.2.0](https://home.fnal.gov/~dingpf/czmq-4.2.0-sl7-x86_64-e17.tar.bz2). Notes for building the UPS product: * [repo](https://github.com/zeromq/zyre) * [Source tarball](https://github.com/zeromq/zyre/releases/download/v2.0.0/zyre-2.0.0.tar.gz) * Similar as building `czmq`; * Add `czmq` and `zmq`'s `lib/pkgconfig` to `PKG_CONFIG_PATH`. * Run `configure` followed by `make`; ## Install spdlog * [repo](https://github.com/gabime/spdlog) * This is installed locally; * Though there's `spdlog-devel` RPM package available, but that package does not come with its pkgconfig file; * So we are installing it manually as below: ``` git clone https://github.com/gabime/spdlog.git cd spdlog && mkdir build && cd build cmake .. && make -j sudo make install # note: spdlog's pkgconfig by default will be installed to /usr/local/lib/pkgconfig/spdlog.pc ``` ## Building zio * [repo](https://github.com/brettviren/zio) ``` setup zyre v2_0_0 -q e17 export PKG_CONFIG_PATH=${ZMQ_LIB}/pkgconfig:${CZMQ_LIB}/pkgconfig:${ZYRE_LIB}/pkgconfig:/usr/local/lib/pkgconfig git clone https://github.com/brettviren/zio.git cd zio ./waf configure --prefix=/prefix_to_install ./waf install ``` The configuration was successful. However, the installation (compliation) went into errors like: ``` [root@e143c1e7038b zio]# export PKG_CONFIG_PATH=${ZMQ_LIB}/pkgconfig:${CZMQ_LIB}/pkgconfig:${ZYRE_LIB}/pkgconfig:/usr/local/lib/pkgconfig [root@e143c1e7038b zio]# ./waf configure --prefix=/products/zio/v0_0_0/source/install Setting top to : /products/zio/v0_0_0/source/zio Setting out to : /products/zio/v0_0_0/source/zio/build Checking for 'g++' (C++ compiler) : /cvmfs/larsoft.opensciencegrid.org/products/gcc/v7_3_0/Linux64bit+3.10-2.17/bin/g++ Checking for program 'pkg-config' : /usr/bin/pkg-config Checking for 'libzmq' : yes Checking for 'libczmq' : yes Checking for 'libzyre' : yes Checking for 'spdlog' : yes Checking for library ['pthread'] : yes 'configure' finished successfully (0.217s) [root@e143c1e7038b zio]# ./waf install Waf: Entering directory `/products/zio/v0_0_0/source/zio/build' [ 1/82] Compiling src/node.cpp [ 2/82] Compiling src/domo_worker.cpp [ 3/82] Compiling src/domo_broker.cpp [ 4/82] Compiling src/message.cpp [ 5/82] Compiling src/util.cpp [ 6/82] Compiling src/main.cpp [ 7/82] Compiling src/domo_client.cpp [ 8/82] Compiling src/tens.cpp ../src/domo_client.cpp: In constructor ‘zio::domo::Client::Client(zmq::socket_t&, std::__cxx11::string)’: ../src/domo_client.cpp:12:9: error: ‘ZMQ_CLIENT’ was not declared in this scope if (ZMQ_CLIENT == stype) { ^~~~~~~~~~ ../src/domo_client.cpp:12:9: note: suggested alternative: ‘ZMQ_EVENTS’ if (ZMQ_CLIENT == stype) { ^~~~~~~~~~ ZMQ_EVENTS ../src/domo_client.cpp: In member function ‘void zio::domo::Client::recv(zmq::multipart_t&)’: ../src/domo_client.cpp:56:10: error: ‘poller_t’ is not a member of ‘zio’ zio::poller_t<> poller; ^~~~~~~~ ../src/domo_client.cpp:56:19: error: expected primary-expression before ‘>’ token zio::poller_t<> poller; ^ ../src/domo_client.cpp:56:21: error: ‘poller’ was not declared in this scope zio::poller_t<> poller; ^~~~~~ ../src/domo_client.cpp:56:21: note: suggested alternative: ‘popen’ zio::poller_t<> poller; ^~~~~~ popen ../src/domo_client.cpp:57:29: error: ‘zio::event_flags’ has not been declared poller.add(m_sock, zio::event_flags::pollin); ^~~~~~~~~~~ ../src/domo_client.cpp:59:23: error: ‘poller_event’ is not a member of ‘zio’ std::vector< zio::poller_event<> > events(1); ^~~~~~~~~~~~ ../src/domo_client.cpp:59:36: error: template argument 1 is invalid std::vector< zio::poller_event<> > events(1); ^ ../src/domo_client.cpp:59:36: error: template argument 2 is invalid ../src/domo_client.cpp:59:38: error: expected unqualified-id before ‘>’ token std::vector< zio::poller_event<> > events(1); ^ ../src/domo_client.cpp:60:30: error: ‘events’ was not declared in this scope int rc = poller.wait_all(events, m_timeout); ^~~~~~ ../src/domo_client.cpp:60:30: note: suggested alternative: ‘fgets’ int rc = poller.wait_all(events, m_timeout); ^~~~~~ fgets ../src/util.cpp: In function ‘bool zio::is_serverish(zmq::socket_t&)’: ../src/util.cpp:95:12: error: ‘ZMQ_SERVER’ was not declared in this scope return ZMQ_SERVER == stype or ZMQ_ROUTER == stype; ^~~~~~~~~~ ../src/util.cpp:95:12: note: suggested alternative: ‘ZMQ_DEALER’ return ZMQ_SERVER == stype or ZMQ_ROUTER == stype; ^~~~~~~~~~ ZMQ_DEALER ../src/util.cpp: In function ‘bool zio::is_clientish(zmq::socket_t&)’: ../src/util.cpp:100:12: error: ‘ZMQ_CLIENT’ was not declared in this scope return ZMQ_CLIENT == stype or ZMQ_DEALER == stype; ^~~~~~~~~~ ../src/util.cpp:100:12: note: suggested alternative: ‘ZMQ_EVENTS’ return ZMQ_CLIENT == stype or ZMQ_DEALER == stype; ^~~~~~~~~~ ZMQ_EVENTS ../src/util.cpp: In function ‘zio::remote_identity_t zio::recv_serverish(zmq::socket_t&, zmq::multipart_t&)’: ../src/util.cpp:107:9: error: ‘ZMQ_SERVER’ was not declared in this scope if (ZMQ_SERVER == stype) { ^~~~~~~~~~ ../src/util.cpp:107:9: note: suggested alternative: ‘ZMQ_DEALER’ if (ZMQ_SERVER == stype) { ^~~~~~~~~~ ZMQ_DEALER ../src/util.cpp: In function ‘zio::remote_identity_t zio::recv_server(zmq::socket_t&, zmq::multipart_t&)’: ../src/util.cpp:122:44: error: ‘class zmq::message_t’ has no member named ‘routing_id’ remote_identity_t remid = to_remid(msg.routing_id()); ^~~~~~~~~~ ../src/util.cpp:123:54: error: ‘class zmq::message_t’ has no member named ‘routing_id’ zio::debug("recv_server: rid={} remid='{}'", msg.routing_id(), zio::binstr(remid)); ^~~~~~~~~~ ../src/util.cpp: In function ‘void zio::send_serverish(zmq::socket_t&, zmq::multipart_t&, const remote_identity_t&)’: ../src/util.cpp:144:9: error: ‘ZMQ_SERVER’ was not declared in this scope if (ZMQ_SERVER == stype) { ^~~~~~~~~~ ../src/util.cpp:144:9: note: suggested alternative: ‘ZMQ_DEALER’ if (ZMQ_SERVER == stype) { ^~~~~~~~~~ ZMQ_DEALER ../src/util.cpp: In function ‘void zio::send_server(zmq::socket_t&, zmq::multipart_t&, const remote_identity_t&)’: ../src/util.cpp:163:9: error: ‘class zmq::message_t’ has no member named ‘set_routing_id’ msg.set_routing_id(to_rid(remid)); ^~~~~~~~~~~~~~ ../src/util.cpp: In function ‘void zio::recv_clientish(zmq::socket_t&, zmq::multipart_t&)’: ../src/util.cpp:181:9: error: ‘ZMQ_CLIENT’ was not declared in this scope if (ZMQ_CLIENT == stype) { ^~~~~~~~~~ ../src/util.cpp:181:9: note: suggested alternative: ‘ZMQ_EVENTS’ if (ZMQ_CLIENT == stype) { ^~~~~~~~~~ ZMQ_EVENTS ../src/util.cpp: In function ‘void zio::send_clientish(zmq::socket_t&, zmq::multipart_t&)’: ../src/util.cpp:216:9: error: ‘ZMQ_CLIENT’ was not declared in this scope if (ZMQ_CLIENT == stype) { ^~~~~~~~~~ ../src/util.cpp:216:9: note: suggested alternative: ‘ZMQ_EVENTS’ if (ZMQ_CLIENT == stype) { ^~~~~~~~~~ ZMQ_EVENTS ../src/domo_worker.cpp: In constructor ‘zio::domo::Worker::Worker(zmq::socket_t&, std::__cxx11::string, std::__cxx11::string)’: ../src/domo_worker.cpp:16:9: error: ‘ZMQ_CLIENT’ was not declared in this scope if (ZMQ_CLIENT == stype) { ^~~~~~~~~~ ../src/domo_worker.cpp:16:9: note: suggested alternative: ‘ZMQ_EVENTS’ if (ZMQ_CLIENT == stype) { ^~~~~~~~~~ ZMQ_EVENTS ../src/domo_worker.cpp: In member function ‘void zio::domo::Worker::recv(zmq::multipart_t&)’: ../src/domo_worker.cpp:74:10: error: ‘poller_t’ is not a member of ‘zio’ zio::poller_t<> poller; ^~~~~~~~ ../src/domo_worker.cpp:74:19: error: expected primary-expression before ‘>’ token zio::poller_t<> poller; ^ ../src/domo_worker.cpp:74:21: error: ‘poller’ was not declared in this scope zio::poller_t<> poller; ^~~~~~ ../src/domo_worker.cpp:74:21: note: suggested alternative: ‘Worker’ zio::poller_t<> poller; ^~~~~~ Worker ../src/domo_worker.cpp:75:29: error: ‘zio::event_flags’ has not been declared poller.add(m_sock, zio::event_flags::pollin); ^~~~~~~~~~~ ../src/domo_worker.cpp:77:23: error: ‘poller_event’ is not a member of ‘zio’ std::vector< zio::poller_event<> > events(1); ^~~~~~~~~~~~ ../src/domo_worker.cpp:77:36: error: template argument 1 is invalid std::vector< zio::poller_event<> > events(1); ^ ../src/domo_worker.cpp:77:36: error: template argument 2 is invalid ../src/domo_worker.cpp:77:38: error: expected unqualified-id before ‘>’ token std::vector< zio::poller_event<> > events(1); ^ ../src/domo_worker.cpp:78:30: error: ‘events’ was not declared in this scope int rc = poller.wait_all(events, m_heartbeat); ^~~~~~ ../src/domo_worker.cpp:78:30: note: suggested alternative: ‘fgets’ int rc = poller.wait_all(events, m_heartbeat); ^~~~~~ fgets ../src/domo_worker.cpp: In function ‘void zio::domo::echo_worker(zmq::socket_t&, std::__cxx11::string, int)’: ../src/domo_worker.cpp:149:10: error: ‘poller_t’ is not a member of ‘zio’ zio::poller_t<> poller; ^~~~~~~~ ../src/domo_worker.cpp:149:19: error: expected primary-expression before ‘>’ token zio::poller_t<> poller; ^ ../src/domo_worker.cpp:149:21: error: ‘poller’ was not declared in this scope zio::poller_t<> poller; ^~~~~~ ../src/domo_worker.cpp:149:21: note: suggested alternative: ‘worker’ zio::poller_t<> poller; ^~~~~~ worker ../src/domo_worker.cpp:150:27: error: ‘zio::event_flags’ has not been declared poller.add(link, zio::event_flags::pollin); ^~~~~~~~~~~ ../src/domo_worker.cpp:151:27: error: ‘zio::event_flags’ has not been declared poller.add(sock, zio::event_flags::pollin); ^~~~~~~~~~~ ../src/domo_worker.cpp:165:27: error: ‘poller_event’ is not a member of ‘zio’ std::vector< zio::poller_event<> > events(2); ^~~~~~~~~~~~ ../src/domo_worker.cpp:165:40: error: template argument 1 is invalid std::vector< zio::poller_event<> > events(2); ^ ../src/domo_worker.cpp:165:40: error: template argument 2 is invalid ../src/domo_worker.cpp:165:42: error: expected unqualified-id before ‘>’ token std::vector< zio::poller_event<> > events(2); ^ ../src/domo_worker.cpp:166:39: error: ‘events’ was not declared in this scope int nevents = poller.wait_all(events, poll_resolution); ^~~~~~ ../src/domo_worker.cpp:166:39: note: suggested alternative: ‘nevents’ int nevents = poller.wait_all(events, poll_resolution); ^~~~~~ nevents ../src/message.cpp: In member function ‘zmq::message_t zio::Message::encode() const’: ../src/message.cpp:125:15: error: ‘class zmq::message_t’ has no member named ‘set_routing_id’ spmsg.set_routing_id(rid); ^~~~~~~~~~~~~~ ../src/message.cpp: In member function ‘void zio::Message::decode(const zmq::message_t&)’: ../src/message.cpp:133:29: error: ‘const class zmq::message_t’ has no member named ‘routing_id’ m_remid = to_remid(data.routing_id()); ^~~~~~~~~~ ../src/domo_broker.cpp: In constructor ‘zio::domo::Broker::Broker(zmq::socket_t&)’: ../src/domo_broker.cpp:22:9: error: ‘ZMQ_SERVER’ was not declared in this scope if (ZMQ_SERVER == stype) { ^~~~~~~~~~ ../src/domo_broker.cpp:22:9: note: suggested alternative: ‘ZMQ_DEALER’ if (ZMQ_SERVER == stype) { ^~~~~~~~~~ ZMQ_DEALER ../src/domo_broker.cpp: In member function ‘void zio::domo::Broker::start()’: ../src/domo_broker.cpp:90:10: error: ‘poller_t’ is not a member of ‘zio’ zio::poller_t<> poller; ^~~~~~~~ ../src/domo_broker.cpp:90:19: error: expected primary-expression before ‘>’ token zio::poller_t<> poller; ^ ../src/domo_broker.cpp:90:21: error: ‘poller’ was not declared in this scope zio::poller_t<> poller; ^~~~~~ ../src/domo_broker.cpp:90:21: note: suggested alternative: ‘Worker’ zio::poller_t<> poller; ^~~~~~ Worker ../src/domo_broker.cpp:91:29: error: ‘zio::event_flags’ has not been declared poller.add(m_sock, zio::event_flags::pollin); ^~~~~~~~~~~ ../src/domo_broker.cpp:98:27: error: ‘poller_event’ is not a member of ‘zio’ std::vector< zio::poller_event<> > events(1); ^~~~~~~~~~~~ ../src/domo_broker.cpp:98:40: error: template argument 1 is invalid std::vector< zio::poller_event<> > events(1); ^ ../src/domo_broker.cpp:98:40: error: template argument 2 is invalid ../src/domo_broker.cpp:98:42: error: expected unqualified-id before ‘>’ token std::vector< zio::poller_event<> > events(1); ^ ../src/domo_broker.cpp:99:34: error: ‘events’ was not declared in this scope int rc = poller.wait_all(events, timeout); ^~~~~~ ../src/domo_broker.cpp:99:34: note: suggested alternative: ‘fgets’ int rc = poller.wait_all(events, timeout); ^~~~~~ fgets ../src/domo_broker.cpp: In function ‘void zio::domo::broker_actor(zmq::socket_t&, std::__cxx11::string, int)’: ../src/domo_broker.cpp:321:10: error: ‘poller_t’ is not a member of ‘zio’ zio::poller_t<> poller; ^~~~~~~~ ../src/domo_broker.cpp:321:19: error: expected primary-expression before ‘>’ token zio::poller_t<> poller; ^ ../src/domo_broker.cpp:321:21: error: ‘poller’ was not declared in this scope zio::poller_t<> poller; ^~~~~~ ../src/domo_broker.cpp:321:21: note: suggested alternative: ‘popen’ zio::poller_t<> poller; ^~~~~~ popen ../src/domo_broker.cpp:322:27: error: ‘zio::event_flags’ has not been declared poller.add(link, zio::event_flags::pollin); ^~~~~~~~~~~ ../src/domo_broker.cpp:323:27: error: ‘zio::event_flags’ has not been declared poller.add(sock, zio::event_flags::pollin); ^~~~~~~~~~~ ../src/domo_broker.cpp:332:27: error: ‘poller_event’ is not a member of ‘zio’ std::vector< zio::poller_event<> > events(2); ^~~~~~~~~~~~ ../src/domo_broker.cpp:332:40: error: template argument 1 is invalid std::vector< zio::poller_event<> > events(2); ^ ../src/domo_broker.cpp:332:40: error: template argument 2 is invalid ../src/domo_broker.cpp:332:42: error: expected unqualified-id before ‘>’ token std::vector< zio::poller_event<> > events(2); ^ ../src/domo_broker.cpp:333:39: error: ‘events’ was not declared in this scope int nevents = poller.wait_all(events, timeout); ^~~~~~ ../src/domo_broker.cpp:333:39: note: suggested alternative: ‘nevents’ int nevents = poller.wait_all(events, timeout); ^~~~~~ nevents Waf: Leaving directory `/products/zio/v0_0_0/source/zio/build' Build failed -> task in 'zio' failed with exit status 1 (run with -v to display more information) -> task in 'zio' failed with exit status 1 (run with -v to display more information) -> task in 'zio' failed with exit status 1 (run with -v to display more information) -> task in 'zio' failed with exit status 1 (run with -v to display more information) -> task in 'zio' failed with exit status 1 (run with -v to display more information) [ ```