diff options
Diffstat (limited to 'cmake/OSDep.cmake')
-rw-r--r-- | cmake/OSDep.cmake | 175 |
1 files changed, 108 insertions, 67 deletions
diff --git a/cmake/OSDep.cmake b/cmake/OSDep.cmake index f2bd56cec..2f23ada4b 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() |