1*8b26181fSAndroid Build Coastguard Workerif(UNIX) 2*8b26181fSAndroid Build Coastguard Worker check_function_exists(crypt HAVE_CRYPT_IN_SYSTEM_LIBRARIES) 3*8b26181fSAndroid Build Coastguard Worker if(HAVE_CRYPT_IN_SYSTEM_LIBRARIES) 4*8b26181fSAndroid Build Coastguard Worker set(HAVE_CRYPT TRUE) 5*8b26181fSAndroid Build Coastguard Worker else(HAVE_CRYPT_IN_SYSTEM_LIBRARIES) 6*8b26181fSAndroid Build Coastguard Worker check_library_exists(crypt crypt "" HAVE_CRYPT_IN_LIBCRYPT) 7*8b26181fSAndroid Build Coastguard Worker if(HAVE_CRYPT_IN_LIBCRYPT) 8*8b26181fSAndroid Build Coastguard Worker set(RPCAPD_LINK_LIBRARIES ${RPCAPD_LINK_LIBRARIES} crypt) 9*8b26181fSAndroid Build Coastguard Worker set(HAVE_CRYPT TRUE) 10*8b26181fSAndroid Build Coastguard Worker else(HAVE_CRYPT_IN_LIBCRYPT) 11*8b26181fSAndroid Build Coastguard Worker message(WARNING "crypt() not found. Won't be able to build rpcapd.") 12*8b26181fSAndroid Build Coastguard Worker endif(HAVE_CRYPT_IN_LIBCRYPT) 13*8b26181fSAndroid Build Coastguard Worker endif(HAVE_CRYPT_IN_SYSTEM_LIBRARIES) 14*8b26181fSAndroid Build Coastguard Workerendif(UNIX) 15*8b26181fSAndroid Build Coastguard Worker 16*8b26181fSAndroid Build Coastguard Worker# 17*8b26181fSAndroid Build Coastguard Worker# On UN*X, we need pthreads and crypt(). 18*8b26181fSAndroid Build Coastguard Worker# 19*8b26181fSAndroid Build Coastguard Workerif(WIN32 OR ((CMAKE_USE_PTHREADS_INIT OR PTHREADS_FOUND) AND HAVE_CRYPT)) 20*8b26181fSAndroid Build Coastguard Worker if(UNIX) 21*8b26181fSAndroid Build Coastguard Worker # 22*8b26181fSAndroid Build Coastguard Worker # Do we have getspnam()? 23*8b26181fSAndroid Build Coastguard Worker # 24*8b26181fSAndroid Build Coastguard Worker check_function_exists(getspnam HAVE_GETSPNAM) 25*8b26181fSAndroid Build Coastguard Worker 26*8b26181fSAndroid Build Coastguard Worker # 27*8b26181fSAndroid Build Coastguard Worker # Find library needed for getaddrinfo. 28*8b26181fSAndroid Build Coastguard Worker # NOTE: if you hand check_library_exists as its last argument a variable 29*8b26181fSAndroid Build Coastguard Worker # that's been set, it skips the test, so we need different variables. 30*8b26181fSAndroid Build Coastguard Worker # 31*8b26181fSAndroid Build Coastguard Worker include(CheckLibraryExists) 32*8b26181fSAndroid Build Coastguard Worker check_function_exists(getaddrinfo STDLIBS_HAVE_GETADDRINFO) 33*8b26181fSAndroid Build Coastguard Worker if(NOT STDLIBS_HAVE_GETADDRINFO) 34*8b26181fSAndroid Build Coastguard Worker check_library_exists(xnet getaddrinfo "" LIBXNET_HAS_GETADDRINFO) 35*8b26181fSAndroid Build Coastguard Worker if(LIBXNET_HAS_GETADDRINFO) 36*8b26181fSAndroid Build Coastguard Worker set(RPCAPD_LINK_LIBRARIES ${RPCAPD_LINK_LIBRARIES} xnet) 37*8b26181fSAndroid Build Coastguard Worker else(LIBXNET_HAS_GETADDRINFO) 38*8b26181fSAndroid Build Coastguard Worker include(CMakePushCheckState) 39*8b26181fSAndroid Build Coastguard Worker cmake_push_check_state() 40*8b26181fSAndroid Build Coastguard Worker set(CMAKE_REQUIRED_LIBRARIES nsl) 41*8b26181fSAndroid Build Coastguard Worker check_library_exists(socket getaddrinfo "" LIBSOCKET_HAS_GETADDRINFO) 42*8b26181fSAndroid Build Coastguard Worker cmake_pop_check_state() 43*8b26181fSAndroid Build Coastguard Worker if(LIBSOCKET_HAS_GETADDRINFO) 44*8b26181fSAndroid Build Coastguard Worker set(RPCAPD_LINK_LIBRARIES ${RPCAPD_LINK_LIBRARIES} socket nsl) 45*8b26181fSAndroid Build Coastguard Worker endif(LIBSOCKET_HAS_GETADDRINFO) 46*8b26181fSAndroid Build Coastguard Worker endif(LIBXNET_HAS_GETADDRINFO) 47*8b26181fSAndroid Build Coastguard Worker endif(NOT STDLIBS_HAVE_GETADDRINFO) 48*8b26181fSAndroid Build Coastguard Worker endif(UNIX) 49*8b26181fSAndroid Build Coastguard Worker 50*8b26181fSAndroid Build Coastguard Worker if(WIN32) 51*8b26181fSAndroid Build Coastguard Worker set(RPCAPD_EXTRA_SOURCES 52*8b26181fSAndroid Build Coastguard Worker win32-svc.c 53*8b26181fSAndroid Build Coastguard Worker ${pcap_SOURCE_DIR}/charconv.c 54*8b26181fSAndroid Build Coastguard Worker ${pcap_SOURCE_DIR}/missing/getopt.c 55*8b26181fSAndroid Build Coastguard Worker rpcapd.rc) 56*8b26181fSAndroid Build Coastguard Worker include_directories(${pcap_SOURCE_DIR}/rpcapd ${pcap_SOURCE_DIR}/missing) 57*8b26181fSAndroid Build Coastguard Worker endif(WIN32) 58*8b26181fSAndroid Build Coastguard Worker 59*8b26181fSAndroid Build Coastguard Worker add_executable(rpcapd 60*8b26181fSAndroid Build Coastguard Worker daemon.c 61*8b26181fSAndroid Build Coastguard Worker fileconf.c 62*8b26181fSAndroid Build Coastguard Worker log.c 63*8b26181fSAndroid Build Coastguard Worker rpcapd.c 64*8b26181fSAndroid Build Coastguard Worker ${pcap_SOURCE_DIR}/rpcap-protocol.c 65*8b26181fSAndroid Build Coastguard Worker ${pcap_SOURCE_DIR}/sockutils.c 66*8b26181fSAndroid Build Coastguard Worker ${pcap_SOURCE_DIR}/sslutils.c 67*8b26181fSAndroid Build Coastguard Worker ${pcap_SOURCE_DIR}/fmtutils.c 68*8b26181fSAndroid Build Coastguard Worker ${RPCAPD_EXTRA_SOURCES} 69*8b26181fSAndroid Build Coastguard Worker ) 70*8b26181fSAndroid Build Coastguard Worker 71*8b26181fSAndroid Build Coastguard Worker if(NOT C_ADDITIONAL_FLAGS STREQUAL "") 72*8b26181fSAndroid Build Coastguard Worker set_target_properties(rpcapd PROPERTIES COMPILE_FLAGS ${C_ADDITIONAL_FLAGS}) 73*8b26181fSAndroid Build Coastguard Worker endif() 74*8b26181fSAndroid Build Coastguard Worker 75*8b26181fSAndroid Build Coastguard Worker if(NOT "${SANITIZER_FLAGS}" STREQUAL "") 76*8b26181fSAndroid Build Coastguard Worker set_target_properties(rpcapd PROPERTIES 77*8b26181fSAndroid Build Coastguard Worker LINK_FLAGS "${SANITIZER_FLAGS}") 78*8b26181fSAndroid Build Coastguard Worker endif() 79*8b26181fSAndroid Build Coastguard Worker 80*8b26181fSAndroid Build Coastguard Worker # 81*8b26181fSAndroid Build Coastguard Worker # By default, build rpcapd universal with the appropriate set of 82*8b26181fSAndroid Build Coastguard Worker # architectures for the OS on which we're doing the build. 83*8b26181fSAndroid Build Coastguard Worker # 84*8b26181fSAndroid Build Coastguard Worker if(APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "") 85*8b26181fSAndroid Build Coastguard Worker # 86*8b26181fSAndroid Build Coastguard Worker # Get the major version of Darwin. 87*8b26181fSAndroid Build Coastguard Worker # 88*8b26181fSAndroid Build Coastguard Worker string(REGEX MATCH "^([0-9]+)" SYSTEM_VERSION_MAJOR "${CMAKE_SYSTEM_VERSION}") 89*8b26181fSAndroid Build Coastguard Worker 90*8b26181fSAndroid Build Coastguard Worker if(SYSTEM_VERSION_MAJOR EQUAL 9) 91*8b26181fSAndroid Build Coastguard Worker # 92*8b26181fSAndroid Build Coastguard Worker # Leopard. Build for 32-bit x86 and 32-bit PowerPC, with 93*8b26181fSAndroid Build Coastguard Worker # 32-bit x86 first. 94*8b26181fSAndroid Build Coastguard Worker # 95*8b26181fSAndroid Build Coastguard Worker set(OSX_PROGRAM_ARCHITECTURES "i386;ppc") 96*8b26181fSAndroid Build Coastguard Worker elseif(SYSTEM_VERSION_MAJOR EQUAL 10) 97*8b26181fSAndroid Build Coastguard Worker # 98*8b26181fSAndroid Build Coastguard Worker # Snow Leopard. Build for x86-64 and 32-bit x86, with 99*8b26181fSAndroid Build Coastguard Worker # x86-64 first. 100*8b26181fSAndroid Build Coastguard Worker # 101*8b26181fSAndroid Build Coastguard Worker set(OSX_PROGRAM_ARCHITECTURES "x86_64;i386") 102*8b26181fSAndroid Build Coastguard Worker else() 103*8b26181fSAndroid Build Coastguard Worker # 104*8b26181fSAndroid Build Coastguard Worker # Post-Snow Leopard. Build only for x86-64. 105*8b26181fSAndroid Build Coastguard Worker # XXX - update if and when Apple adds ARM-based Macs. 106*8b26181fSAndroid Build Coastguard Worker # (You're on your own for iOS etc.) 107*8b26181fSAndroid Build Coastguard Worker # 108*8b26181fSAndroid Build Coastguard Worker set(OSX_PROGRAM_ARCHITECTURES "x86_64") 109*8b26181fSAndroid Build Coastguard Worker endif() 110*8b26181fSAndroid Build Coastguard Worker 111*8b26181fSAndroid Build Coastguard Worker set_target_properties(rpcapd PROPERTIES 112*8b26181fSAndroid Build Coastguard Worker OSX_ARCHITECTURES "${OSX_PROGRAM_ARCHITECTURES}") 113*8b26181fSAndroid Build Coastguard Worker endif() 114*8b26181fSAndroid Build Coastguard Worker 115*8b26181fSAndroid Build Coastguard Worker if(WIN32) 116*8b26181fSAndroid Build Coastguard Worker target_link_libraries(rpcapd ${LIBRARY_NAME} 117*8b26181fSAndroid Build Coastguard Worker ${RPCAPD_LINK_LIBRARIES} ${PCAP_LINK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) 118*8b26181fSAndroid Build Coastguard Worker else(WIN32) 119*8b26181fSAndroid Build Coastguard Worker target_link_libraries(rpcapd ${LIBRARY_NAME}_static 120*8b26181fSAndroid Build Coastguard Worker ${RPCAPD_LINK_LIBRARIES} ${PCAP_LINK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) 121*8b26181fSAndroid Build Coastguard Worker endif(WIN32) 122*8b26181fSAndroid Build Coastguard Worker 123*8b26181fSAndroid Build Coastguard Worker ###################################### 124*8b26181fSAndroid Build Coastguard Worker # Install rpcap daemon and man pages 125*8b26181fSAndroid Build Coastguard Worker ###################################### 126*8b26181fSAndroid Build Coastguard Worker 127*8b26181fSAndroid Build Coastguard Worker # 128*8b26181fSAndroid Build Coastguard Worker # "Define GNU standard installation directories", which actually 129*8b26181fSAndroid Build Coastguard Worker # are also defined, to some degree, by autotools, and at least 130*8b26181fSAndroid Build Coastguard Worker # some of which are general UN*X conventions. 131*8b26181fSAndroid Build Coastguard Worker # 132*8b26181fSAndroid Build Coastguard Worker include(GNUInstallDirs) 133*8b26181fSAndroid Build Coastguard Worker 134*8b26181fSAndroid Build Coastguard Worker set(MANADMIN_EXPAND rpcapd.manadmin.in) 135*8b26181fSAndroid Build Coastguard Worker 136*8b26181fSAndroid Build Coastguard Worker set(MANFILE_EXPAND rpcapd-config.manfile.in) 137*8b26181fSAndroid Build Coastguard Worker 138*8b26181fSAndroid Build Coastguard Worker if(WIN32) 139*8b26181fSAndroid Build Coastguard Worker # 140*8b26181fSAndroid Build Coastguard Worker # XXX - where should the install target put rpcapd on Windows? 141*8b26181fSAndroid Build Coastguard Worker # 142*8b26181fSAndroid Build Coastguard Worker # Note that if an installer package is being produced 143*8b26181fSAndroid Build Coastguard Worker # from the results of the build, the installer package 144*8b26181fSAndroid Build Coastguard Worker # will determine where it goes. 145*8b26181fSAndroid Build Coastguard Worker # 146*8b26181fSAndroid Build Coastguard Worker if(CMAKE_SIZEOF_VOID_P EQUAL 8) 147*8b26181fSAndroid Build Coastguard Worker install(TARGETS rpcapd DESTINATION bin/amd64) 148*8b26181fSAndroid Build Coastguard Worker else(CMAKE_SIZEOF_VOID_P EQUAL 8) 149*8b26181fSAndroid Build Coastguard Worker install(TARGETS rpcapd DESTINATION bin) 150*8b26181fSAndroid Build Coastguard Worker endif(CMAKE_SIZEOF_VOID_P EQUAL 8) 151*8b26181fSAndroid Build Coastguard Worker else(WIN32) 152*8b26181fSAndroid Build Coastguard Worker # 153*8b26181fSAndroid Build Coastguard Worker # On UN*X, we put it in the sbin directory. 154*8b26181fSAndroid Build Coastguard Worker # 155*8b26181fSAndroid Build Coastguard Worker # XXX - the Linux Filesystem Hierarchy Standard says /usr/sbin 156*8b26181fSAndroid Build Coastguard Worker # is for daemons, but some other systems use /usr/libexec instead. 157*8b26181fSAndroid Build Coastguard Worker # However, since some users might, instead of having rpcapd be 158*8b26181fSAndroid Build Coastguard Worker # launched by inetd/xinetd/launchd/systemd, just run it on a 159*8b26181fSAndroid Build Coastguard Worker # machine when remote capture is to be done, a case can be made 160*8b26181fSAndroid Build Coastguard Worker # for the sbin directory even on systems with /usr/libexec. 161*8b26181fSAndroid Build Coastguard Worker # 162*8b26181fSAndroid Build Coastguard Worker install(TARGETS rpcapd DESTINATION ${CMAKE_INSTALL_SBINDIR}) 163*8b26181fSAndroid Build Coastguard Worker endif(WIN32) 164*8b26181fSAndroid Build Coastguard Worker 165*8b26181fSAndroid Build Coastguard Worker # On UN*X, and on Windows when not using MSVC, generate process man 166*8b26181fSAndroid Build Coastguard Worker # pages and arrange that they be installed. 167*8b26181fSAndroid Build Coastguard Worker if(NOT MSVC) 168*8b26181fSAndroid Build Coastguard Worker # 169*8b26181fSAndroid Build Coastguard Worker # Man pages. 170*8b26181fSAndroid Build Coastguard Worker # 171*8b26181fSAndroid Build Coastguard Worker # For each section of the manual for which we have man pages 172*8b26181fSAndroid Build Coastguard Worker # that require macro expansion, do the expansion. 173*8b26181fSAndroid Build Coastguard Worker # 174*8b26181fSAndroid Build Coastguard Worker set(MANADMIN "") 175*8b26181fSAndroid Build Coastguard Worker foreach(TEMPLATE_MANPAGE ${MANADMIN_EXPAND}) 176*8b26181fSAndroid Build Coastguard Worker string(REPLACE ".manadmin.in" ".${MAN_ADMIN_COMMANDS}" MANPAGE ${TEMPLATE_MANPAGE}) 177*8b26181fSAndroid Build Coastguard Worker configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${TEMPLATE_MANPAGE} ${CMAKE_CURRENT_BINARY_DIR}/${MANPAGE} @ONLY) 178*8b26181fSAndroid Build Coastguard Worker set(MANADMIN ${MANADMIN} ${CMAKE_CURRENT_BINARY_DIR}/${MANPAGE}) 179*8b26181fSAndroid Build Coastguard Worker endforeach(TEMPLATE_MANPAGE) 180*8b26181fSAndroid Build Coastguard Worker install(FILES ${MANADMIN} DESTINATION ${CMAKE_INSTALL_MANDIR}/man${MAN_ADMIN_COMMANDS}) 181*8b26181fSAndroid Build Coastguard Worker 182*8b26181fSAndroid Build Coastguard Worker set(MANFILE "") 183*8b26181fSAndroid Build Coastguard Worker foreach(TEMPLATE_MANPAGE ${MANFILE_EXPAND}) 184*8b26181fSAndroid Build Coastguard Worker string(REPLACE ".manfile.in" ".${MAN_FILE_FORMATS}" MANPAGE ${TEMPLATE_MANPAGE}) 185*8b26181fSAndroid Build Coastguard Worker configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${TEMPLATE_MANPAGE} ${CMAKE_CURRENT_BINARY_DIR}/${MANPAGE} @ONLY) 186*8b26181fSAndroid Build Coastguard Worker set(MANFILE ${MANFILE} ${CMAKE_CURRENT_BINARY_DIR}/${MANPAGE}) 187*8b26181fSAndroid Build Coastguard Worker endforeach(TEMPLATE_MANPAGE) 188*8b26181fSAndroid Build Coastguard Worker install(FILES ${MANFILE} DESTINATION ${CMAKE_INSTALL_MANDIR}/man${MAN_FILE_FORMATS}) 189*8b26181fSAndroid Build Coastguard Worker endif(NOT MSVC) 190*8b26181fSAndroid Build Coastguard Workerendif(WIN32 OR ((CMAKE_USE_PTHREADS_INIT OR PTHREADS_FOUND) AND HAVE_CRYPT)) 191