From: Vsevolod Stakhov Date: Sat, 29 Mar 2025 10:37:03 +0000 (+0000) Subject: [Project] Rework OSDep X-Git-Tag: 3.12.0~49^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7a8720e4c334d21e52e25c3134f0c5700d53f429;p=thirdparty%2Frspamd.git [Project] Rework OSDep --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 87f106425f..7280ae2840 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -104,6 +104,9 @@ include(Sanitizer) include(ArchDep) include(Paths) +include(OSDep) +ConfigurePlatformSpecifics() + if (ENABLE_PCRE2) set(WITH_PCRE2 1) # For utf8 API diff --git a/cmake/OSDep.cmake b/cmake/OSDep.cmake index f2bd56cec2..2f23ada4b9 100644 --- a/cmake/OSDep.cmake +++ b/cmake/OSDep.cmake @@ -1,67 +1,108 @@ -# Platform specific configuration -IF(CMAKE_SYSTEM_NAME MATCHES "^.*BSD$|DragonFly") - ADD_COMPILE_OPTIONS(-DFREEBSD -D_BSD_SOURCE) - SET(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_BSD_SOURCE") - CONFIGURE_FILE(freebsd/rspamd.sh.in freebsd/rspamd @ONLY) - MESSAGE(STATUS "Configuring for BSD system") - # Find util library - ProcessPackage(LIBUTIL LIBRARY util INCLUDE libutil.h - ROOT ${LIBUTIL_ROOT_DIR} OPTIONAL) - IF(WITH_LIBUTIL) - SET(HAVE_LIBUTIL_H 1) - LIST(APPEND CMAKE_REQUIRED_LIBRARIES util) - CHECK_FUNCTION_EXISTS(pidfile_open HAVE_PIDFILE) - CHECK_FUNCTION_EXISTS(pidfile_fileno HAVE_PIDFILE_FILENO) - ENDIF() - IF(CMAKE_SYSTEM_NAME MATCHES "^NetBSD$") - LIST(APPEND CMAKE_REQUIRED_LIBRARIES rt) - ENDIF() - SET(TAR "gtar") -ENDIF() - -IF(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - ADD_COMPILE_OPTIONS(-D_BSD_SOURCE -DDARWIN) - SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS} -undefined dynamic_lookup") - IF(ENABLE_LUAJIT MATCHES "ON") - IF ("${ARCH}" STREQUAL "x86_64") - SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pagezero_size 10000 -image_base 100000000") - ENDIF() - ENDIF(ENABLE_LUAJIT MATCHES "ON") - MESSAGE(STATUS "Configuring for Darwin") - SET(TAR "gnutar") - SET(CMAKE_FIND_FRAMEWORK "NEVER") -ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - -IF(CMAKE_SYSTEM_NAME STREQUAL "Linux") - ADD_COMPILE_OPTIONS(-D_GNU_SOURCE -DLINUX) - SET(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_GNU_SOURCE") - # Workaround with architecture specific includes - #IF(IS_DIRECTORY "/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/") - # INCLUDE_DIRECTORIES("/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/") - # LIST(APPEND CMAKE_REQUIRED_INCLUDES "/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/") - #ENDIF(IS_DIRECTORY "/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/") - - LIST(APPEND CMAKE_REQUIRED_LIBRARIES rt) - LIST(APPEND CMAKE_REQUIRED_LIBRARIES dl) - LIST(APPEND CMAKE_REQUIRED_LIBRARIES resolv) - MESSAGE(STATUS "Configuring for Linux") - IF(EXISTS "/etc/debian_version") - SET(LINUX_START_SCRIPT "rspamd_debian.in") - ELSE(EXISTS "/etc/debian_version") - SET(LINUX_START_SCRIPT "rspamd_rh.in") - ENDIF(EXISTS "/etc/debian_version") -ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux") - -IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS") - ADD_COMPILE_OPTIONS(-D__EXTENSIONS__ -DSOLARIS -D_POSIX_SOURCE -D_POSIX_C_SOURCE=200112) - LIST(APPEND CMAKE_REQUIRED_LIBRARIES rt) - LIST(APPEND CMAKE_REQUIRED_LIBRARIES dl) - LIST(APPEND CMAKE_REQUIRED_LIBRARIES resolv) - LIST(APPEND CMAKE_REQUIRED_LIBRARIES nsl) - LIST(APPEND CMAKE_REQUIRED_LIBRARIES socket) - LIST(APPEND CMAKE_REQUIRED_LIBRARIES umem) - # Ugly hack, but FindOpenSSL on Solaris does not link with libcrypto - SET(CMAKE_VERBOSE_MAKEFILE ON) - SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) - SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib:${RSPAMD_LIBDIR}") -ENDIF(CMAKE_SYSTEM_NAME STREQUAL "SunOS") \ No newline at end of file +# OSDep.cmake - Platform-specific configuration as a function + +function(ConfigurePlatformSpecifics) + # Configure for BSD systems + if (CMAKE_SYSTEM_NAME MATCHES "^.*BSD$|DragonFly") + # Add BSD-specific compiler flags + add_compile_definitions(FREEBSD _BSD_SOURCE) + set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_BSD_SOURCE" PARENT_SCOPE) + + # Configure FreeBSD startup script + configure_file(freebsd/rspamd.sh.in freebsd/rspamd @ONLY) + message(STATUS "Configuring for BSD system") + + # Find util library + ProcessPackage(LIBUTIL LIBRARY util INCLUDE libutil.h + ROOT ${LIBUTIL_ROOT_DIR} OPTIONAL) + + if (WITH_LIBUTIL) + set(HAVE_LIBUTIL_H 1) + list(APPEND CMAKE_REQUIRED_LIBRARIES util) + list(APPEND RSPAMD_REQUIRED_LIBRARIES util) + + # Check for pidfile functions + check_function_exists(pidfile_open HAVE_PIDFILE) + check_function_exists(pidfile_fileno HAVE_PIDFILE_FILENO) + + # Propagate variables to parent scope + set(HAVE_PIDFILE ${HAVE_PIDFILE} PARENT_SCOPE) + set(HAVE_PIDFILE_FILENO ${HAVE_PIDFILE_FILENO} PARENT_SCOPE) + set(HAVE_LIBUTIL_H ${HAVE_LIBUTIL_H} PARENT_SCOPE) + endif () + + # NetBSD-specific libraries + if (CMAKE_SYSTEM_NAME MATCHES "^NetBSD$") + list(APPEND CMAKE_REQUIRED_LIBRARIES rt) + list(APPEND RSPAMD_REQUIRED_LIBRARIES rt) + endif () + + set(TAR "gtar" PARENT_SCOPE) + endif () + + # Configure for macOS (Darwin) + if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + # Add macOS-specific compiler flags + add_compile_definitions(_BSD_SOURCE DARWIN) + + # Configure dynamic linking behavior + set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS} -undefined dynamic_lookup" PARENT_SCOPE) + + # Special handling for LUAJIT on x86_64 macOS + if (ENABLE_LUAJIT AND "${ARCH}" STREQUAL "x86_64") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pagezero_size 10000 -image_base 100000000" PARENT_SCOPE) + endif () + + message(STATUS "Configuring for Darwin") + set(TAR "gnutar" PARENT_SCOPE) + set(CMAKE_FIND_FRAMEWORK "NEVER" PARENT_SCOPE) + endif () + + # Configure for Linux systems + if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + # Add Linux-specific compiler flags + add_compile_definitions(_GNU_SOURCE LINUX) + set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_GNU_SOURCE" PARENT_SCOPE) + + # Required Linux libraries + set(LINUX_REQUIRED_LIBS dl rt resolv) + foreach (lib ${LINUX_REQUIRED_LIBS}) + list(APPEND CMAKE_REQUIRED_LIBRARIES ${lib}) + list(APPEND RSPAMD_REQUIRED_LIBRARIES ${lib}) + endforeach () + + message(STATUS "Configuring for Linux") + + # Determine init script based on distribution + if (EXISTS "/etc/debian_version") + set(LINUX_START_SCRIPT "rspamd_debian.in" PARENT_SCOPE) + else () + set(LINUX_START_SCRIPT "rspamd_rh.in" PARENT_SCOPE) + endif () + endif () + + # Configure for Solaris systems + if (CMAKE_SYSTEM_NAME STREQUAL "SunOS") + # Add Solaris-specific compiler flags + add_compile_definitions(__EXTENSIONS__ SOLARIS _POSIX_SOURCE _POSIX_C_SOURCE=200112) + + # Required Solaris libraries + set(SOLARIS_REQUIRED_LIBS rt dl resolv nsl socket umem) + foreach (lib ${SOLARIS_REQUIRED_LIBS}) + list(APPEND CMAKE_REQUIRED_LIBRARIES ${lib}) + list(APPEND RSPAMD_REQUIRED_LIBRARIES ${lib}) + endforeach () + + # Configure Solaris-specific build settings + set(CMAKE_VERBOSE_MAKEFILE ON PARENT_SCOPE) + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE PARENT_SCOPE) + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib:${RSPAMD_LIBDIR}" PARENT_SCOPE) + endif () + + # Always propagate required libraries to parent scope + set(RSPAMD_REQUIRED_LIBRARIES ${RSPAMD_REQUIRED_LIBRARIES} PARENT_SCOPE) + set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} PARENT_SCOPE) + + # Log platform-specific configuration + message(STATUS "Platform: ${CMAKE_SYSTEM_NAME}") + message(STATUS "Platform-specific required libraries: ${RSPAMD_REQUIRED_LIBRARIES}") +endfunction() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e4d3c7d81e..6cc49e4e40 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -213,7 +213,7 @@ target_link_libraries(rspamd-server if (SYSTEM_XXHASH) target_link_libraries(rspamd-server PUBLIC xxhash) else () - target_link_libraries(rspamd-server PRIVATE rspamd-xxhash) + target_link_libraries(rspamd-server PUBLIC rspamd-xxhash) endif () # Handle zstd dependency