Skip to content

Commit 9ff93dc

Browse files
committed
Modernize FindZeroMQ.cmake and fix some ZeroMQ related compile bugs
1 parent 24da67a commit 9ff93dc

7 files changed

Lines changed: 55 additions & 53 deletions

File tree

cmake/DetectOptions.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,9 +339,9 @@ endif()
339339

340340
# ZeroMQ
341341
if(ADIOS2_USE_ZeroMQ STREQUAL AUTO)
342-
find_package(ZeroMQ 4.1)
342+
find_package(ZeroMQ 4.1 MODULE)
343343
elseif(ADIOS2_USE_ZeroMQ)
344-
find_package(ZeroMQ 4.1 REQUIRED)
344+
find_package(ZeroMQ 4.1 MODULE REQUIRED)
345345
endif()
346346
if(ZeroMQ_FOUND)
347347
set(ADIOS2_HAVE_ZeroMQ TRUE)

cmake/FindZeroMQ.cmake

Lines changed: 43 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,49 +2,51 @@
22
#
33
# SPDX-License-Identifier: Apache-2.0
44

5+
if(ZeroMQ_FOUND)
6+
return()
7+
endif()
58

6-
if(NOT ZeroMQ_FOUND)
7-
if((NOT ZeroMQ_ROOT) AND (NOT (ENV{ZeroMQ_ROOT} STREQUAL "")))
8-
set(ZeroMQ_ROOT "$ENV{ZeroMQ_ROOT}")
9-
endif()
10-
if(ZeroMQ_ROOT)
11-
set(ZeroMQ_INCLUDE_OPTS HINTS ${ZeroMQ_ROOT}/include NO_DEFAULT_PATHS)
12-
set(ZeroMQ_LIBRARY_OPTS
13-
HINTS ${ZeroMQ_ROOT}/lib ${ZeroMQ_ROOT}/lib64
14-
NO_DEFAULT_PATHS
15-
)
16-
endif()
9+
set(_zmq_version_exact)
10+
if(ZeroMQ_FIND_VERSION_EXACT)
11+
list(APPEND _zmq_version_exact EXACT)
12+
endif()
1713

18-
find_path(ZeroMQ_INCLUDE_DIR zmq.h ${ZeroMQ_INCLUDE_OPTS})
19-
find_library(ZeroMQ_LIBRARY zmq ${ZeroMQ_LIBRARY_OPTS})
20-
if(ZeroMQ_INCLUDE_DIR)
21-
file(STRINGS ${ZeroMQ_INCLUDE_DIR}/zmq.h _ver_strings
22-
REGEX "ZMQ_VERSION_[^ ]* [0-9]+"
23-
)
24-
foreach(v IN LISTS _ver_strings)
25-
string(REGEX MATCH "ZMQ_VERSION_([^ ]+) ([0-9]+)" v "${v}")
26-
set(ZeroMQ_VERSION_${CMAKE_MATCH_1} ${CMAKE_MATCH_2})
27-
endforeach()
28-
set(ZeroMQ_VERSION
29-
${ZeroMQ_VERSION_MAJOR}.${ZeroMQ_VERSION_MINOR}.${ZeroMQ_VERSION_PATCH}
30-
)
31-
endif()
14+
set(_zmq_quiet)
15+
if(ZeroMQ_FIND_QUIET)
16+
list(APPEND _zmq_quiet QUIET)
17+
endif()
18+
19+
set(_zmq_required)
20+
if(ZeroMQ_FIND_REQUIRED)
21+
set(_zmq_required "REQUIRED")
22+
endif()
3223

33-
include(FindPackageHandleStandardArgs)
34-
find_package_handle_standard_args(ZeroMQ
35-
FOUND_VAR ZeroMQ_FOUND
36-
VERSION_VAR ZeroMQ_VERSION
37-
REQUIRED_VARS ZeroMQ_LIBRARY ZeroMQ_INCLUDE_DIR
38-
)
39-
if(ZeroMQ_FOUND)
40-
set(ZeroMQ_INCLUDE_DIRS ${ZeroMQ_INCLUDE_DIR})
41-
set(ZeroMQ_LIBRARIES ${ZeroMQ_LIBRARY})
42-
if(ZeroMQ_FOUND AND NOT TARGET ZeroMQ::ZMQ)
43-
add_library(ZeroMQ::ZMQ UNKNOWN IMPORTED)
44-
set_target_properties(ZeroMQ::ZMQ PROPERTIES
45-
IMPORTED_LOCATION "${ZeroMQ_LIBRARY}"
46-
INTERFACE_INCLUDE_DIRECTORIES "${ZeroMQ_INCLUDE_DIR}"
47-
)
48-
endif()
24+
find_package(ZeroMQ ${ZeroMQ_FIND_VERSION} ${_zmq_version_exact} ${_zmq_quiet} CONFIG)
25+
26+
# If native package was found, stop here
27+
if(TARGET libzmq)
28+
add_library(ZeroMQ::ZMQ ALIAS libzmq)
29+
return()
30+
endif()
31+
32+
# pkg-config fallback
33+
find_package(PkgConfig ${_zmq_quiet} ${_zmq_required})
34+
if(NOT PkgConfig_FOUND)
35+
return()
36+
endif()
37+
38+
# Version handling
39+
if(ZeroMQ_FIND_VERSION)
40+
if(ZeroMQ_FIND_VERSION_EXACT)
41+
pkg_check_modules(ZMQ ${_zmq_quiet} ${_zmq_required} IMPORTED_TARGET libzmq=${ZeroMQ_FIND_VERSION})
42+
else()
43+
pkg_check_modules(ZMQ ${_zmq_quiet} ${_zmq_required} IMPORTED_TARGET libzmq>=${ZeroMQ_FIND_VERSION})
4944
endif()
45+
else()
46+
pkg_check_modules(ZMQ ${_zmq_quiet} ${_zmq_required} IMPORTED_TARGET libzmq)
47+
endif()
48+
49+
# Create alias target to match imported target name of the native package
50+
if(TARGET PkgConfig::ZMQ)
51+
add_library(ZeroMQ::ZMQ ALIAS PkgConfig::ZMQ)
5052
endif()

examples/hello/datamanKokkos/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ if(NOT TARGET adios2_core)
2424
list(APPEND _components MPI)
2525
endif()
2626

27-
find_package(ZeroMQ 4.1 QUIET)
27+
find_package(ZeroMQ 4.1 MODULE QUIET)
2828

2929
find_package(Kokkos 3.7 QUIET)
3030
if(Kokkos_FOUND AND DEFINED Kokkos_CXX_COMPILER)

examples/hello/datamanReader/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ if(NOT TARGET adios2_core)
2424
list(APPEND _components MPI)
2525
endif()
2626

27-
find_package(ZeroMQ 4.1 QUIET)
27+
find_package(ZeroMQ 4.1 MODULE QUIET)
2828

2929
find_package(ADIOS2 REQUIRED COMPONENTS ${_components})
3030
endif()

examples/hello/datamanWriter/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ if(NOT TARGET adios2_core)
2424
list(APPEND _components MPI)
2525
endif()
2626

27-
find_package(ZeroMQ 4.1 QUIET)
27+
find_package(ZeroMQ 4.1 MODULE QUIET)
2828

2929
find_package(ADIOS2 REQUIRED COMPONENTS ${_components})
3030
endif()

source/adios2/toolkit/zmq/zmqpubsub/ZmqPubSub.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ ZmqPubSub::~ZmqPubSub()
3535
void ZmqPubSub::OpenPublisher(const std::string &address)
3636
{
3737
m_ZmqContext = zmq_ctx_new();
38-
if (not m_ZmqContext)
38+
if (!m_ZmqContext)
3939
{
4040
helper::Throw<std::runtime_error>("Toolkit", "ZmqPubSub", "OpenPublisher",
4141
"creating zmq context failed");
4242
}
4343

4444
m_ZmqSocket = zmq_socket(m_ZmqContext, ZMQ_PUB);
45-
if (not m_ZmqSocket)
45+
if (!m_ZmqSocket)
4646
{
4747
helper::Throw<std::runtime_error>("Toolkit", "ZmqPubSub", "OpenPublisher",
4848
"creating zmq socket failed");
@@ -59,14 +59,14 @@ void ZmqPubSub::OpenPublisher(const std::string &address)
5959
void ZmqPubSub::OpenSubscriber(const std::string &address, const size_t bufferSize)
6060
{
6161
m_ZmqContext = zmq_ctx_new();
62-
if (not m_ZmqContext)
62+
if (!m_ZmqContext)
6363
{
6464
helper::Throw<std::runtime_error>("Toolkit", "ZmqPubSub", "OpenSubscriber",
6565
"creating zmq context failed");
6666
}
6767

6868
m_ZmqSocket = zmq_socket(m_ZmqContext, ZMQ_SUB);
69-
if (not m_ZmqSocket)
69+
if (!m_ZmqSocket)
7070
{
7171
helper::Throw<std::runtime_error>("Toolkit", "ZmqPubSub", "OpenSubscriber",
7272
"creating zmq socket failed");
@@ -86,7 +86,7 @@ void ZmqPubSub::OpenSubscriber(const std::string &address, const size_t bufferSi
8686

8787
void ZmqPubSub::Send(std::shared_ptr<std::vector<char>> buffer)
8888
{
89-
if (buffer != nullptr and buffer->size() > 0)
89+
if (buffer != nullptr && buffer->size() > 0)
9090
{
9191
zmq_send(m_ZmqSocket, buffer->data(), buffer->size(), ZMQ_DONTWAIT);
9292
}

source/adios2/toolkit/zmq/zmqreqrep/ZmqReqRep.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace zmq
1818
ZmqReqRep::ZmqReqRep()
1919
{
2020
m_Context = zmq_ctx_new();
21-
if (not m_Context)
21+
if (!m_Context)
2222
{
2323
helper::Throw<std::runtime_error>("Toolkit", "ZmqReqRep", "ZmqReqRep",
2424
"creating zmq context failed");
@@ -77,7 +77,7 @@ void ZmqReqRep::OpenReplier(const std::string &address, const int timeout,
7777
m_ReceiverBuffer.reserve(receiverBufferSize);
7878

7979
m_Socket = zmq_socket(m_Context, ZMQ_REP);
80-
if (not m_Socket)
80+
if (!m_Socket)
8181
{
8282
helper::Throw<std::runtime_error>("Toolkit", "ZmqReqRep", "OpenReplier",
8383
"creating zmq socket failed");

0 commit comments

Comments
 (0)