]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/libpcap/rpcapd/CMakeLists.txt
MFV r360158:
[FreeBSD/FreeBSD.git] / contrib / libpcap / rpcapd / CMakeLists.txt
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 #
17 # On UN*X, we need pthreads and crypt().
18 #
19 if(WIN32 OR ((CMAKE_USE_PTHREADS_INIT OR PTHREADS_FOUND) AND HAVE_CRYPT))
20   if(UNIX)
21     #
22     # Do we have getspnam()?
23     #
24     check_function_exists(getspnam HAVE_GETSPNAM)
25
26     #
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.
30     #
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)
48   endif(UNIX)
49
50   if(WIN32)
51     set(RPCAPD_EXTRA_SOURCES
52         win32-svc.c
53         ${pcap_SOURCE_DIR}/missing/getopt.c
54         ${pcap_SOURCE_DIR}/missing/win_snprintf.c
55         rpcapd.rc)
56     include_directories(${pcap_SOURCE_DIR}/rpcapd ${pcap_SOURCE_DIR}/missing)
57   endif(WIN32)
58
59   add_executable(rpcapd
60     daemon.c
61     fileconf.c
62     log.c
63     rpcapd.c
64     ${pcap_SOURCE_DIR}/rpcap-protocol.c
65     ${pcap_SOURCE_DIR}/sockutils.c
66     ${pcap_SOURCE_DIR}/fmtutils.c
67     ${RPCAPD_EXTRA_SOURCES}
68   )
69
70   if(NOT C_ADDITIONAL_FLAGS STREQUAL "")
71     set_target_properties(rpcapd PROPERTIES COMPILE_FLAGS ${C_ADDITIONAL_FLAGS})
72   endif()
73
74   #
75   # By default, build rpcapd universal with the appropriate set of
76   # architectures for the OS on which we're doing the build.
77   #
78   if(APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "")
79     #
80     # Get the major version of Darwin.
81     #
82     string(REGEX MATCH "^([0-9]+)" SYSTEM_VERSION_MAJOR "${CMAKE_SYSTEM_VERSION}")
83
84     if(SYSTEM_VERSION_MAJOR EQUAL 9)
85       #
86       # Leopard.  Build for 32-bit x86 and 32-bit PowerPC, with
87       # 32-bit x86 first.
88       #
89       set(OSX_PROGRAM_ARCHITECTURES "i386;ppc")
90     elseif(SYSTEM_VERSION_MAJOR EQUAL 10)
91       #
92       # Snow Leopard.  Build for x86-64 and 32-bit x86, with
93       # x86-64 first.
94       #
95       set(OSX_PROGRAM_ARCHITECTURES "x86_64;i386")
96     else()
97       #
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.)
101       #
102       set(OSX_PROGRAM_ARCHITECTURES "x86_64")
103     endif()
104
105     set_target_properties(rpcapd PROPERTIES
106       OSX_ARCHITECTURES "${OSX_PROGRAM_ARCHITECTURES}")
107   endif()
108
109   if(WIN32)
110     target_link_libraries(rpcapd ${LIBRARY_NAME}
111       ${RPCAPD_LINK_LIBRARIES} ${PCAP_LINK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
112   else(WIN32)
113     target_link_libraries(rpcapd ${LIBRARY_NAME}_static
114       ${RPCAPD_LINK_LIBRARIES} ${PCAP_LINK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
115   endif(WIN32)
116
117   ######################################
118   # Install rpcap daemon and man pages
119   ######################################
120
121   #
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.
125   #
126   include(GNUInstallDirs)
127
128   set(MANADMIN_EXPAND rpcapd.manadmin.in)
129
130   set(MANFILE_EXPAND rpcapd-config.manfile.in)
131
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)
137
138   # On UN*X, and on Windows when not using MSVC, generate process man
139   # pages and arrange that they be installed.
140   if(NOT MSVC)
141     #
142     # Man pages.
143     #
144     # For each section of the manual for which we have man pages
145     # that require macro expansion, do the expansion.
146     #
147     set(MANADMIN "")
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})
154
155     set(MANFILE "")
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})
162   endif(NOT MSVC)
163 endif(WIN32 OR ((CMAKE_USE_PTHREADS_INIT OR PTHREADS_FOUND) AND HAVE_CRYPT))