CMakeLists.txt 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. if(UNIX)
  2. check_function_exists(crypt HAVE_CRYPT_IN_SYSTEM_LIBRARIES)
  3. if(HAVE_CRYPT_IN_SYSTEM_LIBRARIES)
  4. set(HAVE_CRYPT TRUE)
  5. else(HAVE_CRYPT_IN_SYSTEM_LIBRARIES)
  6. check_library_exists(crypt crypt "" HAVE_CRYPT_IN_LIBCRYPT)
  7. if(HAVE_CRYPT_IN_LIBCRYPT)
  8. set(RPCAPD_LINK_LIBRARIES ${RPCAPD_LINK_LIBRARIES} crypt)
  9. set(HAVE_CRYPT TRUE)
  10. else(HAVE_CRYPT_IN_LIBCRYPT)
  11. message(WARNING "crypt() not found. Won't be able to build rpcapd.")
  12. endif(HAVE_CRYPT_IN_LIBCRYPT)
  13. endif(HAVE_CRYPT_IN_SYSTEM_LIBRARIES)
  14. endif(UNIX)
  15. #
  16. # On UN*X, we need pthreads and crypt().
  17. #
  18. if(WIN32 OR ((CMAKE_USE_PTHREADS_INIT OR PTHREADS_FOUND) AND HAVE_CRYPT))
  19. if(UNIX)
  20. #
  21. # Do we have getspnam()?
  22. #
  23. check_function_exists(getspnam HAVE_GETSPNAM)
  24. #
  25. # Find library needed for getaddrinfo.
  26. # NOTE: if you hand check_library_exists as its last argument a variable
  27. # that's been set, it skips the test, so we need different variables.
  28. #
  29. include(CheckLibraryExists)
  30. check_function_exists(getaddrinfo STDLIBS_HAVE_GETADDRINFO)
  31. if(NOT STDLIBS_HAVE_GETADDRINFO)
  32. check_library_exists(xnet getaddrinfo "" LIBXNET_HAS_GETADDRINFO)
  33. if(LIBXNET_HAS_GETADDRINFO)
  34. set(RPCAPD_LINK_LIBRARIES ${RPCAPD_LINK_LIBRARIES} xnet)
  35. else(LIBXNET_HAS_GETADDRINFO)
  36. include(CMakePushCheckState)
  37. cmake_push_check_state()
  38. set(CMAKE_REQUIRED_LIBRARIES nsl)
  39. check_library_exists(socket getaddrinfo "" LIBSOCKET_HAS_GETADDRINFO)
  40. cmake_pop_check_state()
  41. if(LIBSOCKET_HAS_GETADDRINFO)
  42. set(RPCAPD_LINK_LIBRARIES ${RPCAPD_LINK_LIBRARIES} socket nsl)
  43. endif(LIBSOCKET_HAS_GETADDRINFO)
  44. endif(LIBXNET_HAS_GETADDRINFO)
  45. endif(NOT STDLIBS_HAVE_GETADDRINFO)
  46. endif(UNIX)
  47. if(WIN32)
  48. set(RPCAPD_EXTRA_SOURCES
  49. win32-svc.c
  50. ${pcap_SOURCE_DIR}/missing/getopt.c
  51. ${pcap_SOURCE_DIR}/missing/win_snprintf.c
  52. rpcapd.rc)
  53. include_directories(${pcap_SOURCE_DIR}/rpcapd ${pcap_SOURCE_DIR}/missing)
  54. endif(WIN32)
  55. add_executable(rpcapd
  56. daemon.c
  57. fileconf.c
  58. log-stderr.c
  59. rpcapd.c
  60. ${pcap_SOURCE_DIR}/rpcap-protocol.c
  61. ${pcap_SOURCE_DIR}/sockutils.c
  62. ${pcap_SOURCE_DIR}/fmtutils.c
  63. ${RPCAPD_EXTRA_SOURCES}
  64. )
  65. if(NOT C_ADDITIONAL_FLAGS STREQUAL "")
  66. set_target_properties(rpcapd PROPERTIES COMPILE_FLAGS ${C_ADDITIONAL_FLAGS})
  67. endif()
  68. if(WIN32)
  69. target_link_libraries(rpcapd ${LIBRARY_NAME}
  70. ${RPCAPD_LINK_LIBRARIES} ${PCAP_LINK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
  71. else(WIN32)
  72. target_link_libraries(rpcapd ${LIBRARY_NAME}_static
  73. ${RPCAPD_LINK_LIBRARIES} ${PCAP_LINK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
  74. endif(WIN32)
  75. ######################################
  76. # Install rpcap daemon and man pages
  77. ######################################
  78. #
  79. # "Define GNU standard installation directories", which actually
  80. # are also defined, to some degree, by autotools, and at least
  81. # some of which are general UN*X conventions.
  82. #
  83. include(GNUInstallDirs)
  84. set(MANADMIN_EXPAND rpcapd.manadmin.in)
  85. if(MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 8)
  86. install(TARGETS rpcapd DESTINATION bin/amd64)
  87. else(MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 8)
  88. install(TARGETS rpcapd DESTINATION bin)
  89. endif(MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 8)
  90. # On UN*X, and on Windows when not using MSVC, generate process man
  91. # pages and arrange that they be installed.
  92. if(NOT MSVC)
  93. #
  94. # Man pages.
  95. #
  96. # For each section of the manual for which we have man pages
  97. # that require macro expansion, do the expansion.
  98. #
  99. set(MANADMIN "")
  100. foreach(TEMPLATE_MANPAGE ${MANADMIN_EXPAND})
  101. string(REPLACE ".manadmin.in" ".${MAN_ADMIN_COMMANDS}" MANPAGE ${TEMPLATE_MANPAGE})
  102. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${TEMPLATE_MANPAGE} ${CMAKE_CURRENT_BINARY_DIR}/${MANPAGE} @ONLY)
  103. set(MANADMIN ${MANADMIN} ${CMAKE_CURRENT_BINARY_DIR}/${MANPAGE})
  104. endforeach(TEMPLATE_MANPAGE)
  105. install(FILES ${MANADMIN} DESTINATION ${CMAKE_INSTALL_MANDIR}/man${MAN_ADMIN_COMMANDS})
  106. endif(NOT MSVC)
  107. endif(WIN32 OR ((CMAKE_USE_PTHREADS_INIT OR PTHREADS_FOUND) AND HAVE_CRYPT))