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.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. MACRO(_AddModulesForced MLIST WLIST)
  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 \"config.h\"\n")
  8. # Handle even old cmake
  9. LIST(LENGTH ${MLIST} MLIST_COUNT)
  10. LIST(LENGTH ${WLIST} WLIST_COUNT)
  11. MATH(EXPR MLIST_MAX ${MLIST_COUNT}-1)
  12. MATH(EXPR WLIST_MAX ${WLIST_COUNT}-1)
  13. FOREACH(MOD_IDX RANGE ${MLIST_MAX})
  14. LIST(GET ${MLIST} ${MOD_IDX} MOD)
  15. FILE(APPEND "${MODULES_C}" "extern module_t ${MOD}_module;\n")
  16. ENDFOREACH(MOD_IDX RANGE ${MLIST_MAX})
  17. FILE(APPEND "${MODULES_C}" "\n\nmodule_t *modules[] = {\n")
  18. FOREACH(MOD_IDX RANGE ${MLIST_MAX})
  19. LIST(GET ${MLIST} ${MOD_IDX} MOD)
  20. FILE(APPEND "${MODULES_C}" "&${MOD}_module,\n")
  21. ENDFOREACH(MOD_IDX RANGE ${MLIST_MAX})
  22. FILE(APPEND "${MODULES_C}" "NULL\n};\n")
  23. FOREACH(MOD_IDX RANGE ${WLIST_MAX})
  24. LIST(GET ${WLIST} ${MOD_IDX} WRK)
  25. FILE(APPEND "${MODULES_C}" "extern worker_t ${WRK}_worker;\n")
  26. ENDFOREACH(MOD_IDX RANGE ${WLIST_MAX})
  27. FILE(APPEND "${MODULES_C}" "\n\nworker_t *workers[] = {\n")
  28. FOREACH(MOD_IDX RANGE ${WLIST_MAX})
  29. LIST(GET ${WLIST} ${MOD_IDX} WRK)
  30. FILE(APPEND "${MODULES_C}" "&${WRK}_worker,\n")
  31. ENDFOREACH(MOD_IDX RANGE ${WLIST_MAX})
  32. FILE(APPEND "${MODULES_C}" "NULL\n};\n")
  33. ENDMACRO(_AddModulesForced MLIST WLIST)
  34. MACRO(AddModules MLIST WLIST)
  35. _AddModulesForced(${MLIST} ${WLIST})
  36. #IF(NOT EXISTS "modules.c")
  37. # _AddModulesForced(${MLIST} ${WLIST})
  38. #ELSE(NOT EXISTS "modules.c")
  39. # FILE(STRINGS "modules.c" FILE_ID_RAW REGEX "^/.*[a-zA-Z0-9]+.*/$")
  40. # STRING(REGEX MATCH "[a-zA-Z0-9]+" FILE_ID "${FILE_ID_RAW}")
  41. # IF(NOT FILE_ID STREQUAL MODULES_ID)
  42. # MESSAGE("Regenerate modules info")
  43. # _AddModulesForced(${MLIST} ${WLIST})
  44. # ENDIF(NOT FILE_ID STREQUAL MODULES_ID)
  45. #ENDIF(NOT EXISTS "modules.c")
  46. ENDMACRO(AddModules MLIST WLIST)
  47. # Contrib software
  48. ADD_SUBDIRECTORY(cdb)
  49. ADD_SUBDIRECTORY(ucl/cmake)
  50. SET(SLAVE_BUILD 1)
  51. ADD_SUBDIRECTORY(rdns)
  52. UNSET(SLAVE_BUILD)
  53. # Rspamd core components
  54. ADD_SUBDIRECTORY(lua)
  55. ADD_SUBDIRECTORY(libutil)
  56. ADD_SUBDIRECTORY(libserver)
  57. ADD_SUBDIRECTORY(libmime)
  58. ADD_SUBDIRECTORY(client)
  59. SET(RSPAMDSRC ${CMAKE_CURRENT_BINARY_DIR}/modules.c
  60. controller.c
  61. fuzzy_storage.c
  62. lua_worker.c
  63. main.c
  64. smtp_proxy.c
  65. worker.c)
  66. SET(PLUGINSSRC plugins/surbl.c
  67. plugins/regexp.c
  68. plugins/chartable.c
  69. plugins/fuzzy_check.c
  70. plugins/spf.c
  71. plugins/dkim_check.c)
  72. SET(MODULES_LIST surbl regexp chartable fuzzy_check spf dkim)
  73. SET(WORKERS_LIST normal controller smtp_proxy fuzzy lua)
  74. AddModules(MODULES_LIST WORKERS_LIST)
  75. LIST(LENGTH PLUGINSSRC RSPAMD_MODULES_NUM)
  76. ######################### LINK SECTION ###############################
  77. ADD_EXECUTABLE(rspamd ${RSPAMDSRC} ${PLUGINSSRC})
  78. SET_TARGET_PROPERTIES(rspamd PROPERTIES LINKER_LANGUAGE C)
  79. SET_TARGET_PROPERTIES(rspamd PROPERTIES COMPILE_FLAGS "-DRSPAMD_MAIN")
  80. IF(NOT DEBIAN_BUILD)
  81. SET_TARGET_PROPERTIES(rspamd PROPERTIES VERSION ${RSPAMD_VERSION})
  82. ENDIF(NOT DEBIAN_BUILD)
  83. TARGET_LINK_LIBRARIES(rspamd rspamd-mime)
  84. TARGET_LINK_LIBRARIES(rspamd rspamd-server)
  85. TARGET_LINK_LIBRARIES(rspamd rspamd-util)
  86. TARGET_LINK_LIBRARIES(rspamd rspamd-lua)
  87. TARGET_LINK_LIBRARIES(rspamd stemmer)
  88. TARGET_LINK_LIBRARIES(rspamd event)
  89. IF(HAVE_LIBEVENT2)
  90. TARGET_LINK_LIBRARIES(rspamd event_pthreads)
  91. ENDIF(HAVE_LIBEVENT2)
  92. IF(WITH_DB)
  93. TARGET_LINK_LIBRARIES(rspamd db)
  94. ENDIF(WITH_DB)
  95. IF(OPENSSL_FOUND)
  96. TARGET_LINK_LIBRARIES(rspamd ${OPENSSL_LIBRARIES})
  97. ENDIF(OPENSSL_FOUND)
  98. IF(HAVE_FETCH_H)
  99. TARGET_LINK_LIBRARIES(rspamd fetch)
  100. ENDIF(HAVE_FETCH_H)
  101. TARGET_LINK_LIBRARIES(rspamd ${RSPAMD_REQUIRED_LIBRARIES})
  102. IF(ENABLE_LUAJIT MATCHES "ON")
  103. TARGET_LINK_LIBRARIES(rspamd "${LUAJIT_LIBRARY}")
  104. ELSE(ENABLE_LUAJIT MATCHES "ON")
  105. TARGET_LINK_LIBRARIES(rspamd "${LUA_LIBRARY}")
  106. ENDIF(ENABLE_LUAJIT MATCHES "ON")
  107. IF(ENABLE_GPERF_TOOLS MATCHES "ON")
  108. TARGET_LINK_LIBRARIES(rspamd profiler)
  109. ENDIF(ENABLE_GPERF_TOOLS MATCHES "ON")
  110. TARGET_LINK_LIBRARIES(rspamd hiredis)
  111. IF(GLIB_COMPAT)
  112. TARGET_LINK_LIBRARIES(rspamd glibadditions)
  113. ENDIF(GLIB_COMPAT)
  114. INSTALL(TARGETS rspamd RUNTIME DESTINATION bin)