Skip to content
This repository was archived by the owner on Oct 17, 2019. It is now read-only.

Commit d3f6288

Browse files
authored
Merge pull request #5 from AliceO2Group/fix-zeromq
fix error due to zeromq
2 parents 2276a00 + cf23a53 commit d3f6288

File tree

1 file changed

+143
-91
lines changed

1 file changed

+143
-91
lines changed

cmake/FindZeroMQ.cmake

Lines changed: 143 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,107 +1,159 @@
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+
#
1840
#
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:
2142
#
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.
2352
#
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
3153

32-
set(ZEROMQ_VERSION_MIN "4.0.0")
54+
if(NOT ZeroMQ_FIND_QUIETLY)
55+
message(STATUS "Looking for ZeroMQ")
56+
endif()
3357

34-
message(STATUS "Checking for ZeroMQ ${ZEROMQ}")
58+
if(DEFINED ENV{ZEROMQ_ROOT})
59+
set(ZEROMQ_ROOT $ENV{ZEROMQ_ROOT})
60+
endif()
3561

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+
)
3769

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+
)
6277

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+
)
6485

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)
7190
endif()
72-
if(ZEROMQ_INCLUDE_DIR AND ZEROMQ_LIBRARIES)
73-
file(READ "${ZEROMQ_INCLUDE_DIR}/zmq.h" zmqh)
7491

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")
8193

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 ()
84114

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+
)
87137

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()
105146
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()
107154
endif()
155+
156+
unset(ERROR_STRING)
157+
unset(ZEROMQ_ROOT)
158+
159+

0 commit comments

Comments
 (0)