aboutsummaryrefslogtreecommitdiffstats
path: root/cmake/OSDep.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/OSDep.cmake')
-rw-r--r--cmake/OSDep.cmake175
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()