vermont/CMakeLists.txt

584 lines
19 KiB
CMake

#
# VERMONT build scripts for CMake
# Copyright (C) 2007 Christoph Sommer <christoph.sommer@informatik.uni-erlangen.de>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
PROJECT(VERMONT)
### CMake configuration
# allow building with old CMake. Use some bundled modules as a fallback
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.4)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
# TODO: Bonus: Remove -Wno-unused-parameter and fix all code as this one gernerates hundreds of warnings
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11 -Werror -Wall -pedantic -Wextra -Wno-unused-parameter"
CACHE STRING
"Recommended C Flags"
FORCE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -Werror -Wall -pedantic -Wextra -Wno-unused-parameter"
CACHE STRING
"Recommended C++ Flags"
FORCE)
# Add our own specifc debug flag to the defaults
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -DDEBUG" CACHE STRING "Recommended C Debug Flags" FORCE)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -DDEBUG" CACHE STRING "Recommended C++ Debug Flags" FORCE)
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE Release CACHE STRING
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
FORCE)
ENDIF(NOT CMAKE_BUILD_TYPE)
message("* Current build type is : ${CMAKE_BUILD_TYPE}")
# move some config clutter to the advanced section
MARK_AS_ADVANCED(
CMAKE_BACKWARDS_COMPATIBILITY
CMAKE_INSTALL_PREFIX
EXECUTABLE_OUTPUT_PATH
LIBRARY_OUTPUT_PATH
)
include(CppcheckTargets)
include(CheckSymbolExists)
include(CheckIncludeFile)
### basic modules
ENABLE_TESTING()
SUBDIRS(
src
)
ADD_EXECUTABLE(vermont
src/vermont.cc
)
INCLUDE_DIRECTORIES(${VERMONT_SOURCE_DIR}/src)
TARGET_LINK_LIBRARIES(vermont
modules
core
anon
ipfixlolib
common
osdep
)
INSTALL(TARGETS vermont
RUNTIME DESTINATION bin
)
INSTALL(FILES README.md LICENSE
DESTINATION share/doc/vermont
)
INSTALL(DIRECTORY configs/
DESTINATION share/vermont/configs
)
add_cppcheck(vermont STYLE POSSIBLE_ERROR)
SET(PKG_CONFIG_USE_CMAKE_PREFIX_PATH 1)
### doxygen
#FIND_PACKAGE(Doxygen REQUIRED)
### threads
FIND_PACKAGE(Threads REQUIRED)
TARGET_LINK_LIBRARIES(vermont
${CMAKE_THREAD_LIBS_INIT}
)
### journald
OPTION(SUPPORT_JOURNALD "Enable systemd journald support" OFF)
IF (SUPPORT_JOURNALD)
SET(PKG_CONFIG_USE_CMAKE_PREFIX_PATH 1)
FIND_PACKAGE(PkgConfig REQUIRED)
PKG_CHECK_MODULES(JOURNALD libsystemd)
IF (NOT JOURNALD_FOUND)
PKG_CHECK_MODULES(JOURNALD libsystemd-journal)
IF (NOT JOURNALD_FOUND)
MESSAGE(FATAL_ERROR "Could not find journald libraries.")
ENDIF (NOT JOURNALD_FOUND)
ENDIF (NOT JOURNALD_FOUND)
ENDIF (SUPPORT_JOURNALD)
IF (JOURNALD_FOUND)
ADD_DEFINITIONS(-DJOURNALD_SUPPORT_ENABLED)
LINK_DIRECTORIES(${JOURNALD_LIBRARY_DIRS})
INCLUDE_DIRECTORIES(${JOURNALD_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(vermont
${JOURNALD_LIBRARIES}
)
ELSE (JOURNALD_FOUND)
REMOVE_DEFINITIONS(-DJOURNALD_SUPPORT_ENABLED)
ENDIF (JOURNALD_FOUND)
### ZMQ receiver
OPTION(SUPPORT_ZMQ "Enable ZMQ support" OFF)
IF (SUPPORT_ZMQ)
FIND_PACKAGE(PkgConfig REQUIRED)
PKG_CHECK_MODULES(CZMQ libczmq)
IF (NOT CZMQ_FOUND)
MESSAGE(FATAL_ERROR "Could not find libczmq libraries.")
ELSE (NOT CZMQ_FOUND)
MESSAGE(STATUS "Found libczmq libraries")
ENDIF (NOT CZMQ_FOUND)
ENDIF (SUPPORT_ZMQ)
IF (CZMQ_FOUND)
ADD_DEFINITIONS(-DZMQ_SUPPORT_ENABLED)
LINK_DIRECTORIES(${CZMQ_LIBRARY_DIRS})
INCLUDE_DIRECTORIES(${CZMQ_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(vermont
${CZMQ_LIBRARIES}
)
ELSE (CZMQ_FOUND)
REMOVE_DEFINITIONS(-DZMQ_SUPPORT_ENABLED)
ENDIF (CZMQ_FOUND)
OPTION(DISABLE_UDP_CONNECT "Do not run connect on UDP socket" OFF)
IF (DISABLE_UDP_CONNECT)
ADD_DEFINITIONS(-DDISABLE_UDP_CONNECT)
ENDIF (DISABLE_UDP_CONNECT)
### SO_BINDTODEVICE (VRF) support
OPTION(ENABLE_VRF "Enable support for binding sockets via SO_BINDTODEVICE (VRF). Warning: requires support in runtime kernel for SO_BINDTODEVICE and VRF !" OFF)
IF (ENABLE_VRF)
CHECK_SYMBOL_EXISTS("SO_BINDTODEVICE" "sys/socket.h" SO_BINDTODEVICE_FOUND)
IF (SO_BINDTODEVICE_FOUND)
ADD_DEFINITIONS(-DENABLE_VRF)
ELSE (SO_BINDTODEVICE_FOUND)
MESSAGE(WARNING "SO_BINDTODEVICE not found in sys/socket.h, will not build with ENABLE_VRF. Check Linux Kernel's userspace headers (eg: linux-libc-dev)")
ENDIF (SO_BINDTODEVICE_FOUND)
ENDIF (ENABLE_VRF)
CHECK_INCLUDE_FILE("linux/if.h" LINUX_IF_H_FOUND "-include sys/socket.h")
### MongoDB
OPTION(SUPPORT_MONGO "Enable MongoDB support" OFF)
IF (SUPPORT_MONGO)
FIND_PACKAGE(MONGO REQUIRED)
IF (NOT MONGO_FOUND)
MESSAGE(FATAL_ERROR "Could not find MongoDB libraries.")
ENDIF (NOT MONGO_FOUND)
ENDIF (SUPPORT_MONGO)
IF (MONGO_FOUND)
ADD_DEFINITIONS(-DMONGO_SUPPORT_ENABLED)
### Mongo is currently forcing BOOST_FILE_SYSTEM v2 when its
### headers are included. If we use version v3 in the rest of
### vermont, we will get compile time errors because of
### redefinitions of certain boost internals. If we support
### mongo, we therefore force v2 on the complete vermont
### compile process. Remove this if v2 is dropped by the boost
### people and mongo switched to v3
ADD_DEFINITIONS(-DBOOST_FILESYSTEM_VERSION=2)
IF (MONGO_VERSION_2)
ADD_DEFINITIONS(-DMONGO_VERSION_2)
MESSAGE(STATUS "Found MongoDB libraries (version 2)")
ELSE (MONGO_VERSION_2)
MESSAGE(STATUS "Found MongoDB libraries")
ENDIF (MONGO_VERSION_2)
INCLUDE_DIRECTORIES(${MONGO_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(vermont
${MONGO_LIBRARIES}
)
ELSE (MONGO_FOUND)
REMOVE_DEFINITIONS(-DMONGO_SUPPORT_ENABLED)
REMOVE_DEFINITIONS(-DMONGO_VERSION_2)
REMOVE_DEFINITIONS(-DBOOST_FILESYSTEM_VERSION)
ENDIF (MONGO_FOUND)
### Redis
OPTION(SUPPORT_REDIS "Enable Redis support (for flow-inspector integration)" OFF)
IF (SUPPORT_REDIS)
FIND_PACKAGE(Redis REQUIRED)
IF (NOT HIREDIS_FOUND)
MESSAGE(FATAL_ERROR "Could not find hiredis client libraries.")
ENDIF (NOT HIREDIS_FOUND)
ENDIF (SUPPORT_REDIS)
IF (HIREDIS_FOUND)
ADD_DEFINITIONS(-DREDIS_SUPPORT_ENABLED)
INCLUDE_DIRECTORIES(${HIREDIS_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(vermont
${HIREDIS_LIBRARIES}
)
ELSE (HIREDIS_FOUND)
REMOVE_DEFINITIONS(-DREDIS_SUPPORT_ENABLED)
ENDIF (HIREDIS_FOUND)
### boost
FIND_PACKAGE(Boost REQUIRED COMPONENTS
regex
thread
filesystem
unit_test_framework
system)
IF (Boost_FOUND)
MESSAGE(STATUS "Found boost libraries")
ADD_DEFINITIONS(-DHAVE_BOOST_FILESYSTEM)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(vermont
Boost::regex
Boost::filesystem
Boost::system
)
IF (SUPPORT_MONGO)
TARGET_LINK_LIBRARIES(vermont Boost::thread
)
ENDIF (SUPPORT_MONGO)
ELSE (Boost_FOUND)
MESSAGE(FATAL_ERROR "Could not find boost libraries")
REMOVE_DEFINITIONS(-DHAVE_BOOST_FILESYSTEM)
ENDIF (Boost_FOUND)
### libxml2
FIND_PACKAGE(LibXml2 REQUIRED)
MARK_AS_ADVANCED(
LIBXML2_INCLUDE_DIR
LIBXML2_LIBRARIES
)
IF (LIBXML2_INCLUDE_DIR AND LIBXML2_LIBRARIES)
MESSAGE(STATUS "Found libxml2 libraries")
INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(vermont
${LIBXML2_LIBRARIES}
)
ELSE (LIBXML2_INCLUDE_DIR AND LIBXML2_LIBRARIES)
MESSAGE(FATAL_ERROR "Could not find libxml2 libraries")
ENDIF (LIBXML2_INCLUDE_DIR AND LIBXML2_LIBRARIES)
### export time sanity checks
OPTION(EXPORT_TIME_SANITY_CHECK "Enable sanity checks on arrival of flows based on export time" OFF)
IF(EXPORT_TIME_SANITY_CHECK)
ADD_DEFINITIONS(-DEXPORT_TIME_SANITY_CHECK)
ENDIF(EXPORT_TIME_SANITY_CHECK)
### PCAP_MAX_CAPTURE_LENGTH
SET(PCAP_MAX_CAPTURE_LENGTH 128 CACHE STRING "Maximum PCAP packet capture length (this amount of bytes is always allocated for each packet, the smaller the better!)")
ADD_DEFINITIONS(-DPCAP_MAX_CAPTURE_LENGTH=${PCAP_MAX_CAPTURE_LENGTH})
# TODO: there is a bug in the code that occurs then the MAX_CAPTURE_LENGTH is > 65000
# that occurs in the offset calucation in PacketHashTable (the offset is a uint16_t that
# overflows when MAX_CAPTURE_LENGTH is too big.
# until we fixted the bug, we restrict ourselfs on on teh maximum capture length
IF (PCAP_MAX_CAPTURE_LENGTH GREATER 65000)
MESSAGE(FATAL_ERROR "PCAP_MAX_CAPTURE_LENGTH is too big. Make it <= 65000 or fix the bug described in CMakeLists.txt")
ENDIF(PCAP_MAX_CAPTURE_LENGTH GREATER 65000)
### PCAP_DEFAULT_CAPTURE_LENGTH
SET(PCAP_DEFAULT_CAPTURE_LENGTH 128 CACHE STRING "Default PCAP packet capture length (default value for PCAP snaplen if not defined in configuration)")
ADD_DEFINITIONS(-DPCAP_DEFAULT_CAPTURE_LENGTH=${PCAP_DEFAULT_CAPTURE_LENGTH})
### SUPPORT_NETFLOWV9
OPTION(SUPPORT_NETFLOWV9 "Enable NetFlow version 9 support" ON)
IF (SUPPORT_NETFLOWV9)
ADD_DEFINITIONS(-DSUPPORT_NETFLOWV9)
ELSE (SUPPORT_NETFLOWV9)
REMOVE_DEFINITIONS(-DSUPPORT_NETFLOWV9)
ENDIF (SUPPORT_NETFLOWV9)
### MySQL
OPTION(SUPPORT_MYSQL "Enable dbwriter/dbreader support" OFF)
IF (SUPPORT_MYSQL)
FIND_PACKAGE(MySQL REQUIRED)
MARK_AS_ADVANCED(
MYSQL_ADD_INCLUDE_DIR
MYSQL_ADD_LIBRARY
MYSQL_CONFIG
MYSQL_CONFIG_PREFER_PATH
)
IF (NOT MYSQL_FOUND)
MESSAGE(FATAL_ERROR "Could not find MySQL libraries.")
ENDIF (NOT MYSQL_FOUND)
ENDIF (SUPPORT_MYSQL)
IF (MYSQL_FOUND AND SUPPORT_MYSQL)
MESSAGE(STATUS "Found MySQL libraries")
ADD_DEFINITIONS(-DDB_SUPPORT_ENABLED)
INCLUDE_DIRECTORIES(${MYSQL_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(vermont
${MYSQL_LIBRARIES}
)
ELSE (MYSQL_FOUND AND SUPPORT_MYSQL)
REMOVE_DEFINITIONS(-DDB_SUPPORT_ENABLED)
ENDIF (MYSQL_FOUND AND SUPPORT_MYSQL)
### PostgreSQL
# Bug in Ubuntu 14.04 does not find PSQL Libs
# https://bugs.launchpad.net/ubuntu/+source/cmake/+bug/1317135
set(PostgreSQL_ADDITIONAL_SEARCH_PATHS "/usr/include/postgresql/9.3/server")
OPTION(SUPPORT_POSTGRESQL "Enable PostgreSQL support" OFF)
IF (SUPPORT_POSTGRESQL)
FIND_PACKAGE(PostgreSQL REQUIRED)
IF (NOT PostgreSQL_FOUND)
MESSAGE(FATAL_ERROR "Could not find PostgreSQL libraries.")
ENDIF (NOT PostgreSQL_FOUND)
ENDIF (SUPPORT_POSTGRESQL)
IF (PostgreSQL_FOUND)
MESSAGE(STATUS "Found PostgreSQL libraries")
ADD_DEFINITIONS(-DPG_SUPPORT_ENABLED)
INCLUDE_DIRECTORIES(${PostgreSQL_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(vermont
${PostgreSQL_LIBRARIES}
)
ELSE (PostgreSQL_FOUND)
REMOVE_DEFINITIONS(-DPG_SUPPORT_ENABLED)
ENDIF (PostgreSQL_FOUND)
### Oracle
OPTION(SUPPORT_ORACLE "Enable Oracle support" OFF)
IF (SUPPORT_ORACLE)
FIND_PACKAGE(Oracle REQUIRED)
IF (NOT ORACLE_FOUND)
MESSAGE(FATAL_ERROR "Could not find Oracle libraries.")
ENDIF (NOT ORACLE_FOUND)
ENDIF (SUPPORT_ORACLE)
IF (ORACLE_FOUND)
MESSAGE(STATUS "Found Oracle libraries")
ADD_DEFINITIONS(-DORACLE_SUPPORT_ENABLED)
INCLUDE_DIRECTORIES(${ORACLE_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(vermont
${ORACLE_CONNECTION_LIBRARIES}
)
TARGET_LINK_LIBRARIES(vermont
${ORACLE_CLIENT_LIBRARIES}
)
ELSE (ORACLE_FOUND)
REMOVE_DEFINITIONS(-DORACLE_SUPPORT_ENABLED)
ENDIF (ORACLE_FOUND)
### libpcap-mmap
OPTION(USE_PCAPMMAP "Use libpcap-mmap." OFF)
MARK_AS_ADVANCED(
PCAP_LIBRARY_REGULAR
PCAP_LIBRARY_MMAP
PCAP_INCLUDE_PATH
)
OPTION(USE_PFRING "Use pf_ring optimized libpcap." OFF)
MARK_AS_ADVANCED(
PCAP_LIBRARY_PFRING
PFRING_LIBRARY
)
IF (USE_PCAPMMAP)
IF (USE_PFRING)
MESSAGE(FATAL_ERROR "Both USE_PCAPMMAP and USE_PFRING have been selected. At most one of these options may be selected!")
ENDIF (USE_PFRING)
FIND_LIBRARY(PCAP_LIBRARY_MMAP NAMES pcap pcap-mmap PATHS ${VERMONT_SOURCE_DIR} ${VERMONT_SOURCE_DIR}/libpcap-mmap ${VERMONT_SOURCE_DIR}/../libpcap-mmap ${VERMONT_SOURCE_DIR}/../../../trunk/libpcap-mmap NO_DEFAULT_PATH)
FIND_PATH(PCAP_INCLUDE_PATH NAMES pcap.h PATHS ${VERMONT_SOURCE_DIR} ${VERMONT_SOURCE_DIR}/libpcap-mmap ${VERMONT_SOURCE_DIR}/../libpcap-mmap ${VERMONT_SOURCE_DIR}/../../../trunk/libpcap-mmap NO_DEFAULT_PATH)
SET(PCAP_LIBRARY "${PCAP_LIBRARY_MMAP}")
IF (PCAP_LIBRARY_MMAP)
SET(PCAP_LIBRARY "${PCAP_LIBRARY_MMAP}")
INCLUDE_DIRECTORIES(${PCAP_INCLUDE_PATH})
ELSE (PCAP_LIBRARY_MMAP)
MESSAGE(FATAL_ERROR "Could not find libpcap-mmap. This script also looks in directory ./libpcap-mmap, so maybe you want to create a symlink to the directory of the library.")
ENDIF (PCAP_LIBRARY_MMAP)
TARGET_LINK_LIBRARIES(vermont ${PCAP_LIBRARY})
ELSEIF (USE_PFRING)
FIND_LIBRARY(PCAP_LIBRARY_PFRING NAMES pcap PATHS ${VERMONT_SOURCE_DIR} ${VERMONT_SOURCE_DIR}/PF_RING/userland/libpcap-1.0.0-ring ${VERMONT_SOURCE_DIR}/../PF_RING/userland/libpcap-1.0.0-ring NO_DEFAULT_PATH)
IF (NOT PCAP_LIBRARY_PFRING)
MESSAGE(FATAL_ERROR "Could not find libpcap-ring. This script looks in directories ${VERMONT_SOURCE_DIR}/PF_RING/userland/libpcap-1.0.0-ring and ${VERMONT_SOURCE_DIR}/../PF_RING/userland/libpcap-1.0.0-ring, so maybe you want to create a symlink to the directory of the library.")
ENDIF (NOT PCAP_LIBRARY_PFRING)
FIND_LIBRARY(PFRING_LIBRARY NAMES pfring PATHS ${VERMONT_SOURCE_DIR} ${VERMONT_SOURCE_DIR}/PF_RING/userland/lib ${VERMONT_SOURCE_DIR}/../PF_RING/userland/lib NO_DEFAULT_PATH)
IF (NOT PFRING_LIBRARY)
MESSAGE(FATAL_ERROR "Could not find libpfring. This script looks in directories ${VERMONT_SOURCE_DIR}/PF_RING/userland/lib and ${VERMONT_SOURCE_DIR}/../PF_RING/userland/lib, so maybe you want to create a symlink to the directory of the library.")
ENDIF (NOT PFRING_LIBRARY)
FIND_PATH(PCAP_INCLUDE_PATH NAMES pcap.h PATHS ${VERMONT_SOURCE_DIR} ${VERMONT_SOURCE_DIR}/PF_RING/userland/libpcap-1.0.0-ring ${VERMONT_SOURCE_DIR}/../PF_RING/userland/libpcap-1.0.0-ring NO_DEFAULT_PATH)
TARGET_LINK_LIBRARIES(vermont ${PCAP_LIBRARY_PFRING})
TARGET_LINK_LIBRARIES(vermont ${PFRING_LIBRARY})
INCLUDE_DIRECTORIES(${PCAP_INCLUDE_PATH})
ELSE (USE_PCAPMMAP)
FIND_LIBRARY(PCAP_LIBRARY_REGULAR NAMES pcap)
IF (PCAP_LIBRARY_REGULAR)
SET(PCAP_LIBRARY "${PCAP_LIBRARY_REGULAR}")
ELSE (PCAP_LIBRARY_REGULAR)
MESSAGE(FATAL_ERROR "Could not find libpcap")
ENDIF (PCAP_LIBRARY_REGULAR)
TARGET_LINK_LIBRARIES(vermont ${PCAP_LIBRARY})
ENDIF (USE_PCAPMMAP)
IF (USE_PFRING)
ELSE (USE_PFRING)
FIND_LIBRARY(PCAP_LIBRARY_REGULAR NAMES pcap)
IF (PCAP_LIBRARY_REGULAR)
TARGET_LINK_LIBRARIES(vermont ${PCAP_LIBRARY_REGULAR})
ELSE (PCAP_LIBRARY_REGULAR)
MESSAGE(FATAL_ERROR "Could not find libpcap.")
ENDIF (PCAP_LIBRARY_REGULAR)
ENDIF (USE_PFRING)
### sctp
OPTION(SUPPORT_SCTP "Support SCTP transport protocol" ON)
IF (SUPPORT_SCTP)
FIND_PACKAGE(Sctp REQUIRED)
MARK_AS_ADVANCED(
SCTP_LIBRARIES
SCTP_INCLUDE_DIR
)
ADD_DEFINITIONS(-DSUPPORT_SCTP)
ELSE (SUPPORT_SCTP)
REMOVE_DEFINITIONS(-DSUPPORT_SCTP)
ENDIF (SUPPORT_SCTP)
### connection filter
OPTION(CONNECTION_FILTER "Enables/disables the connection filter." OFF)
OPTION(USE_GSL "Enables/disables GSL in connectionflter." ON)
IF (CONNECTION_FILTER AND NOT USE_GSL)
MESSAGE(FATAL_ERROR "GSL is needed for Connectionfilter at the moment.
You cannot have -DCONNECTION_FILTER=ON and -DUSE_GSL=OFF")
ENDIF (CONNECTION_FILTER AND NOT USE_GSL)
IF (CONNECTION_FILTER)
### gsl
IF (USE_GSL)
FIND_PACKAGE(GSL)
MARK_AS_ADVANCED(
GSL_INCLUDE_DIR
GSL_LIBRARIES
GSL_LIBRARY
BLAS_LIBRARY
)
IF (GSL_FOUND)
MESSAGE(STATUS "GNU scientific library found")
ELSE (GSL_FOUND)
MESSAGE(FATAL_ERROR "GNU scientific library not found. Please
install the library or use -DCONNECTION_FILTER=OFF and -DUSE_GSL=OFF")
ENDIF (GSL_FOUND)
ADD_DEFINITIONS(-DHAVE_GSL)
TARGET_LINK_LIBRARIES(vermont ${GSL_LIBRARIES})
ENDIF (USE_GSL)
ADD_DEFINITIONS(-DHAVE_CONNECTION_FILTER)
ENDIF(CONNECTION_FILTER)
### openssl
OPTION(SUPPORT_DTLS "Enables/Disables encryption support for IPFIX messages." OFF)
IF (SUPPORT_DTLS)
FIND_PACKAGE(OpenSSL)
IF (NOT OPENSSL_FOUND)
MESSAGE(FATAL_ERROR "Could not find openssl. Please install the library or turn off SUPPORT_DTLS")
ENDIF (NOT OPENSSL_FOUND)
IF (NOT (${OPENSSL_VERSION} VERSION_GREATER_EQUAL 1.1.0))
MESSAGE(FATAL_ERROR "openssl version must be 1.1.0 or higher")
ENDIF (NOT (${OPENSSL_VERSION} VERSION_GREATER_EQUAL 1.1.0))
IF (${OPENSSL_VERSION} VERSION_GREATER_EQUAL 1.1.1)
ADD_DEFINITIONS(-DHAVE_DTLS_get_data_mtu)
ENDIF (${OPENSSL_VERSION} VERSION_GREATER_EQUAL 1.1.1)
INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(vermont ${OPENSSL_LIBRARIES})
ADD_DEFINITIONS(-DSUPPORT_DTLS)
## check wether there is a libcrypto
# FIND_PACKAGE(Crypto)
# IF (CRYPTO_FOUND)
# TARGET_LINK_LIBRARIES(vermont ${CRYPTO_LIBRARIES})
# ENDIF (CRYPTO_FOUND)
ELSE(SUPPORT_DTLS)
REMOVE_DEFINITIONS(-DSUPPORT_DLTS)
ENDIF(SUPPORT_DTLS)
OPTION(SUPPORT_DTLS_OVER_SCTP "Enables/Disables DTLS on SCTP streams." OFF)
IF (SUPPORT_DTLS_OVER_SCTP)
IF (SUPPORT_SCTP AND SUPPORT_DTLS)
# Make sure OpenSSL was compiled with SCTP support enabled
INCLUDE(CheckSymbolExists)
SET(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
# OpenSSL #defines OPENSSL_SCTP if it supports SCTP
CHECK_SYMBOL_EXISTS(OPENSSL_SCTP "openssl/ssl.h" OPENSSL_SUPPORTS_SCTP)
SET(CMAKE_REQUIRED_INCLUDES)
IF (NOT OPENSSL_SUPPORTS_SCTP)
MESSAGE(FATAL_ERROR "OpenSSL built without SCTP support. Rebuild OpenSSL with SCTP support or turn off SUPPORT_DTLS_OVER_SCTP")
ENDIF (NOT OPENSSL_SUPPORTS_SCTP)
ADD_DEFINITIONS(-DSUPPORT_DTLS_OVER_SCTP)
ELSE (SUPPORT_SCTP AND SUPPORT_DTLS)
MESSAGE(FATAL_ERROR "SUPPORT_DTLS_OVER_SCTP can only be enabled together with SUPPORT_SCTP and SUPPORT_DTLS")
REMOVE_DEFINITIONS(-DSUPPORT_DTLS_OVER_SCTP)
ENDIF(SUPPORT_SCTP AND SUPPORT_DTLS)
ELSE (SUPPORT_DTLS_OVER_SCTP)
REMOVE_DEFINITIONS(-DSUPPORT_DTLS_OVER_SCTP)
ENDIF (SUPPORT_DTLS_OVER_SCTP)
### tools
OPTION(WITH_TOOLS "Build misc tools." ON)
IF (WITH_TOOLS)
ADD_SUBDIRECTORY(tools)
ELSE (WITH_TOOLS)
ENDIF (WITH_TOOLS)
OPTION(DISABLE_MEMMANAGER "Disable custom memory manager (good for finding leaks with valgrind." OFF)
IF (DISABLE_MEMMANAGER)
if (NOT DEBUG)
MESSAGE(FATAL_ERROR "Flag DISABLE_MEMMANAGER may only be set if flag DEBUG is set")
ENDIF (NOT DEBUG)
ADD_DEFINITIONS(-DIM_DISABLE)
ENDIF (DISABLE_MEMMANAGER)
OPTION(EXIT_ON_EXCEPTION "Thrown exceptions in VERMONT result in a graceful shutdown. Useful for fuzz testing only." OFF)
MARK_AS_ADVANCED(EXIT_ON_EXCEPTION)
IF (EXIT_ON_EXCEPTION)
ADD_DEFINITIONS(-DEXIT_ON_EXCEPTION)
ENDIF(EXIT_ON_EXCEPTION)
### IPFIXLOLIB_RAWDIR_SUPPORT
OPTION(IPFIXLOLIB_RAWDIR_SUPPORT "Enable ipfix rawdir support" OFF)
IF (IPFIXLOLIB_RAWDIR_SUPPORT)
ADD_DEFINITIONS(-DIPFIXLOLIB_RAWDIR_SUPPORT)
ELSE (IPFIXLOLIB_RAWDIR_SUPPORT)
REMOVE_DEFINITIONS(-DIPFIXLOLIB_RAWDIR_SUPPORT)
ENDIF (IPFIXLOLIB_RAWDIR_SUPPORT)