CMakeLists.txt 6.49 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 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
  test_ancillaries
  test_system
  test_pair_inproc
  test_pair_tcp
  test_reqrep_inproc
  test_reqrep_tcp
  test_hwm
  test_hwm_pubsub
  test_reqrep_device
  test_sub_forward
  test_invalid_rep
  test_msg_flags
  test_msg_ffn
  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
  test_unbind_wildcard
  test_ctx_options
  test_ctx_destroy
  test_security_null
  test_security_plain
  test_security_zap
  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
  test_xpub_nodrop
  test_pub_invert_matching
  test_setsockopt
  test_sockopt_hwm
  test_heartbeats
  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
  test_xpub_verbose
  test_base85
  test_bind_after_connect_tcp
  test_sodium
  test_monitor
  test_socket_null
  test_reconnect_ivl
  test_mock_pub_sub
75
)
76

77
if(ZMQ_HAVE_CURVE)
78 79
  list(APPEND tests
    test_security_curve)
80
endif()
81

82 83
if(NOT WIN32)
  list(APPEND tests
84 85 86 87 88
    test_ipc_wildcard
    test_pair_ipc
    test_rebind_ipc
    test_reqrep_ipc
    test_proxy
89
    test_proxy_hwm
90 91 92 93 94 95 96 97
    test_proxy_single_socket
    test_proxy_terminate
    test_getsockopt_memset
    test_filter_ipc
    test_stream_exceeds_buffer
    test_router_mandatory_hwm
    test_use_fd
    test_zmq_poll_fd
98 99 100 101
  )
  if(HAVE_FORK)
    list(APPEND tests test_fork)
  endif()
102 103
  if(CMAKE_SYSTEM_NAME MATCHES "Linux")
    list(APPEND tests
104 105
      test_abstract_ipc
      )
106 107
    if(ZMQ_HAVE_TIPC)
      list(APPEND tests
108 109 110 111 112 113 114 115 116
        test_address_tipc
        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
117 118
      )
    endif()
119
  endif()
120
endif()
Ilya Kulakov's avatar
Ilya Kulakov committed
121 122 123

if(WITH_VMCI)
  list(APPEND tests
124 125
    test_pair_vmci
    test_reqrep_vmci
Ilya Kulakov's avatar
Ilya Kulakov committed
126 127
  )
endif()
128

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

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

151 152 153 154 155 156 157 158 159 160 161 162
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
  PUBLIC_HEADER "${CMAKE_CURRENT_LIST_DIR}/../external/unity/unity.h")
target_compile_definitions(unity PUBLIC "UNITY_USE_COMMAND_LINE_ARGS" "UNITY_EXCLUDE_FLOAT")
target_include_directories(unity PUBLIC "${CMAKE_CURRENT_LIST_DIR}/../external/unity")

if(MSVC_VERSION LESS 1700)
  set_source_files_properties("${CMAKE_CURRENT_LIST_DIR}/../external/unity/unity.c" PROPERTIES LANGUAGE CXX)
endif()
Kachanovskiy's avatar
Kachanovskiy committed
163

164 165 166
if(MSVC_VERSION LESS 1600)
  target_compile_definitions(unity PUBLIC "UNITY_EXCLUDE_STDINT_H")
endif()
167

168
# add library and include dirs for all targets
169 170 171 172 173
if(BUILD_SHARED)
  link_libraries(libzmq ${OPTIONAL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} unity)
else()
  link_libraries(libzmq-static ${OPTIONAL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} unity)
endif()
174
include_directories("${ZeroMQ_SOURCE_DIR}/../include" "${ZeroMQ_BINARY_DIR}")
175

176
foreach(test ${tests})
177
  # target_sources not supported before CMake 3.1
178
  if(ZMQ_HAVE_CURVE AND ${test} MATCHES test_security_curve)
179
    add_executable(${test} ${test}.cpp
180 181 182 183 184 185
      "../src/tweetnacl.c"
      "../src/err.cpp"
      "../src/random.cpp"
      "../src/clock.cpp"
      "testutil_security.hpp")
  elseif(${test} MATCHES test_security_zap)
186
    add_executable(${test} ${test}.cpp
187 188
      "testutil_security.hpp")
  else()
189
    add_executable(${test} ${test}.cpp "testutil.hpp" "testutil_unity.hpp")
190
  endif()
191
  if(WIN32)
192 193 194 195
    # 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")
196
      set_target_properties(${test} PROPERTIES LINK_FLAGS "/LIBPATH:${LIBZMQ_PATH}")
197
    endif()
198
  else()
199
    # per-test directories not generated on OS X / Darwin
200 201
    if(NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang.*")
      link_directories(${test} PRIVATE "${ZeroMQ_SOURCE_DIR}/../lib")
202
    endif()
203
  endif()
204 205

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

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

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

227
if(WIN32 AND ENABLE_DRAFTS)
228 229 230
  set_tests_properties(test_radio_dish PROPERTIES TIMEOUT 30)
endif()

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

237 238
set_tests_properties(test_security_zap PROPERTIES TIMEOUT 60)

239 240 241 242 243 244
#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}")
245
  if(NOT MATCH_TESTNAME)
246 247 248
    message(AUTHOR_WARNING "Test '${TESTNAME}' is not known to CTest.")
  endif()
endforeach()