CMakeLists
CMakeLists
14)
# use, i.e. don't skip the full RPATH for the build tree
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
set(CMAKE_MACOSX_RPATH 1)
project(syslog-ng C)
if (APPLE)
option(ENABLE_CPP "Enable C++" OFF)
else()
option(ENABLE_CPP "Enable C++" ON)
endif()
if (ENABLE_CPP)
enable_language(CXX)
set(CMAKE_CXX_STANDARD 11 CACHE STRING "C++ standard")
set(SYSLOG_NG_ENABLE_CPP ${ENABLE_CPP})
endif()
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules
${PROJECT_SOURCE_DIR}/cmake/)
set(CMAKE_POSITION_INDEPENDENT_CODE 1)
set(BISON_FLAGS "-Wno-other -Werror=conflicts-sr -Werror=conflicts-rr -
Wcounterexamples")
set(BISON_BUILT_SOURCE_CFLAGS "-Wno-unused-but-set-variable")
include(CheckIncludeFiles)
include(ExternalProject)
include(external_or_find_package)
include(add_module)
include(module_switch)
find_package(Git QUIET)
if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
option(GIT_SUBMODULE "Checkout submodules during build" ON)
if(GIT_SUBMODULE)
message(STATUS "Submodule update")
execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --
recursive
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE GIT_SUBMOD_RESULT)
if(NOT GIT_SUBMOD_RESULT EQUAL "0")
message(FATAL_ERROR "git submodule update --init --recursive failed
with ${GIT_SUBMOD_RESULT}, please checkout submodules")
endif()
endif()
endif()
set(MEMORYCHECK_SUPPRESSIONS_FILE "${PROJECT_SOURCE_DIR}/tests/valgrind/unit-test-
leak.supp")
set(MEMORYCHECK_COMMAND_OPTIONS "--num-callers=30 --sim-hints=no-nptl-pthread-
stackcache --gen-suppressions=all --leak-check=full --trace-children=yes --
freelist-vol=200000000 --freelist-big-blocks=10000000 --malloc-fill=55 --free-
fill=AA")
set(SYSLOG_NG_PATH_PREFIX ${CMAKE_INSTALL_PREFIX})
set(SYSLOG_NG_PATH_SYSCONFDIR "\${prefix}/etc")
set(SYSLOG_NG_PATH_DATADIR "\${datarootdir}")
set(SYSLOG_NG_PATH_PKGDATADIR "\${datarootdir}/syslog-ng")
set(SYSLOG_NG_PATH_PIDFILEDIR "\${localstatedir}")
set(SYSLOG_NG_PATH_LOCALSTATEDIR "\${prefix}/var")
set(SYSLOG_NG_MODULE_PATH "\${exec_prefix}/lib/syslog-ng")
set(SYSLOG_NG_PATH_EXECPREFIX "\${prefix}")
set(SYSLOG_NG_PATH_CONFIG_INCLUDEDIR "\${datadir}/syslog-ng/include")
set(SYSLOG_NG_PATH_SCLDIR "\${datadir}/syslog-ng/include/scl")
set(SYSLOG_NG_PATH_LIBEXECDIR "\${exec_prefix}/libexec")
set(SYSLOG_NG_PATH_DATAROOTDIR "\${prefix}/share")
set(SYSLOG_NG_ENABLE_TCP_WRAPPER 0)
set(SYSLOG_NG_ENABLE_GPROF 0)
set(SYSLOG_NG_ENABLE_MEMTRACE 0)
set(SYSLOG_NG_ENABLE_SYSTEMD 0)
set(SYSLOG_NG_PATH_MODULEDIR "\${exec_prefix}/lib/syslog-ng")
set(SYSLOG_NG_PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
set(SYSLOG_NG_PATH_XSDDIR "\${datadir}/syslog-ng/xsd")
set(SYSLOG_NG_JAVA_MODULE_PATH "\${exec_prefix}/lib/syslog-ng/java-modules")
set(SYSLOG_NG_PYTHON_MODULE_DIR "\${exec_prefix}/lib/syslog-ng/python")
set(SYSLOG_NG_PYTHON_SYSCONF_MODULE_DIR "\${prefix}/etc/python")
set(SYSLOG_NG_PYTHON_VENV_DIR "\${localstatedir}/python-venv")
set(SYSLOG_NG_PATH_TOPSRC_DIR "${PROJECT_SOURCE_DIR}")
set(LIBDIR "\${exec_prefix}/lib")
set(INCLUDEDIR "\${prefix}/include")
set(TOOLSDIR "\${datadir}/syslog-ng/tools")
set(SYSLOG_NG_ENABLE_FORCED_SERVER_MODE 1)
include(CheckTypeSize)
include(CheckStructMember)
include(CheckSymbolExists)
include(GenerateYFromYm)
include(CheckStructHasMember)
include(CheckCSourceCompiles)
add_definitions(-D_GNU_SOURCE=1)
add_definitions(-D_LARGEFILE64_SOURCE=1)
add_definitions(-D__APPLE_USE_RFC_3542)
include(CheckSockaddrStorage)
if (HAVE_STRUCT_SOCKADDR_STORAGE)
set(SYSLOG_NG_HAVE_STRUCT_SOCKADDR_STORAGE 1)
else()
set(SYSLOG_NG_HAVE_STRUCT_SOCKADDR_STORAGE 0)
endif()
include(CheckCreds)
set(SYSLOG_NG_HAVE_STRUCT_UCRED (HAVE_STRUCT_UCRED OR HAVE_STRUCT_CMSGCRED))
check_struct_member ("struct msghdr" "msg_control" "sys/types.h;sys/socket.h"
SYSLOG_NG_HAVE_CTRLBUF_IN_MSGHDR)
include(CheckIPv6)
check_symbol_exists(TCP_KEEPIDLE "sys/socket.h;netinet/in.h;netinet/tcp.h"
HAVE_TCP_KEEPIDLE)
check_symbol_exists(TCP_KEEPINTVL "sys/socket.h;netinet/in.h;netinet/tcp.h"
HAVE_TCP_KEEPINTVL)
check_symbol_exists(TCP_KEEPCNT "sys/socket.h;netinet/in.h;netinet/tcp.h"
HAVE_TCP_KEEPCNT)
if (HAVE_TCP_KEEPIDLE AND HAVE_TCP_KEEPINTVL AND HAVE_TCP_KEEPCNT)
set(SYSLOG_NG_HAVE_TCP_KEEPALIVE_TIMERS 1)
endif()
if (NOT APPLE)
set(SYSLOG_NG_HAVE_ENVIRON 1)
endif()
# NOTE: This is now seems to be an Apple/Xcode "only" issue, but probably much
better a clang one, so later we might want to add this globally
if (APPLE)
module_switch(FORCE_CLASSIC_LINKING "Enable classic linking" OFF)
if (FORCE_CLASSIC_LINKING)
# XCode15 new linker has some issues (e.g.
https://developer.apple.com/forums/thread/737707)
# switch back to classic linking till not fixed
(https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-
notes#Linking)
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-ld_classic")
endif()
endif()
set(CMAKE_REQUIRED_DEFINITIONS "-D_LARGEFILE64_SOURCE=1")
set(CMAKE_EXTRA_INCLUDE_FILES "fcntl.h")
check_type_size(O_LARGEFILE O_LARGEFILE)
if (HAVE_O_LARGEFILE)
set(SYSLOG_NG_HAVE_O_LARGEFILE 1)
endif()
check_c_source_compiles("
#include <pthread.h>
__thread int a; int main() { a=0; }" SYSLOG_NG_HAVE_THREAD_KEYWORD)
check_include_files(utmp.h SYSLOG_NG_HAVE_UTMP_H)
check_include_files(utmpx.h SYSLOG_NG_HAVE_UTMPX_H)
check_include_files(dlfcn.h SYSLOG_NG_HAVE_DLFCN_H)
check_include_files(getopt.h SYSLOG_NG_HAVE_GETOPT_H)
set(WITH_GETTEXT "" CACHE STRING "Set the prefix where gettext is installed
(e.g. /usr)")
set(CMAKE_C_STANDARD 99)
set(GLIB_COMPILE_DEFINITIONS
GLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_32
)
find_package(GLIB 2.32.0 REQUIRED COMPONENTS gmodule gthread)
set(CMAKE_REQUIRED_INCLUDES ${GLIB_INCLUDE_DIRS})
set(CMAKE_REQUIRED_LIBRARIES ${GLIB_LIBRARIES})
check_symbol_exists(g_list_copy_deep "glib.h" SYSLOG_NG_HAVE_G_LIST_COPY_DEEP)
check_symbol_exists(g_ptr_array_find_with_equal_func "glib.h"
SYSLOG_NG_HAVE_G_PTR_ARRAY_FIND_WITH_EQUAL_FUNC)
check_symbol_exists(g_canonicalize_filename "glib.h"
SYSLOG_NG_HAVE_G_CANONICALIZE_FILENAME)
find_package(RabbitMQ)
if (RabbitMQ_FOUND)
set(CMAKE_REQUIRED_INCLUDES ${RabbitMQ_INCLUDE_DIR})
set(CMAKE_REQUIRED_LIBRARIES ${RabbitMQ_LIBRARY})
check_symbol_exists(amqp_ssl_socket_set_verify_peer "amqp.h;amqp_ssl_socket.h"
SYSLOG_NG_HAVE_AMQP_SSL_SOCKET_SET_VERIFY_PEER)
endif()
set (SYSLOG_NG_USE_CONST_IVYKIS_MOCK 1)
external_or_find_package(IVYKIS REQUIRED)
if ((NOT IVYKIS_INTERNAL) AND (IVYKIS_PKGCONF_VERSION VERSION_LESS "0.39"))
set (SYSLOG_NG_USE_CONST_IVYKIS_MOCK 0)
endif()
find_package(OpenSSL REQUIRED)
find_package(FLEX REQUIRED)
find_package(LIBNET REQUIRED)
find_package(Resolv REQUIRED)
find_package(WRAP)
find_package(criterion)
find_package(Inotify)
find_package(LIBCAP)
find_package(systemd)
pkg_search_module(SYSTEMD_WITH_NAMESPACE libsystemd>=245)
message(STATUS "Found lib${SYSTEMD_WITH_NAMESPACE_LIBRARIES} version $
{SYSTEMD_WITH_NAMESPACE_VERSION}")
if (ENABLE_JOURNALD)
if (WITH_SYSTEMD_JOURNAL STREQUAL "system" AND NOT Libsystemd_FOUND)
message(FATAL_ERROR "systemd library not found")
endif()
set(SYSLOG_NG_ENABLE_SYSTEMD 1)
if (WITH_SYSTEMD_JOURNAL STREQUAL "system")
if (SYSTEMD_WITH_NAMESPACE_LIBRARIES STREQUAL "systemd")
set(SYSLOG_NG_HAVE_JOURNAL_NAMESPACES 1)
message(STATUS "Have journal namespaces")
else()
set(SYSLOG_NG_HAVE_JOURNAL_NAMESPACES 0)
endif()
set(SYSLOG_NG_SYSTEMD_JOURNAL_MODE SYSLOG_NG_JOURNALD_SYSTEM)
elseif (WITH_SYSTEMD_JOURNAL STREQUAL "wrapper")
set(SYSLOG_NG_SYSTEMD_JOURNAL_MODE SYSLOG_NG_JOURNALD_OPTIONAL)
endif()
else()
set(SYSLOG_NG_ENABLE_SYSTEMD 0)
set(SYSLOG_NG_SYSTEMD_JOURNAL_MODE SYSLOG_NG_JOURNALD_OFF)
endif()
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
set(SYSLOG_NG_HAVE_INOTIFY "${Inotify_FOUND}")
include(openssl_functions)
openssl_set_defines()
if (WRAP_FOUND)
set(SYSLOG_NG_ENABLE_TCP_WRAPPER 1)
endif()
if (LIBNET_FOUND)
set(SYSLOG_NG_ENABLE_SPOOF_SOURCE 1)
endif()
set(SYSLOG_NG_ENABLE_LINUX_CAPS ${PC_LIBCAP_FOUND})
if (WITH_GETTEXT)
set(CMAKE_PREFIX_PATH ${WITH_GETTEXT})
find_package(Gettext REQUIRED QUIET)
set(CMAKE_PREFIX_PATH "")
else()
find_package(Gettext REQUIRED QUIET)
endif()
set(Eventlog_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib/eventlog/src")
if (CRITERION_FOUND)
option(BUILD_TESTING "Enable unit tests" ON)
else()
option(BUILD_TESTING "Enable unit tests" OFF)
endif()
include(add_tests)
if (BUILD_TESTING)
if (NOT CRITERION_FOUND)
message(FATAL_ERROR "BUILD_TESTING enabled without criterion detected!")
else()
set(CTEST_ENVIRONMENT
"G_SLICE=always-malloc,debug-blocks"
"G_DEBUG=fatal-warnings,fatal-criticals,gc-friendly")
include(CTest)
set(IMPORTANT_WARNINGS
-Wshadow)
set(ACCEPTABLE_WARNINGS
-Wno-stack-protector
-Wno-unused-parameter
-Wno-variadic-macros)
endif()
# Sanatizer configuration
set(SANITIZER "OFF" CACHE STRING "Enable clang sanitizer")
set_property(CACHE SANITIZER PROPERTY STRINGS OFF address undefined)
if (SANITIZER)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O1 -fsanitize=${SANITIZER} -fno-omit-frame-
pointer")
endif()
include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_subdirectory(Mk)
add_subdirectory(scl)
add_subdirectory(lib)
add_subdirectory(modules)
add_subdirectory(scripts)
add_subdirectory(syslog-ng)
add_subdirectory(syslog-ng-ctl)
add_subdirectory(persist-tool)
add_subdirectory(tests)
add_subdirectory(libtest)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/syslog-ng-config.h.in $
{CMAKE_CURRENT_BINARY_DIR}/syslog-ng-config.h)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/syslog-ng.pc.cmake $
{CMAKE_CURRENT_BINARY_DIR}/syslog-ng.pc)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syslog-ng.pc DESTINATION lib/pkgconfig)
include(print_config_summary)
print_config_summary()