You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CMakeLists.txt 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. MACRO(_AddModulesForced MLIST)
  2. # Generate unique string for this build
  3. STRING(RANDOM LENGTH 8 _MODULES_ID)
  4. SET(MODULES_ID ${_MODULES_ID} CACHE INTERNAL "Modules ID" FORCE)
  5. SET(MODULES_C "${CMAKE_CURRENT_BINARY_DIR}/modules.c")
  6. FILE(WRITE "${MODULES_C}"
  7. "/* ${MODULES_ID} */\n#include \"rspamd.h\"\n")
  8. # Handle even old cmake
  9. LIST(LENGTH ${MLIST} MLIST_COUNT)
  10. MATH(EXPR MLIST_MAX ${MLIST_COUNT}-1)
  11. FOREACH(MOD_IDX RANGE ${MLIST_MAX})
  12. LIST(GET ${MLIST} ${MOD_IDX} MOD)
  13. FILE(APPEND "${MODULES_C}" "extern module_t ${MOD}_module;\n")
  14. ENDFOREACH(MOD_IDX RANGE ${MLIST_MAX})
  15. FILE(APPEND "${MODULES_C}" "\n\nmodule_t *modules[] = {\n")
  16. FOREACH(MOD_IDX RANGE ${MLIST_MAX})
  17. LIST(GET ${MLIST} ${MOD_IDX} MOD)
  18. FILE(APPEND "${MODULES_C}" "&${MOD}_module,\n")
  19. ENDFOREACH(MOD_IDX RANGE ${MLIST_MAX})
  20. FILE(APPEND "${MODULES_C}" "NULL\n};\n")
  21. ENDMACRO(_AddModulesForced MLIST)
  22. MACRO(_AddWorkersForced WLIST)
  23. SET(WORKERS_C "${CMAKE_CURRENT_BINARY_DIR}/workers.c")
  24. FILE(WRITE "${WORKERS_C}"
  25. "#include \"rspamd.h\"\n")
  26. # Handle even old cmake
  27. LIST(LENGTH ${WLIST} WLIST_COUNT)
  28. MATH(EXPR WLIST_MAX ${WLIST_COUNT}-1)
  29. FOREACH(MOD_IDX RANGE ${WLIST_MAX})
  30. LIST(GET ${WLIST} ${MOD_IDX} WRK)
  31. FILE(APPEND "${WORKERS_C}" "extern worker_t ${WRK}_worker;\n")
  32. ENDFOREACH(MOD_IDX RANGE ${WLIST_MAX})
  33. FILE(APPEND "${WORKERS_C}" "\n\nworker_t *workers[] = {\n")
  34. FOREACH(MOD_IDX RANGE ${WLIST_MAX})
  35. LIST(GET ${WLIST} ${MOD_IDX} WRK)
  36. FILE(APPEND "${WORKERS_C}" "&${WRK}_worker,\n")
  37. ENDFOREACH(MOD_IDX RANGE ${WLIST_MAX})
  38. FILE(APPEND "${WORKERS_C}" "NULL\n};\n")
  39. ENDMACRO(_AddWorkersForced WLIST)
  40. MACRO(AddModules MLIST WLIST)
  41. _AddModulesForced(${MLIST})
  42. _AddWorkersForced(${WLIST})
  43. #IF(NOT EXISTS "modules.c")
  44. # _AddModulesForced(${MLIST} ${WLIST})
  45. #ELSE(NOT EXISTS "modules.c")
  46. # FILE(STRINGS "modules.c" FILE_ID_RAW REGEX "^/.*[a-zA-Z0-9]+.*/$")
  47. # STRING(REGEX MATCH "[a-zA-Z0-9]+" FILE_ID "${FILE_ID_RAW}")
  48. # IF(NOT FILE_ID STREQUAL MODULES_ID)
  49. # MESSAGE("Regenerate modules info")
  50. # _AddModulesForced(${MLIST} ${WLIST})
  51. # ENDIF(NOT FILE_ID STREQUAL MODULES_ID)
  52. #ENDIF(NOT EXISTS "modules.c")
  53. ENDMACRO(AddModules MLIST WLIST)
  54. # Rspamd core components
  55. IF (ENABLE_CLANG_PLUGIN MATCHES "ON")
  56. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Xclang -load -Xclang ${CMAKE_CURRENT_BINARY_DIR}/../clang-plugin/librspamd-clang.so -Xclang -add-plugin -Xclang rspamd-ast")
  57. ENDIF ()
  58. ADD_SUBDIRECTORY(lua)
  59. ADD_SUBDIRECTORY(libcryptobox)
  60. ADD_SUBDIRECTORY(libutil)
  61. ADD_SUBDIRECTORY(libserver)
  62. ADD_SUBDIRECTORY(libmime)
  63. ADD_SUBDIRECTORY(libstat)
  64. ADD_SUBDIRECTORY(client)
  65. ADD_SUBDIRECTORY(rspamadm)
  66. SET(RSPAMDSRC controller.c
  67. fuzzy_storage.c
  68. lua_worker.c
  69. rspamd.c
  70. smtp_proxy.c
  71. worker.c
  72. http_proxy.c)
  73. SET(PLUGINSSRC plugins/surbl.c
  74. plugins/regexp.c
  75. plugins/chartable.c
  76. plugins/fuzzy_check.c
  77. plugins/spf.c
  78. plugins/dkim_check.c
  79. libserver/rspamd_control.c lua/lua_fann.c)
  80. SET(MODULES_LIST surbl regexp chartable fuzzy_check spf dkim)
  81. SET(WORKERS_LIST normal controller smtp_proxy fuzzy lua http_proxy)
  82. IF (ENABLE_HYPERSCAN MATCHES "ON")
  83. LIST(APPEND WORKERS_LIST "hs_helper")
  84. LIST(APPEND RSPAMDSRC "hs_helper.c")
  85. ENDIF()
  86. AddModules(MODULES_LIST WORKERS_LIST)
  87. LIST(LENGTH PLUGINSSRC RSPAMD_MODULES_NUM)
  88. ######################### LINK SECTION ###############################
  89. ADD_LIBRARY(rspamd-server STATIC ${RSPAMD_UTIL} ${RSPAMD_LUA} ${RSPAMD_SERVER}
  90. ${RSPAMD_STAT} ${RSPAMD_MIME} ${RSPAMD_CRYPTOBOX}
  91. ${CMAKE_CURRENT_BINARY_DIR}/modules.c ${PLUGINSSRC})
  92. TARGET_LINK_LIBRARIES(rspamd-server rspamd-http-parser)
  93. TARGET_LINK_LIBRARIES(rspamd-server rspamd-cdb)
  94. TARGET_LINK_LIBRARIES(rspamd-server rspamd-lpeg)
  95. IF (ENABLE_CLANG_PLUGIN MATCHES "ON")
  96. ADD_DEPENDENCIES(rspamd-server rspamd-clang)
  97. ENDIF()
  98. ADD_EXECUTABLE(rspamd ${RSPAMDSRC} ${CMAKE_CURRENT_BINARY_DIR}/workers.c)
  99. SET_TARGET_PROPERTIES(rspamd PROPERTIES LINKER_LANGUAGE C)
  100. SET_TARGET_PROPERTIES(rspamd PROPERTIES COMPILE_FLAGS "-DRSPAMD_MAIN")
  101. IF(NOT DEBIAN_BUILD)
  102. SET_TARGET_PROPERTIES(rspamd PROPERTIES VERSION ${RSPAMD_VERSION})
  103. ENDIF(NOT DEBIAN_BUILD)
  104. TARGET_LINK_LIBRARIES(rspamd rspamd-server)
  105. IF (ENABLE_SNOWBALL MATCHES "ON")
  106. TARGET_LINK_LIBRARIES(rspamd stemmer)
  107. ENDIF()
  108. IF(ENABLE_HIREDIS MATCHES "ON")
  109. TARGET_LINK_LIBRARIES(rspamd rspamd-hiredis)
  110. ENDIF()
  111. TARGET_LINK_LIBRARIES(rspamd rspamd-actrie)
  112. IF (ENABLE_FANN MATCHES "ON")
  113. TARGET_LINK_LIBRARIES(rspamd fann)
  114. ENDIF ()
  115. IF (ENABLE_HYPERSCAN MATCHES "ON")
  116. TARGET_LINK_LIBRARIES(rspamd hs)
  117. SET_TARGET_PROPERTIES(rspamd PROPERTIES LINKER_LANGUAGE CXX)
  118. ENDIF()
  119. TARGET_LINK_LIBRARIES(rspamd ${RSPAMD_REQUIRED_LIBRARIES})
  120. INSTALL(TARGETS rspamd RUNTIME DESTINATION bin)