xref: /aosp_15_r20/external/libpcap/rpcapd/CMakeLists.txt (revision 8b26181f966a6af5cf6981a6f474313de533bb28)
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