From 26ae2758ae54ece6db0e4344ba985bed1d77bf3b Mon Sep 17 00:00:00 2001
From: Jonathan Hanks <jonathan.hanks@ligo.org>
Date: Thu, 4 Jan 2018 20:57:30 +0000
Subject: [PATCH] Forward port of r4611.  Adapted the build system so that
 libzmq is optional.

If built without zmq present the src/zmq_stream will not be built and the daqd builds will use a run_number_client that always returns a run number of 0. This is in response to a request to build the daqd variants w/o having a hard zmq dependency.

The change has been done to both the CMake and autotools build systems.


git-svn-id: https://redoubt.ligo-wa.caltech.edu/svn/advLigoRTS/trunk@4625 6dcd42c9-f523-4c6d-aada-af552506706e
---
 config/cmake/FindZMQ4.cmake              |  2 +-
 src/CMakeLists.txt                       |  8 +++-
 src/daqd/Makefile.in                     |  6 +--
 src/daqd/configure.ac                    | 14 ++++++-
 src/run_number/CMakeLists.txt            | 50 +++++++++++++++---------
 src/run_number/null_run_number_client.cc | 10 +++++
 6 files changed, 64 insertions(+), 26 deletions(-)
 create mode 100644 src/run_number/null_run_number_client.cc

diff --git a/config/cmake/FindZMQ4.cmake b/config/cmake/FindZMQ4.cmake
index 959e8c71a..c67db7d98 100644
--- a/config/cmake/FindZMQ4.cmake
+++ b/config/cmake/FindZMQ4.cmake
@@ -7,7 +7,7 @@ set(cds_find_zmq4_included TRUE)
 
 FIND_PACKAGE(PkgConfig)
 
-pkg_check_modules(LibZMQ REQUIRED libzmq>=4.0.0)
+pkg_check_modules(LibZMQ libzmq>=4.0.0)
 if (LibZMQ_FOUND)
     set (_fcpp_lib_list "")
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4437902bc..1ea7c3d58 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -4,7 +4,11 @@ add_subdirectory(dv)
 add_subdirectory(nds)
 add_subdirectory(mx_stream)
 add_subdirectory(run_number)
-add_subdirectory(zmq_stream)
+if (${LibZMQ_FOUND})
+    add_subdirectory(zmq_stream)
+else (${LibZMQ_FOUND})
+    MESSAGE("Skipping zmq_stream")
+endif (${LibZMQ_FOUND})
 if (${DEV_BUILD})
     add_subdirectory(fe_stream_test)
-endif(${DEV_BUILD})
\ No newline at end of file
+endif(${DEV_BUILD})
diff --git a/src/daqd/Makefile.in b/src/daqd/Makefile.in
index bf2a5f8d6..7c4cbf08d 100644
--- a/src/daqd/Makefile.in
+++ b/src/daqd/Makefile.in
@@ -41,8 +41,8 @@ GDSFLAGS=@GDSFLAGS@
 GDSLIBFLAGS=@GDSLIBFLAGS@
 GDSOBJECTS=@GDSOBJECTS@
 RUN_NUMBER_ARCHIVE=@srcdir@/../run_number
-RUN_NUMBER_OBJECTS=run_number_client.o
-RUN_NUMBER_LIBS=-lzmq
+RUN_NUMBER_OBJECTS=@RUN_NUMBER_CLIENT@.o
+RUN_NUMBER_LIBS=@RUN_NUMBER_LIBS@
 
 BROADCAST_OBJECTS=framesend.o gdsmutex.o
 BROADCASTOBJECTS=@BROADCASTOBJECTS@
@@ -165,7 +165,7 @@ gdsxdr_util.o:	${GDS_ARCHIVE}/gdsxdr_util.c
 sockutil.o:	${GDS_ARCHIVE}/sockutil.c
 	$(CC) -c -D_TP_DAQD -D_TESTPOINT_DIRECT=0 $<
 
-run_number_client.o: ${RUN_NUMBER_ARCHIVE}/run_number_client.cc
+@RUN_NUMBER_CLIENT@.o: ${RUN_NUMBER_ARCHIVE}/@RUN_NUMBER_CLIENT@.cc
 	$(CXX) -c ${CXXFLAGS} -I$(srcdir)/@ZMQ_INCLUDES@ $<
 
 
diff --git a/src/daqd/configure.ac b/src/daqd/configure.ac
index 34daf4f5d..9a4417d0b 100644
--- a/src/daqd/configure.ac
+++ b/src/daqd/configure.ac
@@ -35,9 +35,21 @@ AC_CHECK_HEADERS(FlexLexer.h arpa/inet.h assert.h ctype.h \
 	errno.h fcntl.h fstream.h iostream.h limits.h math.h \
 	netinet/in.h pthread.h signal.h stdio.h stdlib.h stream.h \
     string.h sys/socket.h sys/types.h time.h unistd.h tnf/probe.h \
-    regex.h regexp.h zmq.h)
+    regex.h regexp.h)
 AC_HEADER_TIME
 
+dnl check for zmq headers
+dnl =====================
+AC_CHECK_HEADER(zmq.h, [HAVE_ZMQ_H=1], [HAVE_ZMQ_H=0])
+RUN_NUMBER_CLIENT="run_number_client"
+RUN_NUMBER_LIBS="-lzmq"
+AS_IF([test "$HAVE_ZMQ_H" = "0"], [
+  RUN_NUMBER_CLIENT="null_run_number_client";
+  RUN_NUMBER_LIBS=""
+])
+AC_SUBST(RUN_NUMBER_CLIENT)
+AC_SUBST(RUN_NUMBER_LIBS)
+
 dnl check for zmq c++ wrapper
 dnl =========================
 AC_LANG_PUSH([C++])
diff --git a/src/run_number/CMakeLists.txt b/src/run_number/CMakeLists.txt
index f927be1d9..12245eca9 100644
--- a/src/run_number/CMakeLists.txt
+++ b/src/run_number/CMakeLists.txt
@@ -5,7 +5,7 @@ set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../../c
 
 INCLUDE(CheckCXXCompilerFlag)
 include(FindThreads)
-find_package(ZMQ4 REQUIRED)
+find_package(ZMQ4)
 
 find_path(CATCH_PATH catch.hpp
         HINTS /usr/include /usr/local/include ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
@@ -20,27 +20,39 @@ else(${HAS_CXX_11})
     set(_RN_CHECK_FLAGS "")
 endif (${HAS_CXX_11})
 
-add_executable(run_number_server run_number_main.cc run_number.cc run_number.hh)
-target_link_libraries(run_number_server PUBLIC zmq4::zmq)
-target_compile_options(run_number_server PRIVATE ${_RN_CHECK_FLAGS})
+if (${LibZMQ_FOUND})
 
-add_library(run_number_client STATIC run_number_client.cc run_number_client.hh)
-target_link_libraries(run_number_client PUBLIC zmq4::zmq)
-target_include_directories(run_number_client PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
-add_library(run_number::run_number ALIAS run_number_client)
+    add_executable(run_number_server run_number_main.cc run_number.cc run_number.hh)
+    target_link_libraries(run_number_server PUBLIC zmq4::zmq)
+    target_compile_options(run_number_server PRIVATE ${_RN_CHECK_FLAGS})
 
-add_executable(test_run_number tests/test_main.cc tests/test_run_number.cc tests/test_run_number_structs.cc run_number.cc run_number.hh)
-target_include_directories(test_run_number PRIVATE ${CATCH_PATH})
-target_compile_options(test_run_number PRIVATE ${_RN_CHECK_FLAGS})
+    add_library(run_number_client STATIC run_number_client.cc run_number_client.hh)
+    target_link_libraries(run_number_client PUBLIC zmq4::zmq)
+    target_include_directories(run_number_client PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
+    add_library(run_number::run_number ALIAS run_number_client)
 
-add_executable(test_run_number_client tests/test_client_main.cc)
-target_link_libraries(test_run_number_client PUBLIC run_number::run_number)
+    add_executable(test_run_number tests/test_main.cc tests/test_run_number.cc tests/test_run_number_structs.cc run_number.cc run_number.hh)
+    target_include_directories(test_run_number PRIVATE ${CATCH_PATH})
+    target_compile_options(test_run_number PRIVATE ${_RN_CHECK_FLAGS})
 
-add_executable(run_number_test_client run_number_test_client.cc)
-target_link_libraries(run_number_test_client PUBLIC run_number_client)
+    add_executable(test_run_number_client tests/test_client_main.cc)
+    target_link_libraries(test_run_number_client PUBLIC run_number::run_number)
 
-add_test(_rn_basic_run_number_tests_ test_run_number)
+    add_executable(run_number_test_client run_number_test_client.cc)
+    target_link_libraries(run_number_test_client PUBLIC run_number_client)
 
-install(TARGETS run_number_server
-        DESTINATION bin
-        )
\ No newline at end of file
+    add_test(_rn_basic_run_number_tests_ test_run_number)
+
+    install(TARGETS run_number_server
+            DESTINATION bin
+            )
+
+else (${LibZMQ_FOUND})
+
+    MESSAGE("ZeroMQ libraries not found, building the null run number client")
+
+    add_library(null_run_number_client STATIC null_run_number_client.cc run_number_client.hh)
+    target_include_directories(null_run_number_client PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
+    add_library(run_number::run_number ALIAS null_run_number_client)
+
+endif (${LibZMQ_FOUND})
\ No newline at end of file
diff --git a/src/run_number/null_run_number_client.cc b/src/run_number/null_run_number_client.cc
new file mode 100644
index 000000000..b7d0c023b
--- /dev/null
+++ b/src/run_number/null_run_number_client.cc
@@ -0,0 +1,10 @@
+#include "run_number_client.hh"
+
+
+namespace daqd_run_number {
+
+    int get_run_number(const std::string &target, const std::string &hash) {
+        return 0;
+    }
+
+}
\ No newline at end of file
-- 
GitLab