wireshark/cmake/modules/FindSinsp.cmake

155 lines
4.3 KiB
CMake

#
# - Find libsinsp
# Find libsinsp and libscap includes and libraries
# Adapted from FindZSTD.cmake.
#
# SINSP_INCLUDE_DIRS - Where to find sinsp.h, scap.h, etc.
# SINSP_LIBRARIES - List of libraries when using libsinsp.
# SINSP_PLUGINS - List of plugins.
# SINSP_FOUND - True if libsinsp found.
# SINSP_DLL_DIR - (Windows) Path to the libsinsp and libscap DLLs
# SINSP_DLL - (Windows) Name of the libsinsp and libscap DLLs
include( FindWSWinLibs )
FindWSWinLibs( "libsinsp-.*" "SINSP_HINTS" )
if( NOT WIN32)
find_package(PkgConfig)
pkg_search_module(Sinsp libsinsp)
endif()
find_path(SINSP_INCLUDE_DIR
NAMES sinsp.h
HINTS "${SINSP_INCLUDEDIR}" "${SINSP_HINTS}/include"
PATH_SUFFIXES userspace/libsinsp
/usr/include
/usr/local/include
)
find_path(SCAP_INCLUDE_DIR
NAMES scap.h
HINTS "${SINSP_INCLUDEDIR}" "${SINSP_HINTS}/include"
PATH_SUFFIXES userspace/libscap
/usr/include
/usr/local/include
)
find_path(SINSP_PLUGIN_DIR
NAMES registry.yaml
HINTS "${SINSP_PLUGINDIR}"
)
# https://github.com/falcosecurity/libs doesn't yet have any official releases
# or tags. Add RelWithDebInfo to our sinsp and scap path suffixes so that we
# can find what we need in a local build.
find_library(SINSP_LIBRARY
NAMES sinsp
HINTS "${SINSP_LIBDIR}" "${SINSP_HINTS}/lib"
PATH_SUFFIXES libsinsp libsinsp/RelWithDebInfo
PATHS
/usr/lib
/usr/local/lib
)
find_library(SCAP_LIBRARY
NAMES scap
HINTS "${SINSP_LIBDIR}" "${SINSP_HINTS}/lib"
PATH_SUFFIXES libscap libscap/RelWithDebInfo
PATHS
/usr/lib
/usr/local/lib
)
find_path(JSON_INCLUDE_DIR
NAMES json/json.h
HINTS "${SINSP_INCLUDEDIR}" "${SINSP_HINTS}/include"
PATH_SUFFIXES userspace/libsinsp/third-party/jsoncpp
/usr/include
/usr/include/jsoncpp
/usr/local/include
)
find_library(JSONCPP_LIBRARY
NAMES jsoncpp
HINTS "${SINSP_LIBDIR}" "${SCAP_HINTS}/lib"
PATHS
/usr/lib
/usr/local/lib
)
find_path(TBB_INCLUDE_DIR
NAMES tbb/tbb.h
HINTS "${SINSP_INCLUDEDIR}" "${SINSP_HINTS}/include"
/usr/include
/usr/local/include
)
find_library(TBB_LIBRARY
NAMES tbb
HINTS "${SINSP_LIBDIR}" "${SCAP_HINTS}/lib"
PATHS
/usr/lib
/usr/local/lib
)
# if( SINSP_INCLUDE_DIR AND SCAP_INCLUDE_DIR AND SINSP_LIBRARY AND SCAP_LIBRARY )
# file(STRINGS ${SINSP_INCLUDE_DIR}/sinsp.h SINSP_VERSION_MAJOR
# REGEX "#define[ ]+SINSP_VERSION_MAJOR[ ]+[0-9]+")
# string(REGEX MATCH "[0-9]+" SINSP_VERSION_MAJOR ${SINSP_VERSION_MAJOR})
# file(STRINGS ${SINSP_INCLUDE_DIR}/sinsp.h SINSP_VERSION_MINOR
# REGEX "#define[ ]+SINSP_VERSION_MINOR[ ]+[0-9]+")
# string(REGEX MATCH "[0-9]+" SINSP_VERSION_MINOR ${SINSP_VERSION_MINOR})
# file(STRINGS ${SINSP_INCLUDE_DIR}/sinsp.h SINSP_VERSION_RELEASE
# REGEX "#define[ ]+SINSP_VERSION_RELEASE[ ]+[0-9]+")
# string(REGEX MATCH "[0-9]+" SINSP_VERSION_RELEASE ${SINSP_VERSION_RELEASE})
# set(SINSP_VERSION ${SINSP_VERSION_MAJOR}.${SINSP_VERSION_MINOR}.${SINSP_VERSION_RELEASE})
# endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Sinsp
REQUIRED_VARS
SINSP_LIBRARY SINSP_INCLUDE_DIR
SCAP_LIBRARY SCAP_INCLUDE_DIR
JSON_INCLUDE_DIR
SINSP_PLUGIN_DIR
# VERSION_VAR SINSP_VERSION
)
if( SINSP_FOUND )
set(SINSP_INCLUDE_DIRS ${SINSP_INCLUDE_DIR} ${SCAP_INCLUDE_DIR} ${JSON_INCLUDE_DIR})
if(TBB_INCLUDE_DIR)
list(APPEND SINSP_INCLUDE_DIRS ${TBB_INCLUDE_DIR})
endif()
set(SINSP_LIBRARIES ${SINSP_LIBRARY} ${SCAP_LIBRARY})
if (JSONCPP_LIBRARY)
list(APPEND SINSP_LIBRARIES ${JSONCPP_LIBRARY})
endif()
if (TBB_LIBRARY)
list(APPEND SINSP_LIBRARIES ${TBB_LIBRARY})
endif()
if (WIN32)
set(SINSP_PLUGINS ${SINSP_PLUGIN_DIR}/plugins/cloudtrail/cloudtrail.dll)
else()
set(SINSP_PLUGINS ${SINSP_PLUGIN_DIR}/plugins/cloudtrail/libcloudtrail.so)
endif()
# if (WIN32)
# set ( SINSP_DLL_DIR "${SINSP_HINTS}/bin"
# CACHE PATH "Path to sinsp DLL"
# )
# file( GLOB _SINSP_dll RELATIVE "${SINSP_DLL_DIR}"
# "${SINSP_DLL_DIR}/sinsp*.dll"
# )
# set ( SINSP_DLL ${_SINSP_dll}
# # We're storing filenames only. Should we use STRING instead?
# CACHE FILEPATH "sinsp DLL file name"
# )
# mark_as_advanced( SINSP_DLL_DIR SINSP_DLL )
# endif()
else()
set( SINSP_INCLUDE_DIRS )
set( SINSP_LIBRARIES )
set( SINSP_PLUGINS )
endif()
mark_as_advanced( SINSP_LIBRARIES SINSP_INCLUDE_DIRS SINSP_PLUGINS )