]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Project] Rework OSDep
authorVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 29 Mar 2025 10:37:03 +0000 (10:37 +0000)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 29 Mar 2025 10:37:03 +0000 (10:37 +0000)
CMakeLists.txt
cmake/OSDep.cmake
src/CMakeLists.txt

index 87f106425f99a82771c93faa4d6f231b1480da3e..7280ae2840324e03d333303c2c517216c8ba37bd 100644 (file)
@@ -104,6 +104,9 @@ include(Sanitizer)
 include(ArchDep)
 include(Paths)
 
+include(OSDep)
+ConfigurePlatformSpecifics()
+
 if (ENABLE_PCRE2)
     set(WITH_PCRE2 1)
     # For utf8 API
index f2bd56cec28f7438a3d0077c74685209deb1dca8..2f23ada4b973df02b2241b870ccee2a6246427fc 100644 (file)
-# 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()
index e4d3c7d81e795d77e7fbc44a75c0468ecaa188e0..6cc49e4e408b2b49f5d67cac6bfe60a26025563f 100644 (file)
@@ -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