|
1 | | -# ************************************************************************** |
2 | | -# * Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. * |
3 | | -# * * |
4 | | -# * Author: The ALICE Off-line Project. * |
5 | | -# * Contributors are mentioned in the code where appropriate. * |
6 | | -# * * |
7 | | -# * Permission to use, copy, modify and distribute this software and its * |
8 | | -# * documentation strictly for non-commercial purposes is hereby granted * |
9 | | -# * without fee, provided that the above copyright notice appears in all * |
10 | | -# * copies and that both the copyright notice and this permission notice * |
11 | | -# * appear in the supporting documentation. The authors make no claims * |
12 | | -# * about the suitability of this software for any purpose. It is * |
13 | | -# * provided "as is" without express or implied warranty. * |
14 | | -# ************************************************************************** |
15 | | - |
16 | | -# Checks for a ZeroMQ installation. Enables ZeroMQ by default if found on the |
17 | | -# system and with the right version. |
| 1 | +################################################################################ |
| 2 | +# Copyright (C) 2012-2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH # |
| 3 | +# # |
| 4 | +# This software is distributed under the terms of the # |
| 5 | +# GNU Lesser General Public Licence (LGPL) version 3, # |
| 6 | +# copied verbatim in the file "LICENSE" # |
| 7 | +################################################################################ |
| 8 | +# |
| 9 | +# Authors: |
| 10 | +# |
| 11 | +# Mohammad Al-Turany |
| 12 | +# Dario Berzano |
| 13 | +# Dennis Klein |
| 14 | +# Matthias Richter |
| 15 | +# Alexey Rybalchenko |
| 16 | +# Florian Uhlig |
| 17 | +# |
| 18 | +# |
| 19 | +# ############################# |
| 20 | +# # Locate the ZeroMQ library # |
| 21 | +# ############################# |
| 22 | +# |
| 23 | +# |
| 24 | +# Usage: |
| 25 | +# |
| 26 | +# find_package(ZeroMQ [version] [QUIET] [REQUIRED]) |
| 27 | +# |
| 28 | +# |
| 29 | +# Defines the following variables: |
| 30 | +# |
| 31 | +# ZeroMQ_FOUND - Found the ZeroMQ library |
| 32 | +# ZeroMQ_INCLUDE_DIR (CMake cache) - Include directory |
| 33 | +# ZeroMQ_LIBRARY_SHARED (CMake cache) - Path to shared libzmq |
| 34 | +# ZeroMQ_LIBRARY_STATIC (CMake cache) - Path to static libzmq |
| 35 | +# ZeroMQ_VERSION - full version string |
| 36 | +# ZeroMQ_VERSION_MAJOR - major version component |
| 37 | +# ZeroMQ_VERSION_MINOR - minor version component |
| 38 | +# ZeroMQ_VERSION_PATCH - patch version component |
| 39 | +# |
18 | 40 | # |
19 | | -# Point to a custom ZeroMQ installation with -DZEROMQ=<path>: in that case, if |
20 | | -# ZeroMQ is not found or has not the right version, a fatal error is raised. |
| 41 | +# Accepts the following variables as hints for installation directories: |
21 | 42 | # |
22 | | -# Variables set: |
| 43 | +# ZMQ_DIR (CMake var) |
| 44 | +# AlFa_DIR (CMake var) |
| 45 | +# SIMPATH (CMake var) |
| 46 | +# ZEROMQ_ROOT (CMake var, ENV var) |
| 47 | +# |
| 48 | +# |
| 49 | +# If the above variables are not defined, or if ZeroMQ could not be found there, |
| 50 | +# it will look for it in the system directories. Custom ZeroMQ installations |
| 51 | +# will always have priority over system ones. |
23 | 52 | # |
24 | | -# - ZEROMQ_FOUND True if ZeroMQ is found |
25 | | -# - ZEROMQ_INCLUDE_DIR Where to find ZeroMQ include directory |
26 | | -# - ZEROMQ_LIBRARIES List of libraries when using ZeroMQ |
27 | | -# - ZEROMQ_VERSION ZeroMQ version, major.minor.patches |
28 | | -# - ZEROMQ_VERSION_MAJOR Major component of version |
29 | | -# - ZEROMQ_VERSION_MINOR Minor component of version |
30 | | -# - ZEROMQ_VERSION_MAJOR Patches component of version |
31 | 53 |
|
32 | | -set(ZEROMQ_VERSION_MIN "4.0.0") |
| 54 | +if(NOT ZeroMQ_FIND_QUIETLY) |
| 55 | + message(STATUS "Looking for ZeroMQ") |
| 56 | +endif() |
33 | 57 |
|
34 | | -message(STATUS "Checking for ZeroMQ ${ZEROMQ}") |
| 58 | +if(DEFINED ENV{ZEROMQ_ROOT}) |
| 59 | + set(ZEROMQ_ROOT $ENV{ZEROMQ_ROOT}) |
| 60 | +endif() |
35 | 61 |
|
36 | | -set(ZEROMQ_FOUND FALSE) |
| 62 | +find_path(ZeroMQ_INCLUDE_DIR NAMES "zmq.h" "zmq_utils.h" |
| 63 | + HINTS "${ZMQ_DIR}/include" |
| 64 | + "${AlFa_DIR}/include" |
| 65 | + "${SIMPATH}/include" |
| 66 | + "${ZEROMQ_ROOT}/include" |
| 67 | + DOC "ZeroMQ include directories" |
| 68 | +) |
37 | 69 |
|
38 | | -if(ZEROMQ) |
39 | | - # ZeroMQ is installed in a custom place |
40 | | - find_library(ZEROMQ_LIBRARIES NAMES zmq |
41 | | - PATHS ${ZEROMQ}/lib |
42 | | - NO_DEFAULT_PATH |
43 | | - DOC "Path to libzmq)" |
44 | | - ) |
45 | | - find_path(ZEROMQ_INCLUDE_DIR NAMES zmq.h zmq_utils.h |
46 | | - PATHS ${ZEROMQ}/include |
47 | | - NO_DEFAULT_PATH |
48 | | - DOC "Path to ZeroMQ include header files." |
49 | | - ) |
50 | | -else(ZEROMQ) |
51 | | - # Check is the library is installed on the system |
52 | | - find_library(ZEROMQ_LIBRARIES NAMES zmq |
53 | | - HINTS ENV LD_LIBRARY_PATH |
54 | | - DOC "Path to libzmq)" |
55 | | - ) |
56 | | - string(REPLACE "lib/libzmq.so" "" INCLUDE_HINT ${ZEROMQ_LIBRARIES}) |
57 | | - find_path(ZEROMQ_INCLUDE_DIR NAMES zmq_utils.h |
58 | | - HINTS "${INCLUDE_HINT}include" |
59 | | - DOC "Path to ZeroMQ include header files." |
60 | | - ) |
61 | | -endif(ZEROMQ) |
| 70 | +find_library(ZeroMQ_LIBRARY_SHARED NAMES "libzmq.dylib" "libzmq.so" |
| 71 | + HINTS "${ZMQ_DIR}/lib" |
| 72 | + "${AlFa_DIR}/lib" |
| 73 | + "${SIMPATH}/lib" |
| 74 | + "${ZEROMQ_ROOT}/lib" |
| 75 | + DOC "Path to libzmq.dylib or libzmq.so" |
| 76 | +) |
62 | 77 |
|
63 | | -mark_as_advanced(ZEROMQ_LIBRARIES ZEROMQ_INCLUDE_DIR) |
| 78 | +find_library(ZeroMQ_LIBRARY_STATIC NAMES "libzmq.a" |
| 79 | + HINTS "${ZMQ_DIR}/lib" |
| 80 | + "${AlFa_DIR}/lib" |
| 81 | + "${SIMPATH}/lib" |
| 82 | + "${ZEROMQ_ROOT}/lib" |
| 83 | + DOC "Path to libzmq.a" |
| 84 | +) |
64 | 85 |
|
65 | | -# Did we find ZeroMQ? We need to parse its version. |
66 | | -if(ZEROMQ_INCLUDE_DIR) |
67 | | - message(STATUS "ZeroMQ include path: ${ZEROMQ_INCLUDE_DIR}") |
68 | | -endif() |
69 | | -if(ZEROMQ_LIBRARIES) |
70 | | - message(STATUS "ZeroMQ libraries: ${ZEROMQ_LIBRARIES}") |
| 86 | +if(ZeroMQ_INCLUDE_DIR AND ZeroMQ_LIBRARY_SHARED AND ZeroMQ_LIBRARY_STATIC) |
| 87 | + set(ZeroMQ_FOUND TRUE) |
| 88 | +else() |
| 89 | + set(ZeroMQ_FOUND FALSE) |
71 | 90 | endif() |
72 | | -if(ZEROMQ_INCLUDE_DIR AND ZEROMQ_LIBRARIES) |
73 | | - file(READ "${ZEROMQ_INCLUDE_DIR}/zmq.h" zmqh) |
74 | 91 |
|
75 | | - string(REGEX MATCH "#define +ZMQ_VERSION_MAJOR +([0-9]+)" zmqv "${zmqh}") |
76 | | - set(ZEROMQ_VERSION_MAJOR "${CMAKE_MATCH_1}") |
77 | | - string(REGEX MATCH "#define +ZMQ_VERSION_MINOR +([0-9]+)" zmqv "${zmqh}") |
78 | | - set(ZEROMQ_VERSION_MINOR "${CMAKE_MATCH_1}") |
79 | | - string(REGEX MATCH "#define +ZMQ_VERSION_PATCH +([0-9]+)" zmqv "${zmqh}") |
80 | | - set(ZEROMQ_VERSION_PATCH "${CMAKE_MATCH_1}") |
| 92 | +set(ERROR_STRING "Looking for ZeroMQ - NOT FOUND") |
81 | 93 |
|
82 | | - unset(zmqh) |
83 | | - unset(zmqv) |
| 94 | +if(ZeroMQ_FOUND) |
| 95 | + find_file(ZeroMQ_HEADER_FILE "zmq.h" |
| 96 | + ${ZeroMQ_INCLUDE_DIR} |
| 97 | + NO_DEFAULT_PATH |
| 98 | + ) |
| 99 | + if (DEFINED ZeroMQ_HEADER_FILE) |
| 100 | + file(READ "${ZeroMQ_HEADER_FILE}" _ZeroMQ_HEADER_FILE_CONTENT) |
| 101 | + string(REGEX MATCH "#define ZMQ_VERSION_MAJOR ([0-9])" _MATCH "${_ZeroMQ_HEADER_FILE_CONTENT}") |
| 102 | + set(ZeroMQ_VERSION_MAJOR ${CMAKE_MATCH_1}) |
| 103 | + string(REGEX MATCH "#define ZMQ_VERSION_MINOR ([0-9])" _MATCH "${_ZeroMQ_HEADER_FILE_CONTENT}") |
| 104 | + set(ZeroMQ_VERSION_MINOR ${CMAKE_MATCH_1}) |
| 105 | + string(REGEX MATCH "#define ZMQ_VERSION_PATCH ([0-9])" _MATCH "${_ZeroMQ_HEADER_FILE_CONTENT}") |
| 106 | + set(ZeroMQ_VERSION_PATCH ${CMAKE_MATCH_1}) |
| 107 | + set(ZeroMQ_VERSION "${ZeroMQ_VERSION_MAJOR}.${ZeroMQ_VERSION_MINOR}.${ZeroMQ_VERSION_PATCH}") |
| 108 | + if(DEFINED ZeroMQ_FIND_VERSION AND ZeroMQ_VERSION VERSION_LESS ZeroMQ_FIND_VERSION) |
| 109 | + set(ZeroMQ_FOUND FALSE) |
| 110 | + set(ERROR_STRING "Looking for ZeroMQ - Installed version ${ZeroMQ_VERSION} does not meet the minimum required version ${ZeroMQ_FIND_VERSION}") |
| 111 | + endif () |
| 112 | + unset(ZeroMQ_HEADER_FILE CACHE) |
| 113 | + endif () |
84 | 114 |
|
85 | | - set(ZEROMQ_VERSION "${ZEROMQ_VERSION_MAJOR}.${ZEROMQ_VERSION_MINOR}.${ZEROMQ_VERSION_PATCH}") |
86 | | - message(STATUS "ZeroMQ version: ${ZEROMQ_VERSION}") |
| 115 | + add_library(ZeroMQ SHARED IMPORTED) |
| 116 | + set_target_properties(ZeroMQ PROPERTIES |
| 117 | + IMPORTED_LOCATION ${ZeroMQ_LIBRARY_SHARED} |
| 118 | + INTERFACE_INCLUDE_DIRECTORIES ${ZeroMQ_INCLUDE_DIR} |
| 119 | + ) |
| 120 | +endif() |
| 121 | + |
| 122 | +if(ZeroMQ_FOUND) |
| 123 | + set(ZeroMQ_LIBRARIES "${ZeroMQ_LIBRARY_STATIC};${ZeroMQ_LIBRARY_SHARED}") |
| 124 | + if(NOT ZeroMQ_FIND_QUIETLY) |
| 125 | + message(STATUS "Looking for ZeroMQ - Found ${ZeroMQ_INCLUDE_DIR}") |
| 126 | + message(STATUS "Looking for ZeroMQ - Found version ${ZeroMQ_VERSION}") |
| 127 | + endif(NOT ZeroMQ_FIND_QUIETLY) |
| 128 | + |
| 129 | + mark_as_advanced( |
| 130 | + ZeroMQ_LIBRARIES |
| 131 | + ZeroMQ_LIBRARY_SHARED |
| 132 | + ZeroMQ_LIBRARY_STATIC |
| 133 | + ZeroMQ_VERSION_MAJOR |
| 134 | + ZeroMQ_VERSION_MINOR |
| 135 | + ZeroMQ_VERSION_PATCH |
| 136 | + ) |
87 | 137 |
|
88 | | - if(ZEROMQ_VERSION VERSION_GREATER "${ZEROMQ_VERSION_MIN}") |
89 | | - # Version OK. |
90 | | - set(ZEROMQ_FOUND TRUE) |
91 | | - add_definitions(-DZMQ_FOUND) |
92 | | - message(STATUS "ZeroMQ version ${ZEROMQ_VERSION} (> ${ZEROMQ_VERSION_MIN}) found") |
93 | | - elseif(ZEROMQ) |
94 | | - # Version not OK and explicitly requested: fatal. |
95 | | - message(FATAL_ERROR "ZeroMQ in ${ZEROMQ} has version ${ZEROMQ_VERSION} <= ${ZEROMQ_VERSION_MIN}") |
96 | | - else() |
97 | | - message(STATUS "ZeroMQ found but version ${ZEROMQ_VERSION} <= ${ZEROMQ_VERSION_MIN}. Disabling ZeroMQ support.") |
98 | | - endif() |
99 | | -elseif(ZEROMQ) |
100 | | - # ZeroMQ not found and explicitly requested: fatal. |
101 | | - message(FATAL_ERROR "ZeroMQ not found in ${ZEROMQ}.") |
102 | | -elseif(ZEROMQ_LIBRARIES) |
103 | | - # ZeroMQ libraries found in system, but headers were not. |
104 | | - message(STATUS "ZeroMQ headers not found. Please install the development package and the cppzmq interface. Disabling ZeroMQ support.") |
| 138 | + # add target |
| 139 | + if(NOT TARGET ZeroMQ::ZeroMQ) |
| 140 | + add_library(ZeroMQ::ZeroMQ INTERFACE IMPORTED) |
| 141 | + set_target_properties(ZeroMQ::ZeroMQ PROPERTIES |
| 142 | + INTERFACE_INCLUDE_DIRECTORIES "${ZeroMQ_INCLUDE_DIR}" |
| 143 | + INTERFACE_LINK_LIBRARIES "${ZeroMQ_LIBRARIES}" |
| 144 | + ) |
| 145 | + endif() |
105 | 146 | else() |
106 | | - message(STATUS "ZeroMQ not found. Disabling ZeroMQ support.") |
| 147 | + if(ZeroMQ_FIND_REQUIRED) |
| 148 | + message(FATAL_ERROR "${ERROR_STRING}") |
| 149 | + else() |
| 150 | + if(NOT ZeroMQ_FIND_QUIETLY) |
| 151 | + message(STATUS "${ERROR_STRING}") |
| 152 | + endif(NOT ZeroMQ_FIND_QUIETLY) |
| 153 | + endif() |
107 | 154 | endif() |
| 155 | + |
| 156 | +unset(ERROR_STRING) |
| 157 | +unset(ZEROMQ_ROOT) |
| 158 | + |
| 159 | + |
0 commit comments