CMakeLists.txt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. cmake_minimum_required(VERSION 3.0.0)
  2. list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
  3. include (DetectCPPZMQVersion)
  4. project(cppzmq VERSION ${DETECTED_CPPZMQ_VERSION})
  5. if (NOT TARGET libzmq AND NOT TARGET libzmq-static)
  6. find_package(ZeroMQ QUIET)
  7. # libzmq autotools install: fallback to pkg-config
  8. if(NOT ZeroMQ_FOUND)
  9. message(STATUS "CMake libzmq package not found, trying again with pkg-config (normal install of zeromq)")
  10. list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/libzmq-pkg-config)
  11. find_package(ZeroMQ REQUIRED)
  12. endif()
  13. # TODO "REQUIRED" above should already cause a fatal failure if not found, but this doesn't seem to work
  14. if(NOT ZeroMQ_FOUND)
  15. message(FATAL_ERROR "ZeroMQ was not found, neither as a CMake package nor via pkg-config")
  16. endif()
  17. if (ZeroMQ_FOUND AND (NOT TARGET libzmq OR NOT TARGET libzmq-static))
  18. message(FATAL_ERROR "ZeroMQ version not supported!")
  19. endif()
  20. endif()
  21. if (EXISTS "${CMAKE_SOURCE_DIR}/.git")
  22. OPTION (ENABLE_DRAFTS "Build and install draft classes and methods" ON)
  23. else ()
  24. OPTION (ENABLE_DRAFTS "Build and install draft classes and methods" OFF)
  25. endif ()
  26. if (ENABLE_DRAFTS)
  27. ADD_DEFINITIONS (-DZMQ_BUILD_DRAFT_API)
  28. set (pkg_config_defines "-DZMQ_BUILD_DRAFT_API=1")
  29. else (ENABLE_DRAFTS)
  30. set (pkg_config_defines "")
  31. endif (ENABLE_DRAFTS)
  32. message(STATUS "cppzmq v${cppzmq_VERSION}")
  33. set(CPPZMQ_HEADERS
  34. zmq.hpp
  35. zmq_addon.hpp
  36. )
  37. foreach (target cppzmq cppzmq-static)
  38. add_library(${target} INTERFACE)
  39. target_include_directories(${target} INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
  40. $<INSTALL_INTERFACE:include>)
  41. endforeach()
  42. target_link_libraries(cppzmq INTERFACE libzmq)
  43. target_link_libraries(cppzmq-static INTERFACE libzmq-static)
  44. include(GNUInstallDirs)
  45. include(CMakePackageConfigHelpers)
  46. install(TARGETS cppzmq cppzmq-static
  47. EXPORT ${PROJECT_NAME}-targets)
  48. install(FILES ${CPPZMQ_HEADERS}
  49. DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
  50. # GNUInstallDirs "DATADIR" wrong here; CMake search path wants "share".
  51. set(CPPZMQ_CMAKECONFIG_INSTALL_DIR "share/cmake/${PROJECT_NAME}" CACHE STRING "install path for cppzmqConfig.cmake")
  52. configure_file(libzmq-pkg-config/FindZeroMQ.cmake
  53. libzmq-pkg-config/FindZeroMQ.cmake
  54. COPYONLY)
  55. export(EXPORT ${PROJECT_NAME}-targets
  56. FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake")
  57. configure_package_config_file(${PROJECT_NAME}Config.cmake.in
  58. "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
  59. INSTALL_DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR})
  60. # Workaround until ARCH_INDEPENDENT flag can be used with cmake 3.14.
  61. # The ConigVersion.cmake file contains checks for the architecture is was
  62. # generated on, which can cause problems for header only libraries
  63. # used with e.g. the Conan package manager. Since it is header only we
  64. # can/should omit those checks.
  65. set(CPPZMQ_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
  66. set(CMAKE_SIZEOF_VOID_P "") # a simple unset is not sufficient
  67. write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
  68. VERSION ${CPPZMQ_VERSION}
  69. COMPATIBILITY AnyNewerVersion)
  70. set(CMAKE_SIZEOF_VOID_P ${CPPZMQ_SIZEOF_VOID_P})
  71. install(EXPORT ${PROJECT_NAME}-targets
  72. FILE ${PROJECT_NAME}Targets.cmake
  73. DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR})
  74. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
  75. ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
  76. DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR})
  77. install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/libzmq-pkg-config/FindZeroMQ.cmake
  78. DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR}/libzmq-pkg-config)
  79. option(CPPZMQ_BUILD_TESTS "Whether or not to build the tests" ON)
  80. if (CPPZMQ_BUILD_TESTS)
  81. enable_testing()
  82. add_subdirectory(tests)
  83. endif()