3 # Wireshark - Network traffic analyzer
4 # By Gerald Combs <gerald@wireshark.org>
5 # Copyright 1998 Gerald Combs
7 # SPDX-License-Identifier: GPL-2.0-or-later
10 if(EXTCAP_ANDROIDDUMP_LIBPCAP)
11 set(ANDROIDDUMP_USE_LIBPCAP 1)
15 SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LIBSSH_LIBRARIES})
16 CHECK_FUNCTION_EXISTS(ssh_userauth_agent LIBSSH_USERAUTH_AGENT_FOUND)
17 if(LIBSSH_USERAUTH_AGENT_FOUND)
18 set(HAVE_SSH_USERAUTH_AGENT 1)
22 # Ensure "run/extcap" exists
23 # add_custom_command(OUTPUT "${DATAFILE_DIR}/extcap"
24 # COMMAND ${CMAKE_COMMAND} -E make_directory
25 # "${DATAFILE_DIR}/extcap"
27 # list(APPEND copy_data_files_depends "${DATAFILE_DIR}/extcap")
30 macro(set_extcap_executable_properties _executable)
31 set_target_properties(${_executable} PROPERTIES FOLDER "Executables/Extcaps")
33 set(PROGLIST ${PROGLIST} ${_executable})
36 set_target_properties(${_executable} PROPERTIES
37 LINK_FLAGS "${WS_LINK_FLAGS}"
38 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/run/extcap
39 RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/run/Debug/extcap
40 RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/run/Release/extcap
41 RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR}/run/MinSizeRel/extcap
42 RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR}/run/RelWithDebInfo/extcap
45 set_target_properties(${_executable} PROPERTIES
46 LINK_FLAGS "${WS_LINK_FLAGS}"
47 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/run/extcap
49 if(CMAKE_INSTALL_RPATH MATCHES "\\$ORIGIN")
50 # Use relative path from ${EXTCAP_INSTALL_LIBDIR} to ${CMAKE_INSTALL_LIBDIR}
51 set_target_properties(${_executable} PROPERTIES
52 INSTALL_RPATH "$ORIGIN/../.."
55 if(ENABLE_APPLICATION_BUNDLE)
56 if(NOT CMAKE_CFG_INTDIR STREQUAL ".")
58 set_target_properties(${_executable} PROPERTIES
59 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/run/$<CONFIG>/Wireshark.app/Contents/MacOS/extcap
62 set_target_properties(${_executable} PROPERTIES
63 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/run/Wireshark.app/Contents/MacOS/extcap
65 # Add a wrapper script which runs each executable from the
66 # correct location. This adds convenience but makes debugging
68 file(REMOVE ${CMAKE_BINARY_DIR}/run/${_executable})
69 file(WRITE ${CMAKE_BINARY_DIR}/run/${_executable} "#!/bin/sh\n")
70 file(APPEND ${CMAKE_BINARY_DIR}/run/${_executable} "exec ${CMAKE_BINARY_DIR}/run/Wireshark.app/Contents/MacOS/extcap/${_executable} \"\$\@\"\n")
71 execute_process(COMMAND chmod a+x ${CMAKE_BINARY_DIR}/run/${_executable})
77 add_custom_target(extcaps)
79 add_library(extcap-base OBJECT extcap-base.c)
81 add_library(ssh-base OBJECT ssh-base.c)
82 target_include_directories(ssh-base SYSTEM
84 ${LIBSSH_INCLUDE_DIRS}
89 if(EXTCAP_ANDROIDDUMP_LIBPCAP)
97 message(FATAL_ERROR "You are trying to build androiddump with libpcap but do not have it")
108 set(androiddump_FILES
109 $<TARGET_OBJECTS:cli_main>
110 $<TARGET_OBJECTS:extcap-base>
114 set_executable_resources(androiddump "Androiddump")
115 add_executable(androiddump ${androiddump_FILES})
116 set_extcap_executable_properties(androiddump)
117 target_link_libraries(androiddump ${androiddump_LIBS})
118 install(TARGETS androiddump RUNTIME DESTINATION ${EXTCAP_INSTALL_LIBDIR})
119 add_dependencies(extcaps androiddump)
122 if(BUILD_sshdump AND LIBSSH_FOUND)
130 $<TARGET_OBJECTS:cli_main>
131 $<TARGET_OBJECTS:extcap-base>
132 $<TARGET_OBJECTS:ssh-base>
136 set_executable_resources(sshdump "Sshdump")
137 add_executable(sshdump ${sshdump_FILES})
138 set_extcap_executable_properties(sshdump)
139 target_link_libraries(sshdump ${sshdump_LIBS})
140 target_include_directories(sshdump SYSTEM PRIVATE ${LIBSSH_INCLUDE_DIRS})
141 install(TARGETS sshdump RUNTIME DESTINATION ${EXTCAP_INSTALL_LIBDIR})
142 add_dependencies(extcaps sshdump)
143 elseif (BUILD_sshdump)
144 #message( WARNING "Cannot find libssh, cannot build sshdump" )
147 if(BUILD_ciscodump AND LIBSSH_FOUND)
156 $<TARGET_OBJECTS:cli_main>
157 $<TARGET_OBJECTS:extcap-base>
158 $<TARGET_OBJECTS:ssh-base>
162 set_executable_resources(ciscodump "Ciscodump")
163 add_executable(ciscodump ${ciscodump_FILES})
164 set_extcap_executable_properties(ciscodump)
165 target_link_libraries(ciscodump ${ciscodump_LIBS})
166 target_include_directories(ciscodump SYSTEM PRIVATE ${LIBSSH_INCLUDE_DIRS})
167 install(TARGETS ciscodump RUNTIME DESTINATION ${EXTCAP_INSTALL_LIBDIR})
168 add_dependencies(extcaps ciscodump)
169 elseif (BUILD_ciscodump)
170 #message( WARNING "Cannot find libssh, cannot build ciscodump" )
173 if(BUILD_dpauxmon AND HAVE_LIBNL3)
182 $<TARGET_OBJECTS:extcap-base>
186 set_executable_resources(dpauxmon "dpauxmon")
187 add_executable(dpauxmon ${dpauxmon_FILES})
188 set_extcap_executable_properties(dpauxmon)
189 target_link_libraries(dpauxmon ${dpauxmon_LIBS})
190 target_include_directories(dpauxmon SYSTEM PRIVATE ${NL_INCLUDE_DIRS})
191 install(TARGETS dpauxmon RUNTIME DESTINATION ${EXTCAP_INSTALL_LIBDIR})
192 add_dependencies(extcaps dpauxmon)
193 elseif (BUILD_dpauxmon)
194 #message( WARNING "Cannot find libnl3, cannot build dpauxmon" )
205 $<TARGET_OBJECTS:cli_main>
206 $<TARGET_OBJECTS:extcap-base>
210 set_executable_resources(udpdump "udpdump")
211 add_executable(udpdump ${udpdump_FILES})
212 set_extcap_executable_properties(udpdump)
213 target_link_libraries(udpdump ${udpdump_LIBS})
214 install(TARGETS udpdump RUNTIME DESTINATION ${EXTCAP_INSTALL_LIBDIR})
215 add_dependencies(extcaps udpdump)
218 if(BUILD_randpktdump)
227 set(randpktdump_FILES
228 $<TARGET_OBJECTS:cli_main>
229 $<TARGET_OBJECTS:extcap-base>
233 set_executable_resources(randpktdump "randpktdump")
234 add_executable(randpktdump ${randpktdump_FILES})
235 set_extcap_executable_properties(randpktdump)
236 target_link_libraries(randpktdump ${randpktdump_LIBS})
237 install(TARGETS randpktdump RUNTIME DESTINATION ${EXTCAP_INSTALL_LIBDIR})
238 add_dependencies(extcaps randpktdump)
241 if(BUILD_sdjournal AND SYSTEMD_FOUND)
253 $<TARGET_OBJECTS:extcap-base>
257 set_executable_resources(sdjournal "sdjournal")
258 add_executable(sdjournal ${sdjournal_FILES})
259 set_extcap_executable_properties(sdjournal)
260 target_link_libraries(sdjournal ${sdjournal_LIBS})
261 target_include_directories(sdjournal SYSTEM PRIVATE ${SYSTEMD_INCLUDE_DIRS})
262 target_compile_definitions(sdjournal PRIVATE ${SYSTEMD_DEFINITIONS})
263 install(TARGETS sdjournal RUNTIME DESTINATION ${EXTCAP_INSTALL_LIBDIR})
264 add_dependencies(extcaps sdjournal)
265 elseif (BUILD_sdjournal)
266 #message( WARNING "Cannot find libsystemd, cannot build sdjournal" )
270 # Editor modelines - https://www.wireshark.org/tools/modelines.html
275 # indent-tabs-mode: t
278 # vi: set shiftwidth=8 tabstop=8 noexpandtab:
279 # :indentSize=8:tabSize=8:noTabs=false: