CMakeLists.txt 7.17 KB
Newer Older
1
# CMake build script for ZeroMQ tests
2
cmake_minimum_required(VERSION "2.8.1")
3

4
# On Windows: solution file will be called tests.sln
5
PROJECT(tests)
6 7

set(tests
8
        test_ancillaries
9 10 11 12 13 14
        test_system
        test_pair_inproc
        test_pair_tcp
        test_reqrep_inproc
        test_reqrep_tcp
        test_hwm
15
        test_hwm_pubsub
16 17 18 19
        test_reqrep_device
        test_sub_forward
        test_invalid_rep
        test_msg_flags
20
        test_msg_ffn
21 22 23 24 25 26 27 28 29 30
        test_connect_resolve
        test_immediate
        test_last_endpoint
        test_term_endpoint
        test_router_mandatory
        test_probe_router
        test_stream
        test_stream_empty
        test_stream_disconnect
        test_disconnect_inproc
Dylan Cali's avatar
Dylan Cali committed
31 32
        test_unbind_inproc
        test_unbind_wildcard
33 34 35 36
        test_ctx_options
        test_ctx_destroy
        test_security_null
        test_security_plain
37
        test_security_zap
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
        test_iov
        test_spec_req
        test_spec_rep
        test_spec_dealer
        test_spec_router
        test_spec_pushpull
        test_req_correlate
        test_req_relaxed
        test_conflate
        test_inproc_connect
        test_issue_566
        test_shutdown_stress
        test_timeo
        test_many_sockets
        test_diffserv
        test_connect_rid
54
        test_xpub_nodrop
55
        test_pub_invert_matching
56
        test_setsockopt
57
        test_sockopt_hwm
Jonathan Reams's avatar
Jonathan Reams committed
58
        test_heartbeats
59 60 61 62 63 64 65 66 67
        test_atomics
        test_bind_src_address
        test_capabilities
        test_metadata
        test_router_handover
        test_srcfd
        test_stream_timeout
        test_xpub_manual
        test_xpub_welcome_msg
68
        test_xpub_verbose
69
        test_base85
70
        test_bind_after_connect_tcp
71
        test_sodium
72
        test_monitor
73
		test_socket_null
74
	test_reconnect_ivl
75
        test_mock_pub_sub
76
)
77 78 79 80
if(ZMQ_HAVE_CURVE)
  list(APPEND tests 
          test_security_curve)
endif()
81 82
if(NOT WIN32)
  list(APPEND tests
83
          test_ipc_wildcard
84
          test_pair_ipc
85
          test_rebind_ipc
86 87
          test_reqrep_ipc
          test_proxy
88
          test_proxy_single_socket
89
          test_proxy_terminate
90
          test_getsockopt_memset
91
          test_filter_ipc
92 93
          test_stream_exceeds_buffer
          test_router_mandatory_hwm
94 95
          test_use_fd_ipc
          test_use_fd_tcp
96
          test_zmq_poll_fd
97 98 99 100
  )
  if(HAVE_FORK)
    list(APPEND tests test_fork)
  endif()
101 102 103 104
  if(CMAKE_SYSTEM_NAME MATCHES "Linux")
    list(APPEND tests
          test_abstract_ipc
    )
105 106
    if(ZMQ_HAVE_TIPC)
      list(APPEND tests
107
            test_address_tipc
108 109 110 111 112 113 114 115 116 117
            test_pair_tipc
            test_reqrep_device_tipc
            test_reqrep_tipc
            test_router_mandatory_tipc
            test_sub_forward_tipc
            test_connect_delay_tipc
            test_shutdown_stress_tipc
            test_term_endpoint_tipc
      )
    endif()
118
  endif()
119
endif()
Ilya Kulakov's avatar
Ilya Kulakov committed
120 121 122 123 124 125 126

if(WITH_VMCI)
  list(APPEND tests
          test_pair_vmci
          test_reqrep_vmci
  )
endif()
127

128 129 130

IF (ENABLE_DRAFTS)
    list(APPEND tests
131
        test_poller
132 133
        test_thread_safe
        test_client_server
134
        test_timers
135
        test_radio_dish
136
        test_scatter_gather
137
        test_dgram
138
        test_app_meta
139
        test_router_notify
140 141 142
    )
ENDIF (ENABLE_DRAFTS)

143 144 145
# add location of platform.hpp for Windows builds
if(WIN32)
    add_definitions(-DZMQ_CUSTOM_PLATFORM_HPP)
146
    add_definitions(-D_WINSOCK_DEPRECATED_NO_WARNINGS)
147
    # Same name on 64bit systems
148
    link_libraries(ws2_32.lib)
149 150
endif()

sigiesec's avatar
sigiesec committed
151 152 153 154 155 156
add_library (unity 
    STATIC 
    "${CMAKE_CURRENT_LIST_DIR}/../external/unity/unity.c" 
    "${CMAKE_CURRENT_LIST_DIR}/../external/unity/unity.h" 
    "${CMAKE_CURRENT_LIST_DIR}/../external/unity/unity_internals.h")
set_target_properties (unity PROPERTIES
157
                             PUBLIC_HEADER "${CMAKE_CURRENT_LIST_DIR}/../external/unity/unity.h")
158
target_compile_definitions (unity PUBLIC "UNITY_USE_COMMAND_LINE_ARGS" "UNITY_EXCLUDE_FLOAT")
159
target_include_directories (unity PUBLIC "${CMAKE_CURRENT_LIST_DIR}/../external/unity")
sigiesec's avatar
sigiesec committed
160

Kachanovskiy's avatar
Kachanovskiy committed
161 162 163 164
IF (MSVC_VERSION LESS 1700)
    SET_SOURCE_FILES_PROPERTIES("${CMAKE_CURRENT_LIST_DIR}/../external/unity/unity.c" PROPERTIES LANGUAGE CXX)
ENDIF()

165 166 167 168
IF (MSVC_VERSION LESS 1600)
    target_compile_definitions (unity PUBLIC "UNITY_EXCLUDE_STDINT_H")
ENDIF()

169
# add library and include dirs for all targets
170
if (BUILD_SHARED)
sigiesec's avatar
sigiesec committed
171
link_libraries(libzmq ${OPTIONAL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} unity)
172
else ()
sigiesec's avatar
sigiesec committed
173
link_libraries(libzmq-static ${OPTIONAL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} unity)
174 175
endif ()
include_directories("${CMAKE_SOURCE_DIR}/../include" "${CMAKE_BINARY_DIR}")
176

177
foreach(test ${tests})
178 179 180 181 182 183 184 185 186 187 188 189
  # target_sources not supported before CMake 3.1
  if (ZMQ_HAVE_CURVE AND ${test} MATCHES test_security_curve)
    add_executable(${test} ${test}.cpp
        "../src/tweetnacl.c"
        "../src/err.cpp"
        "../src/random.cpp"
        "../src/clock.cpp"
        "testutil_security.hpp")
  elseif (${test} MATCHES test_security_zap)
    add_executable(${test} ${test}.cpp
        "testutil_security.hpp")
  else ()
190
    add_executable(${test} ${test}.cpp "testutil.hpp" "testutil_unity.hpp")
191
  endif ()
192
  if(WIN32)
193 194 195 196 197 198
    # This is the output for Debug dynamic builds on Visual Studio 6.0
    # You should provide the correct directory, don't know how to do it automatically
    find_path(LIBZMQ_PATH "libzmq.lib" PATHS "../bin/Win32/Debug/v120/dynamic")
    if(NOT ${LIBZMQ_PATH} STREQUAL "LIBZMQ_PATH-NOTFOUND")
        SET_TARGET_PROPERTIES( ${test} PROPERTIES LINK_FLAGS "/LIBPATH:${LIBZMQ_PATH}" )
    endif()
199
  else()
200
    # per-test directories not generated on OS X / Darwin
201
    if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang.*")
202 203
        link_directories(${test} PRIVATE "${CMAKE_SOURCE_DIR}/../lib")
    endif()
204
  endif()
205

206

207
  if(RT_LIBRARY)
Doron Somech's avatar
Doron Somech committed
208
    target_link_libraries(${test} ${RT_LIBRARY} )
209 210
  endif()
  if(WIN32)
Doron Somech's avatar
Doron Somech committed
211
    add_test(NAME ${test} WORKING_DIRECTORY ${LIBRARY_OUTPUT_PATH} COMMAND ${test})
212
  else()
Doron Somech's avatar
Doron Somech committed
213
    add_test(NAME ${test} COMMAND ${test})
214
  endif()
215
  set_tests_properties(${test} PROPERTIES TIMEOUT 10)
216
  set_tests_properties(${test} PROPERTIES SKIP_RETURN_CODE 77)
217 218
endforeach()

219
#override timeout for these tests
220 221 222
if(ZMQ_HAVE_CURVE)
  set_tests_properties(test_security_curve PROPERTIES TIMEOUT 60)
endif()
223
set_tests_properties(test_heartbeats PROPERTIES TIMEOUT 60)
224

225 226
if(WIN32 AND ${POLLER} MATCHES "epoll")
  set_tests_properties(test_many_sockets PROPERTIES TIMEOUT 120)
227 228
endif()

229
if(WIN32 AND ENABLE_DRAFTS)
230 231 232
  set_tests_properties(test_radio_dish PROPERTIES TIMEOUT 30)
endif()

233
#add additional required flags
234 235
#ZMQ_USE_TWEETNACL will already be defined when not using sodium
if(ZMQ_HAVE_CURVE AND NOT ZMQ_USE_TWEETNACL)
236 237
  target_compile_definitions(test_security_curve PRIVATE "-DZMQ_USE_TWEETNACL")
endif()
238

239 240
set_tests_properties(test_security_zap PROPERTIES TIMEOUT 60)

241 242 243 244 245 246 247 248 249 250
#Check whether all tests in the current folder are present
file(READ "${CMAKE_CURRENT_LIST_FILE}" CURRENT_LIST_FILE_CONTENT)
file(GLOB ALL_TEST_SOURCES "test_*.cpp")
foreach(TEST_SOURCE ${ALL_TEST_SOURCES})
  get_filename_component(TESTNAME "${TEST_SOURCE}" NAME_WE)
  string(REGEX MATCH "${TESTNAME}" MATCH_TESTNAME "${CURRENT_LIST_FILE_CONTENT}")
  if (NOT MATCH_TESTNAME)
    message(AUTHOR_WARNING "Test '${TESTNAME}' is not known to CTest.")
  endif()
endforeach()