2 check_function_exists(crypt HAVE_CRYPT_IN_SYSTEM_LIBRARIES)
3 if(HAVE_CRYPT_IN_SYSTEM_LIBRARIES)
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)
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)
17 # On UN*X, we need pthreads and crypt().
19 if(WIN32 OR ((CMAKE_USE_PTHREADS_INIT OR PTHREADS_FOUND) AND HAVE_CRYPT))
22 # Do we have getspnam()?
24 check_function_exists(getspnam HAVE_GETSPNAM)
27 # Find library needed for getaddrinfo.
28 # NOTE: if you hand check_library_exists as its last argument a variable
29 # that's been set, it skips the test, so we need different variables.
31 include(CheckLibraryExists)
32 check_function_exists(getaddrinfo STDLIBS_HAVE_GETADDRINFO)
33 if(NOT STDLIBS_HAVE_GETADDRINFO)
34 check_library_exists(xnet getaddrinfo "" LIBXNET_HAS_GETADDRINFO)
35 if(LIBXNET_HAS_GETADDRINFO)
36 set(RPCAPD_LINK_LIBRARIES ${RPCAPD_LINK_LIBRARIES} xnet)
37 else(LIBXNET_HAS_GETADDRINFO)
38 include(CMakePushCheckState)
39 cmake_push_check_state()
40 set(CMAKE_REQUIRED_LIBRARIES nsl)
41 check_library_exists(socket getaddrinfo "" LIBSOCKET_HAS_GETADDRINFO)
42 cmake_pop_check_state()
43 if(LIBSOCKET_HAS_GETADDRINFO)
44 set(RPCAPD_LINK_LIBRARIES ${RPCAPD_LINK_LIBRARIES} socket nsl)
45 endif(LIBSOCKET_HAS_GETADDRINFO)
46 endif(LIBXNET_HAS_GETADDRINFO)
47 endif(NOT STDLIBS_HAVE_GETADDRINFO)
51 set(RPCAPD_EXTRA_SOURCES
53 ${pcap_SOURCE_DIR}/missing/getopt.c
54 ${pcap_SOURCE_DIR}/missing/win_snprintf.c
56 include_directories(${pcap_SOURCE_DIR}/rpcapd ${pcap_SOURCE_DIR}/missing)
64 ${pcap_SOURCE_DIR}/rpcap-protocol.c
65 ${pcap_SOURCE_DIR}/sockutils.c
66 ${pcap_SOURCE_DIR}/fmtutils.c
67 ${RPCAPD_EXTRA_SOURCES}
70 if(NOT C_ADDITIONAL_FLAGS STREQUAL "")
71 set_target_properties(rpcapd PROPERTIES COMPILE_FLAGS ${C_ADDITIONAL_FLAGS})
75 # By default, build rpcapd universal with the appropriate set of
76 # architectures for the OS on which we're doing the build.
78 if(APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "")
80 # Get the major version of Darwin.
82 string(REGEX MATCH "^([0-9]+)" SYSTEM_VERSION_MAJOR "${CMAKE_SYSTEM_VERSION}")
84 if(SYSTEM_VERSION_MAJOR EQUAL 9)
86 # Leopard. Build for 32-bit x86 and 32-bit PowerPC, with
89 set(OSX_PROGRAM_ARCHITECTURES "i386;ppc")
90 elseif(SYSTEM_VERSION_MAJOR EQUAL 10)
92 # Snow Leopard. Build for x86-64 and 32-bit x86, with
95 set(OSX_PROGRAM_ARCHITECTURES "x86_64;i386")
98 # Post-Snow Leopard. Build only for x86-64.
99 # XXX - update if and when Apple adds ARM-based Macs.
100 # (You're on your own for iOS etc.)
102 set(OSX_PROGRAM_ARCHITECTURES "x86_64")
105 set_target_properties(rpcapd PROPERTIES
106 OSX_ARCHITECTURES "${OSX_PROGRAM_ARCHITECTURES}")
110 target_link_libraries(rpcapd ${LIBRARY_NAME}
111 ${RPCAPD_LINK_LIBRARIES} ${PCAP_LINK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
113 target_link_libraries(rpcapd ${LIBRARY_NAME}_static
114 ${RPCAPD_LINK_LIBRARIES} ${PCAP_LINK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
117 ######################################
118 # Install rpcap daemon and man pages
119 ######################################
122 # "Define GNU standard installation directories", which actually
123 # are also defined, to some degree, by autotools, and at least
124 # some of which are general UN*X conventions.
126 include(GNUInstallDirs)
128 set(MANADMIN_EXPAND rpcapd.manadmin.in)
130 set(MANFILE_EXPAND rpcapd-config.manfile.in)
132 if(MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 8)
133 install(TARGETS rpcapd DESTINATION bin/amd64)
134 else(MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 8)
135 install(TARGETS rpcapd DESTINATION bin)
136 endif(MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 8)
138 # On UN*X, and on Windows when not using MSVC, generate process man
139 # pages and arrange that they be installed.
144 # For each section of the manual for which we have man pages
145 # that require macro expansion, do the expansion.
148 foreach(TEMPLATE_MANPAGE ${MANADMIN_EXPAND})
149 string(REPLACE ".manadmin.in" ".${MAN_ADMIN_COMMANDS}" MANPAGE ${TEMPLATE_MANPAGE})
150 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${TEMPLATE_MANPAGE} ${CMAKE_CURRENT_BINARY_DIR}/${MANPAGE} @ONLY)
151 set(MANADMIN ${MANADMIN} ${CMAKE_CURRENT_BINARY_DIR}/${MANPAGE})
152 endforeach(TEMPLATE_MANPAGE)
153 install(FILES ${MANADMIN} DESTINATION ${CMAKE_INSTALL_MANDIR}/man${MAN_ADMIN_COMMANDS})
156 foreach(TEMPLATE_MANPAGE ${MANFILE_EXPAND})
157 string(REPLACE ".manfile.in" ".${MAN_FILE_FORMATS}" MANPAGE ${TEMPLATE_MANPAGE})
158 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${TEMPLATE_MANPAGE} ${CMAKE_CURRENT_BINARY_DIR}/${MANPAGE} @ONLY)
159 set(MANFILE ${MANFILE} ${CMAKE_CURRENT_BINARY_DIR}/${MANPAGE})
160 endforeach(TEMPLATE_MANPAGE)
161 install(FILES ${MANFILE} DESTINATION ${CMAKE_INSTALL_MANDIR}/man${MAN_FILE_FORMATS})
163 endif(WIN32 OR ((CMAKE_USE_PTHREADS_INIT OR PTHREADS_FOUND) AND HAVE_CRYPT))