From d433b1cdc4a99ab9a77a204addbce64dd30ab7ab Mon Sep 17 00:00:00 2001 From: Dennis Klein Date: Thu, 3 May 2018 12:08:23 +0200 Subject: [PATCH] Reintroduce the zeromq find module According to their current maintainer, the upstream libzmq project is unlikely to switch to their CMake build system by default. --- CMakeLists.txt | 3 ++ cmake/FindZeroMQ.cmake | 113 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 cmake/FindZeroMQ.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index c65270bd..5fea153a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -100,6 +100,9 @@ install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME_LOWER}/Version.h ) # Install cmake modules +install(FILES cmake/FindZeroMQ.cmake + DESTINATION ${PROJECT_INSTALL_CMAKEMODDIR} +) if(BUILD_DDS_PLUGIN) install(FILES cmake/FindDDS.cmake DESTINATION ${PROJECT_INSTALL_CMAKEMODDIR} diff --git a/cmake/FindZeroMQ.cmake b/cmake/FindZeroMQ.cmake new file mode 100644 index 00000000..8dfe9d60 --- /dev/null +++ b/cmake/FindZeroMQ.cmake @@ -0,0 +1,113 @@ +################################################################################ +# Copyright (C) 2012-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH # +# # +# This software is distributed under the terms of the # +# GNU Lesser General Public Licence (LGPL) version 3, # +# copied verbatim in the file "LICENSE" # +################################################################################ +# +# Authors: +# +# Mohammad Al-Turany +# Dario Berzano +# Dennis Klein +# Matthias Richter +# Alexey Rybalchenko +# Florian Uhlig +# +# +# ############################# +# # Locate the ZeroMQ library # +# ############################# +# +# +# Usage: +# +# find_package(ZeroMQ [version] [QUIET] [REQUIRED]) +# +# +# Defines the following variables: +# +# ZeroMQ_FOUND - Found the ZeroMQ library +# ZeroMQ_INCLUDE_DIR (CMake cache) - Include directory +# ZeroMQ_LIBRARY_SHARED (CMake cache) - Path to shared libzmq +# ZeroMQ_LIBRARY_STATIC (CMake cache) - Path to static libzmq +# ZeroMQ_VERSION - full version string +# ZeroMQ_VERSION_MAJOR - major version component +# ZeroMQ_VERSION_MINOR - minor version component +# ZeroMQ_VERSION_PATCH - patch version component +# +# +# Accepts the following variables as hints for installation directories: +# +# ZEROMQ_ROOT (CMake var, ENV var) +# +# +# If the above variables are not defined, or if ZeroMQ could not be found there, +# it will look for it in the system directories. Custom ZeroMQ installations +# will always have priority over system ones. +# + +if(NOT ZEROMQ_ROOT) + set(ZEROMQ_ROOT $ENV{ZEROMQ_ROOT}) +endif() + +find_path(ZeroMQ_INCLUDE_DIR + NAMES zmq.h zmq_utils.h + HINTS ${ZEROMQ_ROOT} $ENV{ZEROMQ_ROOT} + PATH_SUFFIXES include + DOC "ZeroMQ include directories" +) + +find_library(ZeroMQ_LIBRARY_SHARED + NAMES libzmq.dylib libzmq.so + HINTS ${ZEROMQ_ROOT} $ENV{ZEROMQ_ROOT} + PATH_SUFFIXES lib + DOC "Path to libzmq.dylib or libzmq.so" +) + +find_library(ZeroMQ_LIBRARY_STATIC NAMES libzmq.a + HINTS ${ZEROMQ_ROOT} $ENV{ZEROMQ_ROOT} + PATH_SUFFIXES lib + DOC "Path to libzmq.a" +) + +find_file(ZeroMQ_HEADER_FILE "zmq.h" + ${ZeroMQ_INCLUDE_DIR} + NO_DEFAULT_PATH +) +if(DEFINED ZeroMQ_HEADER_FILE) + file(READ "${ZeroMQ_HEADER_FILE}" _ZeroMQ_HEADER_FILE_CONTENT) + string(REGEX MATCH "#define ZMQ_VERSION_MAJOR ([0-9])" _MATCH "${_ZeroMQ_HEADER_FILE_CONTENT}") + set(ZeroMQ_VERSION_MAJOR ${CMAKE_MATCH_1}) + string(REGEX MATCH "#define ZMQ_VERSION_MINOR ([0-9])" _MATCH "${_ZeroMQ_HEADER_FILE_CONTENT}") + set(ZeroMQ_VERSION_MINOR ${CMAKE_MATCH_1}) + string(REGEX MATCH "#define ZMQ_VERSION_PATCH ([0-9])" _MATCH "${_ZeroMQ_HEADER_FILE_CONTENT}") + set(ZeroMQ_VERSION_PATCH ${CMAKE_MATCH_1}) + set(ZeroMQ_VERSION "${ZeroMQ_VERSION_MAJOR}.${ZeroMQ_VERSION_MINOR}.${ZeroMQ_VERSION_PATCH}") +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(ZeroMQ + REQUIRED_VARS ZeroMQ_LIBRARY_SHARED ZeroMQ_INCLUDE_DIR ZeroMQ_LIBRARY_STATIC + VERSION_VAR ZeroMQ_VERSION +) + +if(ZeroMQ_FOUND AND NOT TARGET libzmq) + add_library(libzmq SHARED IMPORTED) + set_target_properties(libzmq PROPERTIES + IMPORTED_LOCATION ${ZeroMQ_LIBRARY_SHARED} + INTERFACE_INCLUDE_DIRECTORIES ${ZeroMQ_INCLUDE_DIR} + INTERFACE_LINK_LIBRARIES "$<$:rt>;pthread" + ) +endif() + +mark_as_advanced( + ZeroMQ_LIBRARIES + ZeroMQ_LIBRARY_SHARED + ZeroMQ_LIBRARY_STATIC + ZeroMQ_HEADER_FILE + ZeroMQ_VERSION_MAJOR + ZeroMQ_VERSION_MINOR + ZeroMQ_VERSION_PATCH +)