cmake_minimum_required(VERSION 3.14)

project(PcapPlusPlusExamples)

set(CMAKE_PROJECT_HOMEPAGE_URL "https://pcapplusplus.github.io/")

# Set C++14
set(CMAKE_CXX_STANDARD 14)
# popen()/pclose() are not C++ standards
set(CMAKE_CXX_EXTENSIONS ON)

if(TARGET Pcap++)
  # Are we building from the PcapPlusPlus project ??
  message(STATUS "Building Example from PcapPlusPlus project")
  # Alias the project to make it compatible with imported package
  add_library(PcapPlusPlus::Pcap++ ALIAS Pcap++)
else()
  find_package(PcapPlusPlus CONFIG REQUIRED)
  message(STATUS "Using Pcap++ ${PcapPlusPlus_VERSION}")
  message(STATUS "Include dir: ${PcapPlusPlus_INCLUDE_DIR}")
endif()

add_subdirectory(PcapPrinter)
add_subdirectory(PcapSearch)
add_subdirectory(PcapSplitter)
add_subdirectory(X509Toolkit)

if(PCAPPP_USE_PCAP)
  add_subdirectory(Arping)
  add_subdirectory(ArpSpoofing)
  add_subdirectory(DNSResolver)
  add_subdirectory(DnsSpoofing)
  add_subdirectory(HttpAnalyzer)
  add_subdirectory(IcmpFileTransfer)
  add_subdirectory(IPDefragUtil)
  add_subdirectory(IPFragUtil)
  add_subdirectory(PcapPlusPlus-benchmark)
  add_subdirectory(SSLAnalyzer)
  add_subdirectory(TcpReassembly)
  add_subdirectory(TLSFingerprinting)
endif()

if(PCAPPP_USE_DPDK)
  add_subdirectory(DpdkExample-FilterTraffic)
  add_subdirectory(DpdkBridge)
  if(PCAPPP_USE_DPDK_KNI)
    add_subdirectory(KniPong)
  endif()
endif()

if(PCAPPP_USE_PF_RING)
  add_subdirectory(PfRingExample-FilterTraffic)
endif()

if(PCAPPP_USE_XDP)
  add_subdirectory(XdpExample-FilterTraffic)
endif()

if(PCAPPP_BUILD_TUTORIALS)
  set(PCAPPP_BINARY_TUTORIAL_DIR ${CMAKE_BINARY_DIR}/tutorials_bin)
  add_subdirectory(Tutorials)
endif()
