aboutsummaryrefslogtreecommitdiffstats
path: root/src/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/CMakeLists.txt')
-rw-r--r--src/CMakeLists.txt250
1 files changed, 120 insertions, 130 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 70c96f99d..270648697 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,149 +1,139 @@
-# Librspamd-util
-SET(LIBRSPAMDUTILSRC aio_event.c
- bloom.c
- diff.c
- fstring.c
- fuzzy.c
- hash.c
- http.c
- logger.c
- map.c
- memcached.c
- mem_pool.c
- printf.c
- radix.c
- rrd.c
- trie.c
- upstream.c
- util.c)
+MACRO(_AddModulesForced MLIST WLIST)
+# Generate unique string for this build
+ STRING(RANDOM LENGTH 8 _MODULES_ID)
+ SET(MODULES_ID ${_MODULES_ID} CACHE INTERNAL "Modules ID" FORCE)
+ FILE(WRITE "src/modules.c" "/* ${MODULES_ID} */\n#include \"config.h\"\n")
+
+ # Handle even old cmake
+ LIST(LENGTH ${MLIST} MLIST_COUNT)
+ LIST(LENGTH ${WLIST} WLIST_COUNT)
+ MATH(EXPR MLIST_MAX ${MLIST_COUNT}-1)
+ MATH(EXPR WLIST_MAX ${WLIST_COUNT}-1)
+
+ FOREACH(MOD_IDX RANGE ${MLIST_MAX})
+ LIST(GET ${MLIST} ${MOD_IDX} MOD)
+ FILE(APPEND "src/modules.c" "extern module_t ${MOD}_module;\n")
+ ENDFOREACH(MOD_IDX RANGE ${MLIST_MAX})
+
+ FILE(APPEND "src/modules.c" "\n\nmodule_t *modules[] = {\n")
+
+ FOREACH(MOD_IDX RANGE ${MLIST_MAX})
+ LIST(GET ${MLIST} ${MOD_IDX} MOD)
+ FILE(APPEND "src/modules.c" "&${MOD}_module,\n")
+ ENDFOREACH(MOD_IDX RANGE ${MLIST_MAX})
+
+ FILE(APPEND "src/modules.c" "NULL\n};\n")
+
+ FOREACH(MOD_IDX RANGE ${WLIST_MAX})
+ LIST(GET ${WLIST} ${MOD_IDX} WRK)
+ FILE(APPEND "src/modules.c" "extern worker_t ${WRK}_worker;\n")
+ ENDFOREACH(MOD_IDX RANGE ${WLIST_MAX})
+
+ FILE(APPEND "src/modules.c" "\n\nworker_t *workers[] = {\n")
+
+ FOREACH(MOD_IDX RANGE ${WLIST_MAX})
+ LIST(GET ${WLIST} ${MOD_IDX} WRK)
+ FILE(APPEND "src/modules.c" "&${WRK}_worker,\n")
+ ENDFOREACH(MOD_IDX RANGE ${WLIST_MAX})
+ FILE(APPEND "src/modules.c" "NULL\n};\n")
+ENDMACRO(_AddModulesForced MLIST WLIST)
-# Librspamdserver
-SET(LIBRSPAMDSERVERSRC
- binlog.c
- buffer.c
- cfg_utils.c
- cfg_rcl.c
- dkim.c
- dns.c
- dynamic_cfg.c
- events.c
- html.c
- proxy.c
- roll_history.c
- settings.c
- spf.c
- statfile.c
- statfile_sync.c
- symbols_cache.c
- task.c
- url.c)
-
-# Librspamd mime
-SET(LIBRSPAMDMIMESRC
- expressions.c
- filter.c
- images.c
- message.c
- protocol.c
- smtp_utils.c
- smtp_proto.c
- worker_util.c)
-
-SET(TOKENIZERSSRC tokenizers/tokenizers.c
- tokenizers/osb.c)
-
-SET(CLASSIFIERSSRC classifiers/classifiers.c
- classifiers/bayes.c
- classifiers/winnow.c)
-# Add targets
+MACRO(AddModules MLIST WLIST)
+ _AddModulesForced(${MLIST} ${WLIST})
+ #IF(NOT EXISTS "src/modules.c")
+ # _AddModulesForced(${MLIST} ${WLIST})
+ #ELSE(NOT EXISTS "src/modules.c")
+ # FILE(STRINGS "src/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 "src/modules.c")
+ENDMACRO(AddModules MLIST WLIST)
-# Rspamdutil
-ADD_LIBRARY(rspamd-util ${LINK_TYPE} ${LIBRSPAMDUTILSRC})
-IF(CMAKE_COMPILER_IS_GNUCC)
-SET_TARGET_PROPERTIES(rspamd-util PROPERTIES COMPILE_FLAGS "-fno-strict-aliasing")
-ENDIF(CMAKE_COMPILER_IS_GNUCC)
+# Contrib software
+ADD_SUBDIRECTORY(json)
+ADD_SUBDIRECTORY(cdb)
+ADD_SUBDIRECTORY(ucl/cmake)
+SET(SLAVE_BUILD 1)
+ADD_SUBDIRECTORY(rdns)
+UNSET(SLAVE_BUILD)
+INCLUDE_DIRECTORIES(libutil libserver libmime)
-TARGET_LINK_LIBRARIES(rspamd-util ${RSPAMD_REQUIRED_LIBRARIES})
-TARGET_LINK_LIBRARIES(rspamd-util pcre)
-TARGET_LINK_LIBRARIES(rspamd-util ucl)
-TARGET_LINK_LIBRARIES(rspamd-util ottery)
-TARGET_LINK_LIBRARIES(rspamd-util rspamd-http-parser)
-TARGET_LINK_LIBRARIES(rspamd-util event)
-TARGET_LINK_LIBRARIES(rspamd-util xxhash)
-IF(OPENSSL_FOUND)
- TARGET_LINK_LIBRARIES(rspamd-util ${OPENSSL_LIBRARIES})
-ENDIF(OPENSSL_FOUND)
+# Rspamd core components
+ADD_SUBDIRECTORY(lua)
+ADD_SUBDIRECTORY(libutil)
+ADD_SUBDIRECTORY(libserver)
+ADD_SUBDIRECTORY(libmime)
+ADD_SUBDIRECTORY(client)
+
+SET(RSPAMDSRC modules.c
+ controller.c
+ fuzzy_storage.c
+ lua_worker.c
+ main.c
+ smtp_proxy.c
+ webui.c
+ worker.c)
-IF(NOT DEBIAN_BUILD)
-SET_TARGET_PROPERTIES(rspamd-util PROPERTIES VERSION ${RSPAMD_VERSION})
-ENDIF(NOT DEBIAN_BUILD)
+SET(PLUGINSSRC plugins/surbl.c
+ plugins/regexp.c
+ plugins/chartable.c
+ plugins/fuzzy_check.c
+ plugins/spf.c
+ plugins/dkim_check.c)
+
+SET(MODULES_LIST surbl regexp chartable fuzzy_check spf dkim)
+SET(WORKERS_LIST normal controller smtp_proxy fuzzy lua webui)
-IF(GLIB_COMPAT)
- INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/contrib/lgpl")
- TARGET_LINK_LIBRARIES(rspamd-util glibadditions)
-ENDIF(GLIB_COMPAT)
+AddModules(MODULES_LIST WORKERS_LIST)
+LIST(LENGTH PLUGINSSRC RSPAMD_MODULES_NUM)
-IF(NO_SHARED MATCHES "OFF")
- INSTALL(TARGETS rspamd-util
- LIBRARY DESTINATION ${LIBDIR}
- PUBLIC_HEADER DESTINATION include)
-ENDIF(NO_SHARED MATCHES "OFF")
-
-# Librspamd-server
+######################### LINK SECTION ###############################
-#IF(WITH_DB)
-# LIST(APPEND LIBRSPAMDSERVERSRC kvstorage_bdb.c)
-#ENDIF(WITH_DB)
-#IF(WITH_SQLITE)
-# LIST(APPEND LIBRSPAMDSERVERSRC kvstorage_sqlite.c)
-#ENDIF(WITH_SQLITE)
-
-ADD_LIBRARY(rspamd-server ${LINK_TYPE} ${LIBRSPAMDSERVERSRC} ${TOKENIZERSSRC} ${CLASSIFIERSSRC})
+ADD_EXECUTABLE(rspamd ${RSPAMDSRC} ${PLUGINSSRC})
+SET_TARGET_PROPERTIES(rspamd PROPERTIES LINKER_LANGUAGE C)
+SET_TARGET_PROPERTIES(rspamd PROPERTIES COMPILE_FLAGS "-DRSPAMD_MAIN")
IF(NOT DEBIAN_BUILD)
-SET_TARGET_PROPERTIES(rspamd-server PROPERTIES VERSION ${RSPAMD_VERSION})
+SET_TARGET_PROPERTIES(rspamd PROPERTIES VERSION ${RSPAMD_VERSION})
ENDIF(NOT DEBIAN_BUILD)
-SET_TARGET_PROPERTIES(rspamd-server PROPERTIES LINKER_LANGUAGE C COMPILE_FLAGS "-DRSPAMD_LIB")
-TARGET_LINK_LIBRARIES(rspamd-server rspamd-lua)
-TARGET_LINK_LIBRARIES(rspamd-server rspamd-json)
-TARGET_LINK_LIBRARIES(rspamd-server rspamd-cdb)
-TARGET_LINK_LIBRARIES(rspamd-server rspamd-util)
-TARGET_LINK_LIBRARIES(rspamd-server rdns)
-IF(CMAKE_COMPILER_IS_GNUCC)
-SET_TARGET_PROPERTIES(rspamd-server PROPERTIES COMPILE_FLAGS "-DRSPAMD_LIB -fno-strict-aliasing")
-ENDIF(CMAKE_COMPILER_IS_GNUCC)
+TARGET_LINK_LIBRARIES(rspamd rspamd-mime)
+TARGET_LINK_LIBRARIES(rspamd rspamd-server)
+TARGET_LINK_LIBRARIES(rspamd rspamd-util)
+TARGET_LINK_LIBRARIES(rspamd rspamd-lua)
+
+TARGET_LINK_LIBRARIES(rspamd event)
+IF(HAVE_LIBEVENT2)
+ TARGET_LINK_LIBRARIES(rspamd event_pthreads)
+ENDIF(HAVE_LIBEVENT2)
IF(WITH_DB)
- TARGET_LINK_LIBRARIES(rspamd-server db)
+ TARGET_LINK_LIBRARIES(rspamd db)
ENDIF(WITH_DB)
IF(OPENSSL_FOUND)
- TARGET_LINK_LIBRARIES(rspamd-server ${OPENSSL_LIBRARIES})
+ TARGET_LINK_LIBRARIES(rspamd ${OPENSSL_LIBRARIES})
ENDIF(OPENSSL_FOUND)
+IF(HAVE_FETCH_H)
+ TARGET_LINK_LIBRARIES(rspamd fetch)
+ENDIF(HAVE_FETCH_H)
+TARGET_LINK_LIBRARIES(rspamd ${RSPAMD_REQUIRED_LIBRARIES})
-IF(NO_SHARED MATCHES "OFF")
- INSTALL(TARGETS rspamd-server
- LIBRARY DESTINATION ${LIBDIR}
- PUBLIC_HEADER DESTINATION ${INCLUDEDIR})
-ENDIF(NO_SHARED MATCHES "OFF")
-
-# Librspamdmime
-ADD_LIBRARY(rspamd-mime ${LINK_TYPE} ${LIBRSPAMDMIMESRC})
-IF(NOT DEBIAN_BUILD)
-SET_TARGET_PROPERTIES(rspamd-mime PROPERTIES VERSION ${RSPAMD_VERSION})
-ENDIF(NOT DEBIAN_BUILD)
-SET_TARGET_PROPERTIES(rspamd-mime PROPERTIES LINKER_LANGUAGE C)
-SET_TARGET_PROPERTIES(rspamd-mime PROPERTIES COMPILE_FLAGS "-DRSPAMD_LIB")
-TARGET_LINK_LIBRARIES(rspamd-mime rspamd-server)
-TARGET_LINK_LIBRARIES(rspamd-mime rspamd-util)
-IF(CMAKE_COMPILER_IS_GNUCC)
-SET_TARGET_PROPERTIES(rspamd-mime PROPERTIES COMPILE_FLAGS "-DRSPAMD_LIB -fno-strict-aliasing")
-ENDIF(CMAKE_COMPILER_IS_GNUCC)
+IF(ENABLE_LUAJIT MATCHES "ON")
+ TARGET_LINK_LIBRARIES(rspamd "${LUAJIT_LIBRARY}")
+ELSE(ENABLE_LUAJIT MATCHES "ON")
+ TARGET_LINK_LIBRARIES(rspamd "${LUA_LIBRARY}")
+ENDIF(ENABLE_LUAJIT MATCHES "ON")
+
+IF(ENABLE_GPERF_TOOLS MATCHES "ON")
+ TARGET_LINK_LIBRARIES(rspamd profiler)
+ENDIF(ENABLE_GPERF_TOOLS MATCHES "ON")
+TARGET_LINK_LIBRARIES(rspamd hiredis)
+IF(GLIB_COMPAT)
+ TARGET_LINK_LIBRARIES(rspamd glibadditions)
+ENDIF(GLIB_COMPAT)
-IF(NO_SHARED MATCHES "OFF")
- INSTALL(TARGETS rspamd-mime
- LIBRARY DESTINATION ${LIBDIR}
- PUBLIC_HEADER DESTINATION ${INCLUDEDIR})
-ENDIF(NO_SHARED MATCHES "OFF")
-INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/src") \ No newline at end of file
+INSTALL(TARGETS rspamd RUNTIME DESTINATION bin) \ No newline at end of file