diff options
Diffstat (limited to 'src/CMakeLists.txt')
-rw-r--r-- | src/CMakeLists.txt | 246 |
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 |