Problem: CMake does not check for TIPC support

Solution: add macro in ZMQSourceRunChecks.cmake and optionally
include the TIPC sources if the support is available.
More importantly, only run the TIPC tests if the support is there.
This commit is contained in:
Luca Boccassi 2016-04-21 11:33:20 +01:00
parent 317499edae
commit ea294afd8b
3 changed files with 52 additions and 8 deletions

View File

@ -282,6 +282,7 @@ zmq_check_tcp_keepcnt ()
zmq_check_tcp_keepidle ()
zmq_check_tcp_keepintvl ()
zmq_check_tcp_keepalive ()
zmq_check_tcp_tipc ()
if ( CMAKE_SYSTEM_NAME MATCHES "Linux"
@ -550,6 +551,11 @@ if (WITH_VMCI)
list (APPEND cxx-sources vmci_address.cpp vmci_connecter.cpp vmci_listener.cpp vmci.cpp)
endif (WITH_VMCI)
if (ZMQ_HAVE_TIPC)
add_definitions (-DZMQ_HAVE_TIPC)
list (APPEND cxx-source tipc_address.cpp tipc_connecter.cpp tipc_listener.cpp)
endif (ZMQ_HAVE_TIPC)
#-----------------------------------------------------------------------------
# source generators

View File

@ -127,3 +127,37 @@ int main(int argc, char *argv [])
"
ZMQ_HAVE_TCP_KEEPALIVE)
endmacro()
macro(zmq_check_tcp_tipc)
message(STATUS "Checking whether TIPC is supported")
check_c_source_runs(
"
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/socket.h>
#include <linux/tipc.h>
int main(int argc, char *argv [])
{
struct sockaddr_tipc topsrv;
int sd = socket(AF_TIPC, SOCK_SEQPACKET, 0);
if (sd == -EAFNOSUPPORT) {
return 1;
}
memset(&topsrv, 0, sizeof(topsrv));
topsrv.family = AF_TIPC;
topsrv.addrtype = TIPC_ADDR_NAME;
topsrv.addr.name.name.type = TIPC_TOP_SRV;
topsrv.addr.name.name.instance = TIPC_TOP_SRV;
fcntl(sd, F_SETFL, O_NONBLOCK);
if (connect(sd, (struct sockaddr *)&topsrv, sizeof(topsrv)) != 0) {
if (errno != EINPROGRESS)
return -1;
}
}
"
ZMQ_HAVE_TIPC)
endmacro()

View File

@ -93,6 +93,9 @@ if(NOT WIN32)
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
list(APPEND tests
test_abstract_ipc
)
if(ZMQ_HAVE_TIPC)
list(APPEND tests
test_pair_tipc
test_reqrep_device_tipc
test_reqrep_tipc
@ -103,6 +106,7 @@ if(NOT WIN32)
test_term_endpoint_tipc
)
endif()
endif()
endif()
if(WITH_VMCI)