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

set(unittests
5 6 7 8 9 10 11
    unittest_ypipe
    unittest_poller
    unittest_mtrie
    unittest_ip_resolver
    unittest_udp_address
    unittest_radix_tree
    unittest_curve_encoding)
12

13
# if(ENABLE_DRAFTS) list(APPEND tests ) endif(ENABLE_DRAFTS)
14 15 16

# add location of platform.hpp for Windows builds
if(WIN32)
17 18 19 20
  add_definitions(-DZMQ_CUSTOM_PLATFORM_HPP)
  add_definitions(-D_WINSOCK_DEPRECATED_NO_WARNINGS)
  # Same name on 64bit systems
  link_libraries(ws2_32.lib)
21 22
endif()

23 24
include_directories("${ZeroMQ_SOURCE_DIR}/include" "${ZeroMQ_SOURCE_DIR}/src" "${ZeroMQ_BINARY_DIR}")
include_directories("${ZeroMQ_SOURCE_DIR}/external/unity")
25 26 27

foreach(test ${unittests})
  # target_sources not supported before CMake 3.1
28
  add_executable(${test} ${test}.cpp "unittest_resolver_common.hpp")
29 30

  # per-test directories not generated on OS X / Darwin
31 32
  if(NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang.*")
    link_directories(${test} PRIVATE "${ZeroMQ_SOURCE_DIR}/../lib")
33
  endif()
34

35
  target_link_libraries(${test} testutil-static)
36

37 38 39
  if(RT_LIBRARY)
    target_link_libraries(${test} ${RT_LIBRARY})
  endif()
40

41 42 43 44 45
  if(CMAKE_SYSTEM_NAME MATCHES "QNX")
    target_link_libraries(${test} socket)
    target_link_libraries(${test} m)
  endif()

46
  if(WIN32)
47 48 49 50
    add_test(
      NAME ${test}
      WORKING_DIRECTORY ${LIBRARY_OUTPUT_PATH}
      COMMAND ${test})
51 52 53
  else()
    add_test(NAME ${test} COMMAND ${test})
  endif()
54

55
  set_tests_properties(${test} PROPERTIES TIMEOUT 10)
56

57 58 59 60 61 62
  # TODO prevent libzmq (non-static) being in the list of link libraries at all
  get_target_property(LIBS ${test} LINK_LIBRARIES)
  list(REMOVE_ITEM LIBS libzmq)
  set_target_properties(${test} PROPERTIES LINK_LIBRARIES "${LIBS}")
endforeach()

63 64
# Check whether all tests in the current folder are present TODO duplicated with tests/CMakeLists.txt, define as a
# function?
65 66 67 68 69
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}")
70
  if(NOT MATCH_TESTNAME)
71 72 73
    message(AUTHOR_WARNING "Test '${TESTNAME}' is not known to CTest.")
  endif()
endforeach()