summaryrefslogtreecommitdiffstats
path: root/src/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/CMakeLists.txt')
-rw-r--r--src/CMakeLists.txt246
1 files changed, 246 insertions, 0 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000..1739177
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,246 @@
+MACRO(_AddModulesForced MLIST)
+# Generate unique string for this build
+ SET(MODULES_C "${CMAKE_CURRENT_BINARY_DIR}/modules.c")
+ FILE(WRITE "${MODULES_C}"
+ "#include \"rspamd.h\"\n")
+
+ # Handle even old cmake
+ LIST(LENGTH ${MLIST} MLIST_COUNT)
+ MATH(EXPR MLIST_MAX ${MLIST_COUNT}-1)
+
+ FOREACH(MOD_IDX RANGE ${MLIST_MAX})
+ LIST(GET ${MLIST} ${MOD_IDX} MOD)
+ FILE(APPEND "${MODULES_C}" "extern module_t ${MOD}_module;\n")
+ ENDFOREACH(MOD_IDX RANGE ${MLIST_MAX})
+
+ FILE(APPEND "${MODULES_C}" "\n\nmodule_t *modules[] = {\n")
+
+ FOREACH(MOD_IDX RANGE ${MLIST_MAX})
+ LIST(GET ${MLIST} ${MOD_IDX} MOD)
+ FILE(APPEND "${MODULES_C}" "&${MOD}_module,\n")
+ ENDFOREACH(MOD_IDX RANGE ${MLIST_MAX})
+
+ FILE(APPEND "${MODULES_C}" "NULL\n};\n")
+ENDMACRO(_AddModulesForced MLIST)
+
+MACRO(_AddWorkersForced WLIST)
+ SET(WORKERS_C "${CMAKE_CURRENT_BINARY_DIR}/workers.c")
+ FILE(WRITE "${WORKERS_C}"
+ "#include \"rspamd.h\"\n")
+
+ # Handle even old cmake
+ LIST(LENGTH ${WLIST} WLIST_COUNT)
+ MATH(EXPR WLIST_MAX ${WLIST_COUNT}-1)
+ FOREACH(MOD_IDX RANGE ${WLIST_MAX})
+ LIST(GET ${WLIST} ${MOD_IDX} WRK)
+ FILE(APPEND "${WORKERS_C}" "extern worker_t ${WRK}_worker;\n")
+ ENDFOREACH(MOD_IDX RANGE ${WLIST_MAX})
+
+ FILE(APPEND "${WORKERS_C}" "\n\nworker_t *workers[] = {\n")
+
+ FOREACH(MOD_IDX RANGE ${WLIST_MAX})
+ LIST(GET ${WLIST} ${MOD_IDX} WRK)
+ FILE(APPEND "${WORKERS_C}" "&${WRK}_worker,\n")
+ ENDFOREACH(MOD_IDX RANGE ${WLIST_MAX})
+ FILE(APPEND "${WORKERS_C}" "NULL\n};\n")
+ENDMACRO(_AddWorkersForced WLIST)
+
+MACRO(AddModules MLIST WLIST)
+ _AddModulesForced(${MLIST})
+ _AddWorkersForced(${WLIST})
+ #IF(NOT EXISTS "modules.c")
+ # _AddModulesForced(${MLIST} ${WLIST})
+ #ELSE(NOT EXISTS "modules.c")
+ # FILE(STRINGS "modules.c" FILE_ID_RAW REGEX "^/.*[a-zA-Z0-9]+.*/$")
+ # STRING(REGEX MATCH "[a-zA-Z0-9]+" FILE_ID "${FILE_ID_RAW}")
+ # IF(NOT FILE_ID STREQUAL MODULES_ID)
+ # MESSAGE("Regenerate modules info")
+ # _AddModulesForced(${MLIST} ${WLIST})
+ # ENDIF(NOT FILE_ID STREQUAL MODULES_ID)
+ #ENDIF(NOT EXISTS "modules.c")
+ENDMACRO(AddModules MLIST WLIST)
+
+# Rspamd core components
+IF (ENABLE_CLANG_PLUGIN MATCHES "ON")
+ SET(CMAKE_C_FLAGS
+ "${CMAKE_C_FLAGS} -Xclang -load -Xclang ${CMAKE_CURRENT_BINARY_DIR}/../clang-plugin/librspamd-clang${CMAKE_SHARED_LIBRARY_SUFFIX} -Xclang -add-plugin -Xclang rspamd-ast")
+ IF(CLANG_EXTRA_PLUGINS_LIBS)
+ FOREACH(_lib ${CLANG_EXTRA_PLUGINS_LIBS})
+ SET(CMAKE_C_FLAGS
+ "${CMAKE_C_FLAGS} -Xclang -load -Xclang ${_lib}")
+ SET(CMAKE_CXX_FLAGS
+ "${CMAKE_CXX_FLAGS} -Xclang -load -Xclang ${_lib}")
+ ENDFOREACH()
+ ENDIF()
+ IF(CLANG_EXTRA_PLUGINS)
+ FOREACH(_plug ${CLANG_EXTRA_PLUGINS})
+ SET(CMAKE_C_FLAGS
+ "${CMAKE_C_FLAGS} -Xclang -add-plugin -Xclang ${_plug}")
+ SET(CMAKE_CXX_FLAGS
+ "${CMAKE_C_FLAGS} -Xclang -add-plugin -Xclang ${_plug}")
+ ENDFOREACH()
+ ENDIF()
+ENDIF ()
+
+ADD_SUBDIRECTORY(lua)
+ADD_SUBDIRECTORY(libcryptobox)
+ADD_SUBDIRECTORY(libutil)
+ADD_SUBDIRECTORY(libserver)
+ADD_SUBDIRECTORY(libmime)
+ADD_SUBDIRECTORY(libstat)
+ADD_SUBDIRECTORY(client)
+ADD_SUBDIRECTORY(rspamadm)
+
+SET(RSPAMDSRC controller.c
+ fuzzy_storage.c
+ rspamd.c
+ worker.c
+ rspamd_proxy.c)
+
+SET(PLUGINSSRC plugins/regexp.c
+ plugins/chartable.cxx
+ plugins/fuzzy_check.c
+ plugins/dkim_check.c
+ libserver/rspamd_control.c)
+
+SET(MODULES_LIST regexp chartable fuzzy_check dkim)
+SET(WORKERS_LIST normal controller fuzzy rspamd_proxy)
+IF (ENABLE_HYPERSCAN MATCHES "ON")
+ LIST(APPEND WORKERS_LIST "hs_helper")
+ LIST(APPEND RSPAMDSRC "hs_helper.c")
+ENDIF()
+
+AddModules(MODULES_LIST WORKERS_LIST)
+LIST(LENGTH PLUGINSSRC RSPAMD_MODULES_NUM)
+
+SET(RAGEL_DEPENDS "${CMAKE_SOURCE_DIR}/src/ragel/smtp_address.rl"
+ "${CMAKE_SOURCE_DIR}/src/ragel/smtp_date.rl"
+ "${CMAKE_SOURCE_DIR}/src/ragel/smtp_ip.rl"
+ "${CMAKE_SOURCE_DIR}/src/ragel/smtp_base.rl"
+ "${CMAKE_SOURCE_DIR}/src/ragel/content_disposition.rl")
+RAGEL_TARGET(ragel_smtp_addr
+ INPUTS ${CMAKE_SOURCE_DIR}/src/ragel/smtp_addr_parser.rl
+ DEPENDS ${RAGEL_DEPENDS}
+ COMPILE_FLAGS -T1
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/smtp_addr_parser.rl.c)
+RAGEL_TARGET(ragel_content_disposition
+ INPUTS ${CMAKE_SOURCE_DIR}/src/ragel/content_disposition_parser.rl
+ DEPENDS ${RAGEL_DEPENDS}
+ COMPILE_FLAGS -G2
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/content_disposition.rl.c)
+RAGEL_TARGET(ragel_rfc2047
+ INPUTS ${CMAKE_SOURCE_DIR}/src/ragel/rfc2047_parser.rl
+ DEPENDS ${RAGEL_DEPENDS}
+ COMPILE_FLAGS -G2
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/rfc2047.rl.c)
+RAGEL_TARGET(ragel_smtp_date
+ INPUTS ${CMAKE_SOURCE_DIR}/src/ragel/smtp_date_parser.rl
+ DEPENDS ${RAGEL_DEPENDS}
+ COMPILE_FLAGS -G2
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/date_parser.rl.c)
+RAGEL_TARGET(ragel_smtp_ip
+ INPUTS ${CMAKE_SOURCE_DIR}/src/ragel/smtp_ip_parser.rl
+ DEPENDS ${RAGEL_DEPENDS}
+ COMPILE_FLAGS -G2
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ip_parser.rl.c)
+# Fucking cmake...
+FOREACH(_GEN ${LIBSERVER_GENERATED})
+ set_source_files_properties(${_GEN} PROPERTIES GENERATED TRUE)
+ENDFOREACH()
+######################### LINK SECTION ###############################
+
+IF(ENABLE_STATIC MATCHES "ON")
+ ADD_LIBRARY(rspamd-server STATIC
+ ${RSPAMD_CRYPTOBOX}
+ ${RSPAMD_UTIL}
+ ${RSPAMD_LUA}
+ ${RSPAMD_SERVER}
+ ${RSPAMD_STAT}
+ ${RSPAMD_MIME}
+ ${CMAKE_CURRENT_BINARY_DIR}/modules.c
+ ${PLUGINSSRC}
+ "${RAGEL_ragel_smtp_addr_OUTPUTS}"
+ "${RAGEL_ragel_newlines_strip_OUTPUTS}"
+ "${RAGEL_ragel_content_type_OUTPUTS}"
+ "${RAGEL_ragel_content_disposition_OUTPUTS}"
+ "${RAGEL_ragel_rfc2047_OUTPUTS}"
+ "${RAGEL_ragel_smtp_date_OUTPUTS}"
+ "${RAGEL_ragel_smtp_ip_OUTPUTS}"
+ ${BACKWARD_ENABLE})
+ELSE()
+ ADD_LIBRARY(rspamd-server SHARED
+ ${RSPAMD_CRYPTOBOX}
+ ${RSPAMD_UTIL}
+ ${RSPAMD_SERVER}
+ ${RSPAMD_STAT}
+ ${RSPAMD_MIME}
+ ${RSPAMD_LUA}
+ ${CMAKE_CURRENT_BINARY_DIR}/modules.c
+ ${PLUGINSSRC}
+ "${RAGEL_ragel_smtp_addr_OUTPUTS}"
+ "${RAGEL_ragel_newlines_strip_OUTPUTS}"
+ "${RAGEL_ragel_content_type_OUTPUTS}"
+ "${RAGEL_ragel_content_disposition_OUTPUTS}"
+ "${RAGEL_ragel_rfc2047_OUTPUTS}"
+ "${RAGEL_ragel_smtp_date_OUTPUTS}"
+ "${RAGEL_ragel_smtp_ip_OUTPUTS}"
+ ${BACKWARD_ENABLE})
+ENDIF()
+
+FOREACH(_DEP ${LIBSERVER_DEPENDS})
+ ADD_DEPENDENCIES(rspamd-server "${_DEP}")
+ENDFOREACH()
+
+TARGET_LINK_LIBRARIES(rspamd-server rspamd-http-parser)
+TARGET_LINK_LIBRARIES(rspamd-server rspamd-fpconv)
+TARGET_LINK_LIBRARIES(rspamd-server rspamd-cdb)
+TARGET_LINK_LIBRARIES(rspamd-server rspamd-lpeg)
+TARGET_LINK_LIBRARIES(rspamd-server lcbtrie)
+IF(SYSTEM_ZSTD MATCHES "OFF")
+ TARGET_LINK_LIBRARIES(rspamd-server rspamd-zstd)
+ELSE()
+ TARGET_LINK_LIBRARIES(rspamd-server zstd)
+ENDIF()
+TARGET_LINK_LIBRARIES(rspamd-server rspamd-fastutf8)
+
+IF (ENABLE_CLANG_PLUGIN MATCHES "ON")
+ ADD_DEPENDENCIES(rspamd-server rspamd-clang)
+ENDIF()
+
+IF (NOT WITH_LUAJIT)
+ TARGET_LINK_LIBRARIES(rspamd-server rspamd-bit)
+ENDIF()
+
+IF (ENABLE_SNOWBALL MATCHES "ON")
+ TARGET_LINK_LIBRARIES(rspamd-server stemmer)
+ENDIF()
+TARGET_LINK_LIBRARIES(rspamd-server rspamd-hiredis)
+
+IF (ENABLE_FANN MATCHES "ON")
+ TARGET_LINK_LIBRARIES(rspamd-server fann)
+ENDIF ()
+
+IF (ENABLE_HYPERSCAN MATCHES "ON")
+ TARGET_LINK_LIBRARIES(rspamd-server hs)
+ENDIF()
+
+IF(WITH_BLAS)
+ TARGET_LINK_LIBRARIES(rspamd-server ${BLAS_REQUIRED_LIBRARIES})
+ENDIF()
+
+TARGET_LINK_LIBRARIES(rspamd-server ${RSPAMD_REQUIRED_LIBRARIES})
+ADD_BACKWARD(rspamd-server)
+
+ADD_EXECUTABLE(rspamd ${RSPAMDSRC} ${CMAKE_CURRENT_BINARY_DIR}/workers.c ${CMAKE_CURRENT_BINARY_DIR}/config.h)
+ADD_BACKWARD(rspamd)
+SET_TARGET_PROPERTIES(rspamd PROPERTIES LINKER_LANGUAGE CXX)
+SET_TARGET_PROPERTIES(rspamd-server PROPERTIES LINKER_LANGUAGE CXX)
+IF(NOT DEBIAN_BUILD)
+ SET_TARGET_PROPERTIES(rspamd PROPERTIES VERSION ${RSPAMD_VERSION})
+ENDIF(NOT DEBIAN_BUILD)
+
+#TARGET_LINK_LIBRARIES(rspamd ${RSPAMD_REQUIRED_LIBRARIES})
+TARGET_LINK_LIBRARIES(rspamd rspamd-server)
+
+INSTALL(TARGETS rspamd RUNTIME DESTINATION bin)
+INSTALL(TARGETS rspamd-server LIBRARY DESTINATION ${RSPAMD_LIBDIR}) \ No newline at end of file