sngrep/CMakeLists.txt

252 lines
9.1 KiB
CMake

cmake_minimum_required(VERSION 3.0)
project(sngrep
VERSION 2.0.0
LANGUAGES C)
set(PROJECT_NAME sngrep)
set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb -Werror -Wall -Wextra -pedantic")
if (CMAKE_VERSION VERSION_LESS "3.1")
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
set(CMAKE_C_FLAGS "-std=gnu11 ${CMAKE_C_FLAGS}")
endif ()
else ()
set(CMAKE_C_STANDARD 11)
endif ()
include(GNUInstallDirs)
include_directories(${CMAKE_SOURCE_DIR}/src)
set(SOURCES
src/codecs/codec.c
src/codecs/codec_g711a.c
src/codecs/codec_g711u.c
src/capture/capture.c
src/capture/capture_pcap.c
src/capture/capture_txt.c
src/glib-extra/gasyncqueuesource.c
src/glib-extra/gbytes.c
src/glib-extra/gdatetime.c
src/glib-extra/glist.c
src/glib-extra/gptrarray.c
src/glib-extra/glib.c
src/glib-extra/gvalue.c
src/glib-extra/glib_enum_types.c
src/tui/tui.c
src/tui/windows/call_flow_win.c
src/tui/windows/call_list_win.c
src/tui/windows/call_raw_win.c
src/tui/windows/column_select_win.c
src/tui/windows/filter_win.c
src/tui/windows/msg_diff_win.c
src/tui/windows/save_win.c
src/tui/windows/settings_win.c
src/tui/windows/stats_win.c
src/tui/windows/auth_validate_win.c
src/tui/windows/protocol_select_win.c
src/tui/window.c
src/tui/dialog.c
src/tui/keybinding.c
src/tui/scrollbar.c
src/storage/address.c
src/packet/dissector.c
src/packet/dissector.h
src/packet/packet.c
src/packet/packet_link.c
src/packet/packet_ip.c
src/packet/packet_tcp.c
src/packet/packet_mrcp.c
src/packet/packet_udp.c
src/packet/packet_sip.c
src/packet/packet_sdp.c
src/packet/packet_rtp.c
src/packet/packet_rtcp.c
src/packet/packet_televt.c
src/storage/filter.c
src/storage/group.c
src/storage/stream.c
src/storage/attribute.c
src/storage/storage.c
src/storage/call.c
src/storage/message.c
src/storage/datetime.c
src/setting.c
src/main.c
src/capture/capture_input.c
src/capture/capture_output.c
)
######################################################################
# HEP Support
option(USE_HEP "Enable HEP/EEP Support" OFF)
if (USE_HEP)
set(SOURCES ${SOURCES} src/capture/capture_hep.c)
set(SOURCES ${SOURCES} src/packet/packet_hep.c)
endif (USE_HEP)
# IPv6 Support
option(USE_IPV6 "Enable IPv6 Support" OFF)
# GnuTLS Support
option(WITH_SSL "Enable SSL Support (TLS SIP Transport)" OFF)
if (WITH_SSL)
set(SOURCES ${SOURCES} src/packet/packet_tls.c)
endif (WITH_SSL)
# libsnd Support
option(WITH_SND "Enable libsnd files (for saving into WAV files)" OFF)
# Pulseaudio Support
option(WITH_PULSE "Enable pulseaudio support (for playing RTP streams)" OFF)
if (WITH_PULSE)
set(SOURCES ${SOURCES} src/tui/windows/rtp_player_win.c)
endif (WITH_PULSE)
# G.729 decoding support
option(WITH_G729 "Enable g729 RTP decoding" OFF)
if (WITH_G729)
set(SOURCES ${SOURCES} src/codecs/codec_g729.c)
endif (WITH_G729)
######################################################################
add_executable(sngrep ${SOURCES})
install(
TARGETS sngrep
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
find_package(PkgConfig REQUIRED)
pkg_check_modules(CURSES REQUIRED ncursesw menuw panelw formw)
include_directories(${CURSES_INCLUDE_DIRS})
target_link_libraries(sngrep ${CURSES_LIBRARIES})
pkg_check_modules(GLIB REQUIRED glib-2.0>=2.44 gobject-2.0>=2.44)
include_directories(${GLIB_INCLUDE_DIRS})
target_link_libraries(sngrep ${GLIB_LIBRARIES})
find_program(GLIB_MKENUMS glib-mkenums HINTS ${glib_mkenums})
set(GLIB_MKENUMS_CMD)
if(NOT GLIB_MKENUMS)
message(FATAL_ERROR "Cannot find glib-mkenums, which is required to build ${PROJECT_NAME}")
endif(NOT GLIB_MKENUMS)
find_program(PCAP_CONFIG_EXECUTABLE NAMES pcap-config)
if (PCAP_CONFIG_EXECUTABLE)
exec_program(${PCAP_CONFIG_EXECUTABLE} ARGS --cflags OUTPUT_VARIABLE PCAP_CFLAGS)
exec_program(${PCAP_CONFIG_EXECUTABLE} ARGS --libs OUTPUT_VARIABLE PCAP_LIBRARIES)
else (PCAP_CONFIG_EXECUTABLE)
pkg_check_modules(PCAP REQUIRED libpcap)
endif (PCAP_CONFIG_EXECUTABLE)
include_directories(${PCAP_INCLUDE_DIRS})
target_link_libraries(sngrep ${PCAP_LIBRARIES})
if (WITH_SSL)
pkg_check_modules(GNUTLS REQUIRED gnutls)
include_directories(${GNUTLS_INCLUDE_DIRS})
target_link_libraries(sngrep ${GNUTLS_LIBRARIES} gcrypt)
# Use libgcrypt-config to get configure flags
find_program(GCRYPT_CONFIG_EXECUTABLE NAMES libgcrypt-config)
if (GCRYPT_CONFIG_EXECUTABLE)
exec_program(${GCRYPT_CONFIG_EXECUTABLE} ARGS --cflags OUTPUT_VARIABLE GCRYPT_CFLAGS)
exec_program(${GCRYPT_CONFIG_EXECUTABLE} ARGS --libs OUTPUT_VARIABLE GCRYPT_LIBRARIES)
endif (GCRYPT_CONFIG_EXECUTABLE)
include_directories(${GCRYPT_INCLUDE_DIRS})
target_link_libraries(sngrep ${GCRYPT_LIBRARIES})
endif (WITH_SSL)
if (WITH_SND)
pkg_check_modules(SND REQUIRED sndfile)
include_directories(${SND_INCLUDE_DIRS})
target_link_libraries(sngrep ${SND_LIBRARIES})
endif (WITH_SND)
if (WITH_PULSE)
pkg_check_modules(PULSE REQUIRED libpulse libpulse-mainloop-glib)
include_directories(${PULSE_INCLUDE_DIRS})
target_link_libraries(sngrep ${PULSE_LIBRARIES})
endif (WITH_PULSE)
if (WITH_G729)
pkg_check_modules(BCG729 REQUIRED libbcg729>=1.0.4)
include_directories(${BCG729_INCLUDE_DIRS})
target_link_libraries(sngrep ${BCG729_LIBRARIES})
endif (WITH_G729)
configure_file(
${PROJECT_SOURCE_DIR}/src/config.h.cmake
${PROJECT_SOURCE_DIR}/src/config.h
)
######################################################################
set(ENUM_HEADERS
src/tui/tui.h
src/tui/windows/call_flow_win.h
src/storage/storage.h
src/packet/packet.h
)
add_custom_command(
OUTPUT ${PROJECT_SOURCE_DIR}/src/glib-extra/glib_enum_types.h
COMMAND ${GLIB_MKENUMS}
ARGS
--template ${PROJECT_SOURCE_DIR}/src/glib-extra/glib_enum_types.h.tmpl
${ENUM_HEADERS} > ${PROJECT_SOURCE_DIR}/src/glib-extra/glib_enum_types.h
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
DEPENDS
${ENUM_HEADERS}
${PROJECT_SOURCE_DIR}/src/glib-extra/glib_enum_types.h.tmpl
)
add_custom_command(
OUTPUT ${PROJECT_SOURCE_DIR}/src/glib-extra/glib_enum_types.c
COMMAND ${GLIB_MKENUMS}
ARGS
--template ${PROJECT_SOURCE_DIR}/src/glib-extra/glib_enum_types.c.tmpl
${ENUM_HEADERS} > ${PROJECT_SOURCE_DIR}/src/glib-extra/glib_enum_types.c
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
DEPENDS
${ENUM_HEADERS} ${PROJECT_SOURCE_DIR}/src/glib-extra/glib_enum_types.h
${PROJECT_SOURCE_DIR}/src/glib-extra/glib_enum_types.c.tmpl
)
######################################################################
add_definitions(-D_GNU_SOURCE)
add_definitions(-D_XOPEN_SOURCE_EXTENDED)
######################################################################
install(TARGETS sngrep RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
######################################################################
# Tests support
enable_testing()
add_subdirectory(tests)
######################################################################
# Print Logo
option(DISPLAY_LOGO "Disable Irontec Logo from Summary menu" ON)
if (DISPLAY_LOGO)
message(" ")
message(" ██╗██████╗ ██████╗ ███╗ ██╗████████╗███████╗ ██████╗ ")
message(" ██║██╔══██╗██╔═══██╗████╗ ██║╚══██╔══╝██╔════╝██╔════╝ ")
message(" ██║██████╔╝██║ ██║██╔██╗ ██║ ██║ █████╗ ██║ ")
message(" ██║██╔══██╗██║ ██║██║╚██╗██║ ██║ ██╔══╝ ██║ ")
message(" ██║██║ ██║╚██████╔╝██║ ╚████║ ██║ ███████╗╚██████╗ ")
message(" ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═╝ ╚══════╝ ╚═════╝ ")
message(" ")
endif (DISPLAY_LOGO)
message(" ")
message(" sngrep configure finished ")
message(" ====================================================== ")
message(" SND Support (WITH_SND) : ${WITH_SND} ")
message(" SSL Support (WITH_SSL) : ${WITH_SSL} ")
message(" Pulseaudio Support (WITH_PULSE) : ${WITH_PULSE} ")
message(" g729 Support (WITH_G729) : ${WITH_G729} ")
message(" HEP Support (USE_HEP) : ${USE_HEP} ")
message(" IPv6 Support (USE_IPV6) : ${USE_IPV6} ")
message(" ====================================================== ")
message(" ")