Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

CMakeLists.txt 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. MACRO(_AddModulesForced MLIST)
  2. # Generate unique string for this build
  3. SET(MODULES_C "${CMAKE_CURRENT_BINARY_DIR}/modules.c")
  4. FILE(WRITE "${MODULES_C}"
  5. "#include \"rspamd.h\"\n")
  6. # Handle even old cmake
  7. LIST(LENGTH ${MLIST} MLIST_COUNT)
  8. MATH(EXPR MLIST_MAX ${MLIST_COUNT}-1)
  9. FOREACH(MOD_IDX RANGE ${MLIST_MAX})
  10. LIST(GET ${MLIST} ${MOD_IDX} MOD)
  11. FILE(APPEND "${MODULES_C}" "extern module_t ${MOD}_module;\n")
  12. ENDFOREACH(MOD_IDX RANGE ${MLIST_MAX})
  13. FILE(APPEND "${MODULES_C}" "\n\nmodule_t *modules[] = {\n")
  14. FOREACH(MOD_IDX RANGE ${MLIST_MAX})
  15. LIST(GET ${MLIST} ${MOD_IDX} MOD)
  16. FILE(APPEND "${MODULES_C}" "&${MOD}_module,\n")
  17. ENDFOREACH(MOD_IDX RANGE ${MLIST_MAX})
  18. FILE(APPEND "${MODULES_C}" "NULL\n};\n")
  19. ENDMACRO(_AddModulesForced MLIST)
  20. MACRO(_AddWorkersForced WLIST)
  21. SET(WORKERS_C "${CMAKE_CURRENT_BINARY_DIR}/workers.c")
  22. FILE(WRITE "${WORKERS_C}"
  23. "#include \"rspamd.h\"\n")
  24. # Handle even old cmake
  25. LIST(LENGTH ${WLIST} WLIST_COUNT)
  26. MATH(EXPR WLIST_MAX ${WLIST_COUNT}-1)
  27. FOREACH(MOD_IDX RANGE ${WLIST_MAX})
  28. LIST(GET ${WLIST} ${MOD_IDX} WRK)
  29. FILE(APPEND "${WORKERS_C}" "extern worker_t ${WRK}_worker;\n")
  30. ENDFOREACH(MOD_IDX RANGE ${WLIST_MAX})
  31. FILE(APPEND "${WORKERS_C}" "\n\nworker_t *workers[] = {\n")
  32. FOREACH(MOD_IDX RANGE ${WLIST_MAX})
  33. LIST(GET ${WLIST} ${MOD_IDX} WRK)
  34. FILE(APPEND "${WORKERS_C}" "&${WRK}_worker,\n")
  35. ENDFOREACH(MOD_IDX RANGE ${WLIST_MAX})
  36. FILE(APPEND "${WORKERS_C}" "NULL\n};\n")
  37. ENDMACRO(_AddWorkersForced WLIST)
  38. MACRO(AddModules MLIST WLIST)
  39. _AddModulesForced(${MLIST})
  40. _AddWorkersForced(${WLIST})
  41. #IF(NOT EXISTS "modules.c")
  42. # _AddModulesForced(${MLIST} ${WLIST})
  43. #ELSE(NOT EXISTS "modules.c")
  44. # FILE(STRINGS "modules.c" FILE_ID_RAW REGEX "^/.*[a-zA-Z0-9]+.*/$")
  45. # STRING(REGEX MATCH "[a-zA-Z0-9]+" FILE_ID "${FILE_ID_RAW}")
  46. # IF(NOT FILE_ID STREQUAL MODULES_ID)
  47. # MESSAGE("Regenerate modules info")
  48. # _AddModulesForced(${MLIST} ${WLIST})
  49. # ENDIF(NOT FILE_ID STREQUAL MODULES_ID)
  50. #ENDIF(NOT EXISTS "modules.c")
  51. ENDMACRO(AddModules MLIST WLIST)
  52. # Rspamd core components
  53. IF (ENABLE_CLANG_PLUGIN MATCHES "ON")
  54. 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")
  55. ENDIF ()
  56. ADD_SUBDIRECTORY(lua)
  57. ADD_SUBDIRECTORY(libcryptobox)
  58. ADD_SUBDIRECTORY(libutil)
  59. ADD_SUBDIRECTORY(libserver)
  60. ADD_SUBDIRECTORY(libmime)
  61. ADD_SUBDIRECTORY(libstat)
  62. ADD_SUBDIRECTORY(client)
  63. ADD_SUBDIRECTORY(rspamadm)
  64. SET(RSPAMDSRC controller.c
  65. fuzzy_storage.c
  66. lua_worker.c
  67. rspamd.c
  68. worker.c
  69. rspamd_proxy.c
  70. log_helper.c)
  71. SET(PLUGINSSRC plugins/surbl.c
  72. plugins/regexp.c
  73. plugins/chartable.c
  74. plugins/fuzzy_check.c
  75. plugins/spf.c
  76. plugins/dkim_check.c
  77. libserver/rspamd_control.c
  78. lua/lua_fann.c)
  79. SET(MODULES_LIST surbl regexp chartable fuzzy_check spf dkim)
  80. SET(WORKERS_LIST normal controller fuzzy lua rspamd_proxy log_helper)
  81. IF (ENABLE_HYPERSCAN MATCHES "ON")
  82. LIST(APPEND WORKERS_LIST "hs_helper")
  83. LIST(APPEND RSPAMDSRC "hs_helper.c")
  84. ENDIF()
  85. AddModules(MODULES_LIST WORKERS_LIST)
  86. LIST(LENGTH PLUGINSSRC RSPAMD_MODULES_NUM)
  87. SET(RAGEL_DEPENDS "${CMAKE_SOURCE_DIR}/src/ragel/smtp_address.rl"
  88. "${CMAKE_SOURCE_DIR}/src/ragel/smtp_date.rl"
  89. "${CMAKE_SOURCE_DIR}/src/ragel/smtp_ip.rl"
  90. "${CMAKE_SOURCE_DIR}/src/ragel/smtp_whitespace.rl"
  91. "${CMAKE_SOURCE_DIR}/src/ragel/smtp_received.rl")
  92. RAGEL_TARGET(ragel_smtp_addr
  93. INPUTS ${CMAKE_SOURCE_DIR}/src/ragel/smtp_addr_parser.rl
  94. DEPENDS ${RAGEL_DEPENDS}
  95. COMPILE_FLAGS -T1
  96. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/smtp_addr_parser.rl.c)
  97. RAGEL_TARGET(ragel_smtp_received
  98. INPUTS ${CMAKE_SOURCE_DIR}/src/ragel/smtp_received_parser.rl
  99. DEPENDS ${RAGEL_DEPENDS}
  100. COMPILE_FLAGS -T1
  101. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/smtp_received_parser.rl.c)
  102. RAGEL_TARGET(ragel_newlines_strip
  103. INPUTS ${CMAKE_SOURCE_DIR}/src/ragel/newlines_strip.rl
  104. DEPENDS ${RAGEL_DEPENDS}
  105. COMPILE_FLAGS -G2
  106. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/newlines_strip.rl.c)
  107. ######################### LINK SECTION ###############################
  108. ADD_LIBRARY(rspamd-server STATIC
  109. ${RSPAMD_CRYPTOBOX}
  110. ${RSPAMD_UTIL}
  111. ${RSPAMD_LUA}
  112. ${RSPAMD_SERVER}
  113. ${RSPAMD_STAT}
  114. ${RSPAMD_MIME}
  115. ${CMAKE_CURRENT_BINARY_DIR}/modules.c
  116. ${PLUGINSSRC}
  117. "${RAGEL_ragel_smtp_addr_OUTPUTS}"
  118. "${RAGEL_ragel_smtp_received_OUTPUTS}"
  119. "${RAGEL_ragel_newlines_strip_OUTPUTS}")
  120. TARGET_LINK_LIBRARIES(rspamd-server rspamd-http-parser)
  121. TARGET_LINK_LIBRARIES(rspamd-server rspamd-cdb)
  122. TARGET_LINK_LIBRARIES(rspamd-server rspamd-lpeg)
  123. TARGET_LINK_LIBRARIES(rspamd-server lcbtrie)
  124. TARGET_LINK_LIBRARIES(rspamd-server rspamd-zstd)
  125. IF (ENABLE_CLANG_PLUGIN MATCHES "ON")
  126. ADD_DEPENDENCIES(rspamd-server rspamd-clang)
  127. ENDIF()
  128. ADD_DEPENDENCIES(rspamd-server rspamd_lua_preprocess)
  129. ADD_EXECUTABLE(rspamd ${RSPAMDSRC} ${CMAKE_CURRENT_BINARY_DIR}/workers.c)
  130. SET_TARGET_PROPERTIES(rspamd PROPERTIES LINKER_LANGUAGE C)
  131. SET_TARGET_PROPERTIES(rspamd PROPERTIES COMPILE_FLAGS "-DRSPAMD_MAIN")
  132. IF(NOT DEBIAN_BUILD)
  133. SET_TARGET_PROPERTIES(rspamd PROPERTIES VERSION ${RSPAMD_VERSION})
  134. ENDIF(NOT DEBIAN_BUILD)
  135. TARGET_LINK_LIBRARIES(rspamd rspamd-server)
  136. IF (ENABLE_SNOWBALL MATCHES "ON")
  137. TARGET_LINK_LIBRARIES(rspamd stemmer)
  138. ENDIF()
  139. IF(ENABLE_HIREDIS MATCHES "ON")
  140. TARGET_LINK_LIBRARIES(rspamd rspamd-hiredis)
  141. ENDIF()
  142. IF (ENABLE_FANN MATCHES "ON")
  143. TARGET_LINK_LIBRARIES(rspamd fann)
  144. ENDIF ()
  145. IF (ENABLE_HYPERSCAN MATCHES "ON")
  146. TARGET_LINK_LIBRARIES(rspamd hs)
  147. SET_TARGET_PROPERTIES(rspamd PROPERTIES LINKER_LANGUAGE CXX)
  148. ENDIF()
  149. TARGET_LINK_LIBRARIES(rspamd ${RSPAMD_REQUIRED_LIBRARIES})
  150. INSTALL(TARGETS rspamd RUNTIME DESTINATION bin)