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 18KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  1. #
  2. # Rspamd - rambler antispam system
  3. #
  4. # Cmake configuration file
  5. #
  6. PROJECT(rspamd C)
  7. SET(RSPAMD_VERSION_MAJOR 0)
  8. SET(RSPAMD_VERSION_MINOR 2)
  9. SET(RSPAMD_VERSION_PATCH 7)
  10. SET(RSPAMD_VERSION "${RSPAMD_VERSION_MAJOR}.${RSPAMD_VERSION_MINOR}.${RSPAMD_VERSION_PATCH}")
  11. SET(RSPAMD_MASTER_SITE_URL "http://cebka.pp.ru/hg/rspamd")
  12. SET(RSPAMD_USER "nobody")
  13. SET(RSPAMD_GROUP "nobody")
  14. CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)
  15. OPTION(DEBUG_MODE "Enable debug output [default: ON]" ON)
  16. OPTION(ENABLE_OPTIMIZATION "Enable optimization [default: OFF]" OFF)
  17. OPTION(ENABLE_PERL "Enable perl support [default: OFF]" OFF)
  18. OPTION(ENABLE_LUA "Enable lua support [default: ON]" ON)
  19. OPTION(SKIP_RELINK_RPATH "Skip relinking and full RPATH for the install tree" OFF)
  20. OPTION(ENABLE_REDIRECTOR "Enable redirector install [default: OFF]" OFF)
  21. OPTION(ENABLE_PROFILING "Enable profiling [default: OFF]" OFF)
  22. OPTION(ENABLE_GPERF_TOOLS "Enable google perftools [default: OFF]" OFF)
  23. # Build optimized code for following CPU (default i386)
  24. #SET(CPU_TUNE "i686")
  25. # ################################################################################
  26. # Check Includes
  27. #
  28. INCLUDE(CheckIncludeFiles)
  29. INCLUDE(CheckFunctionExists)
  30. INCLUDE(CheckSymbolExists)
  31. INCLUDE(CheckCSourceCompiles)
  32. INCLUDE(CheckLibraryExists)
  33. INCLUDE(FindPkgConfig)
  34. INCLUDE(CheckCCompilerFlag)
  35. IF(ENABLE_PERL MATCHES "ON")
  36. INCLUDE(FindPerl)
  37. IF(NOT PERL_EXECUTABLE)
  38. MESSAGE(FATAL_ERROR "Error: Perl is not found but is required")
  39. ENDIF(NOT PERL_EXECUTABLE)
  40. # Find perl libraries and cflags
  41. EXECUTE_PROCESS(COMMAND ${PERL_EXECUTABLE} -MExtUtils::Embed -e ccopts OUTPUT_VARIABLE PERL_CFLAGS)
  42. EXECUTE_PROCESS(COMMAND ${PERL_EXECUTABLE} -MExtUtils::Embed -e ldopts OUTPUT_VARIABLE PERL_LDFLAGS)
  43. STRING(REGEX REPLACE "[\r\n]" " " PERL_CFLAGS ${PERL_CFLAGS})
  44. STRING(REGEX REPLACE " +$" "" PERL_CFLAGS ${PERL_CFLAGS})
  45. STRING(REGEX REPLACE "[\r\n]" " " PERL_LDFLAGS ${PERL_LDFLAGS})
  46. STRING(REGEX REPLACE " +$" "" PERL_LDFLAGS ${PERL_LDFLAGS})
  47. # Handle DynaLoader
  48. STRING(REGEX MATCH "/[^ ]*/DynaLoader.a" PERL_DYNALOADER ${PERL_LDFLAGS})
  49. STRING(REGEX REPLACE "/[^ ]*/DynaLoader.a " "" PERL_LDFLAGS ${PERL_LDFLAGS})
  50. IF(PERL_DYNALOADER)
  51. EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy ${PERL_DYNALOADER} ${rspamd_BINARY_DIR}/compat/libdynaloader.so)
  52. LINK_DIRECTORIES(${rspamd_BINARY_DIR}/compat/)
  53. ENDIF(PERL_DYNALOADER)
  54. ELSE(ENABLE_PERL MATCHES "ON")
  55. SET(WITHOUT_PERL 1)
  56. ENDIF(ENABLE_PERL MATCHES "ON")
  57. IF(ENABLE_LUA MATCHES "ON")
  58. IF (ENABLE_PERL MATCHES "ON")
  59. MESSAGE(FATAL_ERROR "Error: Perl and Lua support cannot be turned on together")
  60. ENDIF (ENABLE_PERL MATCHES "ON")
  61. INCLUDE(FindLua51)
  62. IF(NOT LUA_FOUND)
  63. # Automatic check failed, check passed variable
  64. IF(LUA_INCLUDE_DIR)
  65. INCLUDE_DIRECTORIES("${LUA_INCLUDE_DIR}")
  66. ELSE(LUA_INCLUDE_DIR)
  67. SET(ENABLE_LUA "OFF")
  68. MESSAGE(STATUS "Lua not found, lua support disabled")
  69. ENDIF(LUA_INCLUDE_DIR)
  70. ELSE(NOT LUA_FOUND)
  71. INCLUDE_DIRECTORIES("${LUA_INCLUDE_DIR}")
  72. ENDIF(NOT LUA_FOUND)
  73. SET(WITH_LUA 1)
  74. ENDIF(ENABLE_LUA MATCHES "ON")
  75. # Lex and yacc
  76. FIND_PROGRAM(LEX_EXECUTABLE lex)
  77. FIND_PROGRAM(YACC_EXECUTABLE yacc)
  78. IF(NOT LEX_EXECUTABLE OR NOT YACC_EXECUTABLE)
  79. MESSAGE(FATAL_ERROR "Error: yacc and lex are required for build")
  80. ENDIF(NOT LEX_EXECUTABLE OR NOT YACC_EXECUTABLE)
  81. pkg_check_modules(GLIB2 REQUIRED glib-2.0>=2.16)
  82. pkg_check_modules(GMIME2 gmime-2.0)
  83. # Try to link with gmime24
  84. IF(NOT GMIME2_FOUND)
  85. pkg_check_modules(GMIME2 REQUIRED gmime-2.4)
  86. SET(GMIME24 "yes")
  87. ENDIF(NOT GMIME2_FOUND)
  88. IF(NOT GLIB2_FOUND OR NOT GMIME2_FOUND)
  89. MESSAGE(FATAL_ERROR "Error: gmime2 and glib2 are required for rspamd")
  90. ENDIF(NOT GLIB2_FOUND OR NOT GMIME2_FOUND)
  91. # Make from ; separated list normal space separated list
  92. # Glib2
  93. FOREACH(arg ${GLIB2_CFLAGS})
  94. SET(GLIB_CFLAGS "${GLIB_CFLAGS} ${arg}")
  95. ENDFOREACH(arg ${GLIB2_CFLAGS})
  96. FOREACH(arg ${GLIB2_LDFLAGS})
  97. SET(GLIB_LDFLAGS "${GLIB_LDFLAGS} ${arg}")
  98. ENDFOREACH(arg ${GLIB2_LDFLAGS})
  99. # Gmime2
  100. FOREACH(arg ${GMIME2_CFLAGS})
  101. SET(GMIME_CFLAGS "${GMIME_CFLAGS} ${arg}")
  102. ENDFOREACH(arg ${GMIME2_CFLAGS})
  103. FOREACH(arg ${GMIME2_LDFLAGS})
  104. SET(GMIME_LDFLAGS "${GMIME_LDFLAGS} ${arg}")
  105. ENDFOREACH(arg ${GMIME2_LDFLAGS})
  106. INCLUDE_DIRECTORIES(${GLIB2_INCLUDE_DIRS})
  107. INCLUDE_DIRECTORIES(${GMIME2_INCLUDE_DIRS})
  108. LINK_DIRECTORIES(${GLIB2_LIBRARY_DIRS})
  109. LINK_DIRECTORIES(${GMIME2_LIBRARY_DIRS})
  110. SET(CMAKE_REQUIRED_LIBRARIES m)
  111. SET(CMAKE_REQUIRED_INCLUDES sys/mman.h stdlib.h stdio.h unistd.h time.h sched.h)
  112. FIND_LIBRARY(LIBEVENT_LIBRARY NAMES event PATHS /lib
  113. /opt/lib
  114. /usr/lib
  115. /usr/local/lib
  116. DOC "Path where the libevent library can be found")
  117. IF(NOT LIBEVENT_LIBRARY)
  118. MESSAGE(FATAL_ERROR "libevent is required for building rspamd")
  119. ENDIF(NOT LIBEVENT_LIBRARY)
  120. IF(ENABLE_PROFILING MATCHES "ON")
  121. SET(WITH_PROFILER 1)
  122. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
  123. SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg")
  124. ENDIF(ENABLE_PROFILING MATCHES "ON")
  125. IF(ENABLE_GPERF_TOOLS MATCHES "ON")
  126. FIND_PATH(GPERF_INCLUDE google/profiler.h PATHS /opt/include
  127. /usr/include
  128. /usr/local/include
  129. DOC "Path where google perftools includes can be found")
  130. INCLUDE_DIRECTORIES("${GPERF_INCLUDE}")
  131. FIND_LIBRARY(GPERF_LIBRARY NAMES profiler PATHS /lib
  132. /opt/lib
  133. /usr/lib
  134. /usr/local/lib
  135. DOC "Path where the gperf library can be found")
  136. IF(NOT GPERF_LIBRARY)
  137. MESSAGE(FATAL_ERROR "gperf tools support is enabled but not found in system")
  138. ENDIF(NOT GPERF_LIBRARY)
  139. GET_FILENAME_COMPONENT(GPERF_PATH "${GPERF_LIBRARY}" PATH)
  140. LINK_DIRECTORIES("${GPERF_PATH}")
  141. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer")
  142. SET(WITH_GPERF_TOOLS 1)
  143. ENDIF(ENABLE_GPERF_TOOLS MATCHES "ON")
  144. FIND_PATH(LIBEVENT_INCLUDE event.h PATHS /opt/include
  145. /usr/include
  146. /usr/local/include
  147. DOC "Path where the libevent header files can be found")
  148. GET_FILENAME_COMPONENT(LIBEVENT_PATH "${LIBEVENT_LIBRARY}" PATH)
  149. INCLUDE_DIRECTORIES("${LIBEVENT_INCLUDE}")
  150. LINK_DIRECTORIES("${LIBEVENT_PATH}")
  151. FIND_LIBRARY(LIBUTIL_LIBRARY NAMES util PATHS /lib
  152. /opt/lib
  153. /usr/lib
  154. /usr/local/lib
  155. DOC "Path where the libutil library can be found")
  156. IF(LIBUTIL_LIBRARY)
  157. LIST(APPEND CMAKE_REQUIRED_LIBRARIES util)
  158. CHECK_FUNCTION_EXISTS(pidfile_open HAVE_PIDFILE)
  159. FIND_FILE(HAVE_LIBUTIL_H NAMES libutil.h PATHS /usr/include
  160. /opt/include
  161. /usr/local/include
  162. DOC "Path to libutil header")
  163. ENDIF(LIBUTIL_LIBRARY)
  164. CHECK_INCLUDE_FILES(sys/types.h HAVE_SYS_TYPES_H)
  165. CHECK_INCLUDE_FILES(sys/time.h HAVE_SYS_TIME_H)
  166. CHECK_INCLUDE_FILES(sys/uio.h HAVE_SYS_UIO_H)
  167. CHECK_INCLUDE_FILES(fcntl.h HAVE_FCNTL_H)
  168. CHECK_INCLUDE_FILES(math.h HAVE_MATH_H)
  169. CHECK_INCLUDE_FILES(stdio.h HAVE_STDIO_H)
  170. CHECK_INCLUDE_FILES(stdlib.h HAVE_STDLIB_H)
  171. CHECK_INCLUDE_FILES(string.h HAVE_STRING_H)
  172. CHECK_INCLUDE_FILES(strings.h HAVE_STRINGS_H)
  173. CHECK_INCLUDE_FILES(time.h HAVE_TIME_H)
  174. CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H)
  175. CHECK_INCLUDE_FILES(sysexits.h HAVE_SYSEXITS_H)
  176. CHECK_INCLUDE_FILES(stdint.h HAVE_STDINT_H)
  177. CHECK_INCLUDE_FILES(inttypes.h HAVE_INTTYPES_H)
  178. CHECK_INCLUDE_FILES(endian.h HAVE_ENDIAN_H)
  179. CHECK_INCLUDE_FILES(sys/endian.h HAVE_SYS_ENDIAN_H)
  180. CHECK_INCLUDE_FILES(machine/endian.h HAVE_MACHINE_ENDIAN_H)
  181. CHECK_INCLUDE_FILES(sys/queue.h HAVE_SYS_QUEUE_H)
  182. CHECK_INCLUDE_FILES(sys/socket.h HAVE_SYS_SOCKET_H)
  183. CHECK_INCLUDE_FILES(sys/mman.h HAVE_SYS_MMAN_H)
  184. CHECK_INCLUDE_FILES(sys/un.h HAVE_SYS_UN_H)
  185. CHECK_INCLUDE_FILES(sys/stat.h HAVE_SYS_STAT_H)
  186. CHECK_INCLUDE_FILES(sys/wait.h HAVE_SYS_WAIT_H)
  187. CHECK_INCLUDE_FILES(sys/param.h HAVE_SYS_PARAM_H)
  188. CHECK_INCLUDE_FILES(sys/cdefs.h HAVE_SYS_CDEFS_H)
  189. CHECK_INCLUDE_FILES(sys/file.h HAVE_SYS_FILE_H)
  190. CHECK_INCLUDE_FILES(sys/resource.h HAVE_SYS_RESOURCE_H)
  191. CHECK_INCLUDE_FILES(netinet/in.h HAVE_NETINET_IN_H)
  192. CHECK_INCLUDE_FILES(arpa/inet.h HAVE_ARPA_INET_H)
  193. CHECK_INCLUDE_FILES(netdb.h HAVE_NETDB_H)
  194. CHECK_INCLUDE_FILES(syslog.h HAVE_SYSLOG_H)
  195. CHECK_INCLUDE_FILES(locale.h HAVE_LOCALE_H)
  196. CHECK_INCLUDE_FILES(libgen.h HAVE_LIBGEN_H)
  197. CHECK_INCLUDE_FILES(pwd.h HAVE_PWD_H)
  198. CHECK_INCLUDE_FILES(grp.h HAVE_GRP_H)
  199. CHECK_INCLUDE_FILES(glob.h HAVE_GLOB_H)
  200. IF(HAVE_SYS_WAIT_H)
  201. LIST(APPEND CMAKE_REQUIRED_INCLUDES sys/wait.h)
  202. ENDIF(HAVE_SYS_WAIT_H)
  203. CHECK_FUNCTION_EXISTS(setproctitle HAVE_SETPROCTITLE)
  204. CHECK_FUNCTION_EXISTS(getpagesize HAVE_GETPAGESIZE)
  205. CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
  206. CHECK_FUNCTION_EXISTS(vfork HAVE_VFORK)
  207. CHECK_FUNCTION_EXISTS(wait4 HAVE_WAIT4)
  208. CHECK_FUNCTION_EXISTS(waitpid HAVE_WAITPID)
  209. CHECK_SYMBOL_EXISTS(PATH_MAX limits.h HAVE_PATH_MAX)
  210. CHECK_SYMBOL_EXISTS(MAXPATHLEN sys/param.h HAVE_MAXPATHLEN)
  211. CHECK_SYMBOL_EXISTS(MAP_SHARED sys/mman.h HAVE_MMAP_SHARED)
  212. CHECK_SYMBOL_EXISTS(MAP_ANON sys/mman.h HAVE_MMAP_ANON)
  213. CHECK_SYMBOL_EXISTS(_SC_NPROCESSORS_ONLN unistd.h HAVE_SC_NPROCESSORS_ONLN)
  214. CHECK_SYMBOL_EXISTS(CLOCK_PROCESS_CPUTIME_ID time.h HAVE_CLOCK_PROCESS_CPUTIME_ID)
  215. CHECK_SYMBOL_EXISTS(CLOCK_VIRTUAL time.h HAVE_CLOCK_VIRTUAL)
  216. CHECK_C_SOURCE_COMPILES ("#include <sys/types.h>
  217. int main (int argc, char **argv) {
  218. __asm __volatile(\"pause\");
  219. return 0;
  220. }" HAVE_ASM_PAUSE)
  221. IF(NOT HAVE_COMPATIBLE_QUEUE_H)
  222. INCLUDE_DIRECTORIES(compat)
  223. ENDIF(NOT HAVE_COMPATIBLE_QUEUE_H)
  224. SET(CONTRIBSRC "")
  225. IF(ENABLE_OPTIMIZATION MATCHES "ON")
  226. SET(CMAKE_C_OPT_FLAGS "-O3")
  227. ELSE(ENABLE_OPTIMIZATION MATCHES "ON")
  228. SET(CMAKE_C_OPT_FLAGS "-O0")
  229. ENDIF(ENABLE_OPTIMIZATION MATCHES "ON")
  230. # Process with warn flags
  231. CHECK_C_COMPILER_FLAG(-Wall SUPPORT_WALL)
  232. CHECK_C_COMPILER_FLAG(-Wpointer-arith SUPPORT_WPOINTER)
  233. CHECK_C_COMPILER_FLAG(-Wno-unused-parameter SUPPORT_WPARAM)
  234. CHECK_C_COMPILER_FLAG(-Wno-unused-function SUPPORT_WFUNCTION)
  235. CHECK_C_COMPILER_FLAG(-Wno-sign-compare SUPPORT_WSIGNCOMPARE)
  236. CHECK_C_COMPILER_FLAG(-Wunused-variable SUPPORT_WUNUSED_VAR)
  237. CHECK_C_COMPILER_FLAG(-Wno-declaration-after-statement SUPPORT_WDECL)
  238. CHECK_C_COMPILER_FLAG(-Wno-pointer-sign SUPPORT_WPOINTER_SIGN)
  239. SET(CMAKE_C_WARN_FLAGS "-W")
  240. IF(SUPPORT_WALL)
  241. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wall")
  242. ENDIF(SUPPORT_WALL)
  243. IF(SUPPORT_WPOINTER)
  244. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wpointer-arith")
  245. ENDIF(SUPPORT_WPOINTER)
  246. IF(SUPPORT_WPARAM)
  247. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-unused-parameter")
  248. ENDIF(SUPPORT_WPARAM)
  249. IF(SUPPORT_WFUNCTION)
  250. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-unused-function")
  251. ENDIF(SUPPORT_WFUNCTION)
  252. IF(SUPPORT_WSIGNCOMPARE)
  253. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-sign-compare ")
  254. ENDIF(SUPPORT_WSIGNCOMPARE)
  255. IF(SUPPORT_WUNUSED_VAR)
  256. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wunused-variable")
  257. ENDIF(SUPPORT_WUNUSED_VAR)
  258. IF(SUPPORT_WDECL)
  259. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-declaration-after-statement")
  260. ENDIF(SUPPORT_WDECL)
  261. IF(SUPPORT_WPOINTER_SIGN)
  262. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-pointer-sign")
  263. ENDIF(SUPPORT_WPOINTER_SIGN)
  264. SET(CMAKE_C_FLAGS "${CMAKE_C_OPT_FLAGS} ${CMAKE_C_FLAGS} ${CMAKE_C_WARN_FLAGS}")
  265. # Platform specific routines
  266. IF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
  267. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_BSD_SOURCE -DFREEBSD")
  268. CONFIGURE_FILE(freebsd/rspamd.sh.in freebsd/rspamd.sh @ONLY)
  269. IF(ENABLE_REDIRECTOR MATCHES "ON")
  270. CONFIGURE_FILE(freebsd/redirector.sh.in freebsd/redirector.sh @ONLY)
  271. ENDIF(ENABLE_REDIRECTOR MATCHES "ON")
  272. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
  273. IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  274. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -DLINUX")
  275. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  276. IF(ENABLE_REDIRECTOR MATCHES "ON")
  277. CONFIGURE_FILE(utils/redirector.pl.in utils/redirector.pl @ONLY)
  278. ENDIF(ENABLE_REDIRECTOR MATCHES "ON")
  279. IF(DEBUG_MODE MATCHES "ON")
  280. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
  281. ENDIF(DEBUG_MODE MATCHES "ON")
  282. SET(RSPAMDSRC src/modules.c
  283. src/hash.c
  284. src/worker.c
  285. src/util.c
  286. src/url.c
  287. src/upstream.c
  288. src/statfile.c
  289. src/protocol.c
  290. src/message.c
  291. src/fuzzy.c
  292. src/expressions.c
  293. src/mem_pool.c
  294. src/memcached.c
  295. src/main.c
  296. src/fstring.c
  297. src/filter.c
  298. src/controller.c
  299. src/cfg_utils.c
  300. src/buffer.c
  301. src/html.c
  302. src/lmtp.c
  303. src/lmtp_proto.c
  304. src/radix.c
  305. src/view.c
  306. src/map.c
  307. src/bloom.c
  308. src/symbols_cache.c
  309. src/fuzzy_storage.c)
  310. IF(ENABLE_PERL MATCHES "ON")
  311. LIST(APPEND RSPAMDSRC src/perl.c)
  312. ENDIF(ENABLE_PERL MATCHES "ON")
  313. IF(ENABLE_LUA MATCHES "ON")
  314. ADD_SUBDIRECTORY(src/lua)
  315. ENDIF(ENABLE_LUA MATCHES "ON")
  316. SET(TOKENIZERSSRC src/tokenizers/tokenizers.c
  317. src/tokenizers/osb.c)
  318. SET(CLASSIFIERSSRC src/classifiers/classifiers.c
  319. src/classifiers/winnow.c)
  320. SET(PLUGINSSRC src/plugins/surbl.c
  321. src/plugins/regexp.c
  322. src/plugins/chartable.c
  323. src/plugins/emails.c
  324. src/plugins/fuzzy_check.c)
  325. SET(TESTSRC test/rspamd_expression_test.c
  326. test/rspamd_memcached_test.c
  327. test/rspamd_mem_pool_test.c
  328. test/rspamd_statfile_test.c
  329. test/rspamd_fuzzy_test.c
  330. test/rspamd_test_suite.c
  331. test/rspamd_url_test.c)
  332. SET(TESTDEPENDS src/mem_pool.c
  333. src/hash.c
  334. src/url.c
  335. src/util.c
  336. src/radix.c
  337. src/fuzzy.c
  338. src/memcached.c
  339. src/message.c
  340. src/html.c
  341. src/expressions.c
  342. src/statfile.c)
  343. SET(UTILSSRC utils/url_extracter.c)
  344. SET(EXPRSRC utils/expression_parser.c)
  345. SET(UTILSDEPENDS src/mem_pool.c
  346. src/hash.c
  347. src/url.c
  348. src/fuzzy.c
  349. src/expressions.c
  350. src/message.c
  351. src/html.c
  352. src/util.c
  353. src/radix.c)
  354. LIST(LENGTH PLUGINSSRC RSPAMD_MODULES_NUM)
  355. SET(YACC_SRC src/cfg_file.y)
  356. SET(LEX_SRC src/cfg_file.l)
  357. STRING(REPLACE "_file.y" "_yacc.c" YACC_OUTPUT ${YACC_SRC})
  358. STRING(REPLACE "_file.l" "_lex.c" LEX_OUTPUT ${LEX_SRC})
  359. ADD_CUSTOM_COMMAND(OUTPUT ${LEX_OUTPUT}
  360. COMMAND ${LEX_EXECUTABLE} -o${LEX_OUTPUT} ${LEX_SRC})
  361. ADD_CUSTOM_COMMAND(OUTPUT ${YACC_OUTPUT}
  362. COMMAND ${YACC_EXECUTABLE} -d -o ${YACC_OUTPUT} ${YACC_SRC})
  363. ADD_CUSTOM_COMMAND(OUTPUT src/modules.c
  364. COMMAND ../utils/gen-modules.sh ${PLUGINSSRC}
  365. WORKING_DIRECTORY src)
  366. IF(ENABLE_PERL MATCHES "ON")
  367. ADD_CUSTOM_COMMAND(OUTPUT perl/Makefile
  368. COMMAND ${PERL_EXECUTABLE} ./Makefile.PL
  369. WORKING_DIRECTORY perl)
  370. ADD_CUSTOM_TARGET(perlxs
  371. COMMAND make
  372. DEPENDS perl/Makefile
  373. WORKING_DIRECTORY perl
  374. VERBATIM)
  375. CONFIGURE_FILE(perl/Makefile.PL.in perl/Makefile.PL)
  376. ENDIF(ENABLE_PERL MATCHES "ON")
  377. CONFIGURE_FILE(config.h.in src/config.h)
  378. CONFIGURE_FILE(rspamc.pl.in rspamc.pl @ONLY)
  379. CONFIGURE_FILE(rspamd.conf.sample conf/rspamd.conf.sample @ONLY)
  380. ADD_EXECUTABLE(rspamd ${RSPAMDSRC} ${CONTRIBSRC} ${TOKENIZERSSRC}
  381. ${CLASSIFIERSSRC} ${PLUGINSSRC} ${YACC_OUTPUT}
  382. ${LEX_OUTPUT})
  383. SET_TARGET_PROPERTIES(rspamd PROPERTIES LINKER_LANGUAGE C)
  384. SET_TARGET_PROPERTIES(rspamd PROPERTIES COMPILE_FLAGS "-DRSPAMD_MAIN")
  385. SET_TARGET_PROPERTIES(rspamd PROPERTIES VERSION ${RSPAMD_VERSION})
  386. IF(ENABLE_PERL MATCHES "ON")
  387. SET_TARGET_PROPERTIES(rspamd PROPERTIES COMPILE_FLAGS ${PERL_CFLAGS}
  388. LINK_FLAGS ${PERL_LDFLAGS})
  389. IF(PERL_DYNALOADER)
  390. TARGET_LINK_LIBRARIES(rspamd dynaloader)
  391. ENDIF(PERL_DYNALOADER)
  392. ADD_DEPENDENCIES(rspamd perlxs ${LEX_OUTPUT} ${YACC_OUTPUT})
  393. ENDIF(ENABLE_PERL MATCHES "ON")
  394. IF(ENABLE_LUA MATCHES "ON")
  395. TARGET_LINK_LIBRARIES(rspamd "${LUA_LIBRARY}")
  396. TARGET_LINK_LIBRARIES(rspamd rspamd_lua)
  397. ENDIF(ENABLE_LUA MATCHES "ON")
  398. TARGET_LINK_LIBRARIES(rspamd m)
  399. IF(LIBUTIL_LIBRARY)
  400. TARGET_LINK_LIBRARIES(rspamd util)
  401. ENDIF(LIBUTIL_LIBRARY)
  402. TARGET_LINK_LIBRARIES(rspamd event)
  403. TARGET_LINK_LIBRARIES(rspamd ${GLIB2_LIBRARIES})
  404. TARGET_LINK_LIBRARIES(rspamd ${GMIME2_LIBRARIES})
  405. IF(ENABLE_GPERF_TOOLS MATCHES "ON")
  406. TARGET_LINK_LIBRARIES(rspamd profiler)
  407. ENDIF(ENABLE_GPERF_TOOLS MATCHES "ON")
  408. ADD_EXECUTABLE(test/rspamd-test ${TESTDEPENDS} ${CONTRIBSRC} ${TESTSRC})
  409. SET_TARGET_PROPERTIES(test/rspamd-test PROPERTIES LINKER_LANGUAGE C)
  410. TARGET_LINK_LIBRARIES(test/rspamd-test m)
  411. IF(LIBUTIL_LIBRARY)
  412. TARGET_LINK_LIBRARIES(test/rspamd-test util)
  413. ENDIF(LIBUTIL_LIBRARY)
  414. TARGET_LINK_LIBRARIES(test/rspamd-test event)
  415. TARGET_LINK_LIBRARIES(test/rspamd-test ${GLIB2_LIBRARIES})
  416. TARGET_LINK_LIBRARIES(test/rspamd-test ${GMIME2_LIBRARIES})
  417. ADD_EXECUTABLE(utils/url-extracter ${UTILSDEPENDS} ${CONTRIBSRC} ${UTILSSRC})
  418. SET_TARGET_PROPERTIES(utils/url-extracter PROPERTIES LINKER_LANGUAGE C)
  419. TARGET_LINK_LIBRARIES(utils/url-extracter m)
  420. IF(LIBUTIL_LIBRARY)
  421. TARGET_LINK_LIBRARIES(utils/url-extracter util)
  422. ENDIF(LIBUTIL_LIBRARY)
  423. TARGET_LINK_LIBRARIES(utils/url-extracter ${GLIB2_LIBRARIES})
  424. TARGET_LINK_LIBRARIES(utils/url-extracter ${GMIME2_LIBRARIES})
  425. ADD_EXECUTABLE(utils/expression-parser ${UTILSDEPENDS} ${CONTRIBSRC} ${EXPRSRC})
  426. SET_TARGET_PROPERTIES(utils/expression-parser PROPERTIES LINKER_LANGUAGE C)
  427. TARGET_LINK_LIBRARIES(utils/expression-parser m)
  428. IF(LIBUTIL_LIBRARY)
  429. TARGET_LINK_LIBRARIES(utils/expression-parser util)
  430. ENDIF(LIBUTIL_LIBRARY)
  431. TARGET_LINK_LIBRARIES(utils/expression-parser ${GLIB2_LIBRARIES})
  432. TARGET_LINK_LIBRARIES(utils/expression-parser ${GMIME2_LIBRARIES})
  433. INSTALL(PROGRAMS rspamd-${RSPAMD_VERSION} DESTINATION bin RENAME rspamd)
  434. INSTALL(PROGRAMS rspamc.pl DESTINATION bin RENAME rspamc)
  435. INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_INSTALL_PREFIX}/etc/rspamd)")
  436. INSTALL(DIRECTORY conf/ DESTINATION etc/rspamd)
  437. IF(ENABLE_PERL MATCHES "ON")
  438. INSTALL(CODE "EXECUTE_PROCESS(COMMAND make install WORKING_DIRECTORY perl)")
  439. ENDIF(ENABLE_PERL MATCHES "ON")
  440. IF(ENABLE_REDIRECTOR MATCHES "ON")
  441. INSTALL(PROGRAMS utils/redirector.pl DESTINATION bin RENAME rspamd-redirector)
  442. ENDIF(ENABLE_REDIRECTOR MATCHES "ON")
  443. IF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
  444. INSTALL(PROGRAMS freebsd/rspamd.sh DESTINATION etc/rc.d)
  445. IF(ENABLE_REDIRECTOR MATCHES "ON")
  446. INSTALL(PROGRAMS freebsd/redirector.sh DESTINATION etc/rc.d)
  447. ENDIF(ENABLE_REDIRECTOR MATCHES "ON")
  448. INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory /var/run/rspamd/)")
  449. INSTALL(CODE "EXECUTE_PROCESS(COMMAND chown ${RSPAMD_USER}:${RSPAMD_GROUP} /var/run/rspamd/)")
  450. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
  451. # CPack section
  452. SET(CPACK_DEBIAN_PACKAGE_DEPENDS libevent1 libgmime-2.0-2a)
  453. SET(CPACK_PACKAGE_CONTACT "vsevolod@highsecure.ru")
  454. SET(CPACK_PACKAGE_NAME rspamd)
  455. SET(CPACK_SOURCE_IGNORE_FILES "\\\\.swp$" "/\\\\.hg/")
  456. SET(CPACK_PACKAGE_VERSION_MAJOR ${RSPAMD_VERSION_MAJOR})
  457. SET(CPACK_PACKAGE_VERSION_MINOR ${RSPAMD_VERSION_MINOR})
  458. SET(CPACK_PACKAGE_VERSION_PATCH ${RSPAMD_VERSION_PATCH})
  459. INCLUDE(CPack)