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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839
  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 4)
  9. SET(RSPAMD_VERSION_PATCH 2)
  10. SET(RSPAMD_VERSION "${RSPAMD_VERSION_MAJOR}.${RSPAMD_VERSION_MINOR}.${RSPAMD_VERSION_PATCH}")
  11. SET(RSPAMD_MASTER_SITE_URL "http://bitbucket.org/vstakhov/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(SKIP_RELINK_RPATH "Skip relinking and full RPATH for the install tree" OFF)
  18. OPTION(ENABLE_REDIRECTOR "Enable redirector install [default: OFF]" OFF)
  19. OPTION(ENABLE_PROFILING "Enable profiling [default: OFF]" OFF)
  20. OPTION(ENABLE_GPERF_TOOLS "Enable google perftools [default: OFF]" OFF)
  21. OPTION(ENABLE_STATIC "Enable static compiling [default: OFF]" OFF)
  22. OPTION(ENABLE_LUAJIT "Link with libluajit [default: OFF]" OFF)
  23. OPTION(FORCE_GMIME24 "Link with gmime2.4 [default: OFF]" OFF)
  24. # Build optimized code for following CPU (default i386)
  25. #SET(CPU_TUNE "i686")
  26. ############################# CONFIG SECTION #############################################
  27. INCLUDE(CheckIncludeFiles)
  28. INCLUDE(CheckFunctionExists)
  29. INCLUDE(CheckSymbolExists)
  30. INCLUDE(CheckCSourceCompiles)
  31. INCLUDE(CheckLibraryExists)
  32. INCLUDE(FindPkgConfig)
  33. INCLUDE(CheckCCompilerFlag)
  34. INCLUDE(FindPerl)
  35. # Initial set
  36. SET(CMAKE_REQUIRED_LIBRARIES m)
  37. IF(CMAKE_INSTALL_PREFIX)
  38. SET(PREFIX ${CMAKE_INSTALL_PREFIX})
  39. ENDIF(CMAKE_INSTALL_PREFIX)
  40. # Platform specific configuration
  41. IF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
  42. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_BSD_SOURCE -DFREEBSD")
  43. CONFIGURE_FILE(freebsd/rspamd.sh.in freebsd/rspamd @ONLY)
  44. IF(ENABLE_REDIRECTOR MATCHES "ON")
  45. CONFIGURE_FILE(freebsd/redirector.sh.in freebsd/redirector @ONLY)
  46. ENDIF(ENABLE_REDIRECTOR MATCHES "ON")
  47. IF(CMAKE_INSTALL_PREFIX)
  48. IF(NOT ETC_PREFIX)
  49. SET(ETC_PREFIX "${CMAKE_INSTALL_PREFIX}/etc")
  50. ENDIF(NOT ETC_PREFIX)
  51. IF(NOT MAN_PREFIX)
  52. SET(MAN_PREFIX "${CMAKE_INSTALL_PREFIX}/man")
  53. ENDIF(NOT MAN_PREFIX)
  54. IF(NOT LOCALSTATES_PREFIX)
  55. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  56. ENDIF(NOT LOCALSTATES_PREFIX)
  57. SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
  58. ELSE(CMAKE_INSTALL_PREFIX)
  59. IF(NOT ETC_PREFIX)
  60. SET(ETC_PREFIX /usr/local/etc)
  61. ENDIF(NOT ETC_PREFIX)
  62. IF(NOT MAN_PREFIX)
  63. SET(MAN_PREFIX /usr/local/man)
  64. ENDIF(NOT MAN_PREFIX)
  65. IF(NOT LOCALSTATES_PREFIX)
  66. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  67. ENDIF(NOT LOCALSTATES_PREFIX)
  68. IF(NOT PREFIX)
  69. SET(PREFIX /usr/local)
  70. ENDIF(NOT PREFIX)
  71. ENDIF(CMAKE_INSTALL_PREFIX)
  72. FIND_LIBRARY(LIBINTL_LIBRARY NAMES intl PATHS /lib
  73. /opt/lib
  74. /usr/lib
  75. /usr/local/lib
  76. DOC "Path where the libintl library can be found")
  77. LIST(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBINTL_LIBRARY})
  78. MESSAGE(STATUS "Configuring for FreeBSD")
  79. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
  80. IF(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  81. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_BSD_SOURCE -DDARWIN")
  82. IF(CMAKE_INSTALL_PREFIX)
  83. IF(NOT ETC_PREFIX)
  84. SET(ETC_PREFIX "${CMAKE_INSTALL_PREFIX}/etc")
  85. ENDIF(NOT ETC_PREFIX)
  86. IF(NOT MAN_PREFIX)
  87. SET(MAN_PREFIX "${CMAKE_INSTALL_PREFIX}/man")
  88. ENDIF(NOT MAN_PREFIX)
  89. IF(NOT LOCALSTATES_PREFIX)
  90. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  91. ENDIF(NOT LOCALSTATES_PREFIX)
  92. SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
  93. ELSE(CMAKE_INSTALL_PREFIX)
  94. IF(NOT ETC_PREFIX)
  95. SET(ETC_PREFIX /usr/local/etc)
  96. ENDIF(NOT ETC_PREFIX)
  97. IF(NOT MAN_PREFIX)
  98. SET(MAN_PREFIX /usr/local/man)
  99. ENDIF(NOT MAN_PREFIX)
  100. IF(NOT LOCALSTATES_PREFIX)
  101. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  102. ENDIF(NOT LOCALSTATES_PREFIX)
  103. IF(NOT PREFIX)
  104. SET(PREFIX /usr/local)
  105. ENDIF(NOT PREFIX)
  106. ENDIF(CMAKE_INSTALL_PREFIX)
  107. FIND_LIBRARY(LIBINTL_LIBRARY NAMES intl PATHS /lib
  108. /opt/lib
  109. /usr/lib
  110. /usr/local/lib
  111. DOC "Path where the libintl library can be found")
  112. LIST(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBINTL_LIBRARY})
  113. MESSAGE(STATUS "Configuring for Darwin")
  114. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  115. IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  116. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -DLINUX")
  117. IF(CMAKE_INSTALL_PREFIX)
  118. IF(NOT ETC_PREFIX)
  119. SET(ETC_PREFIX "${CMAKE_INSTALL_PREFIX}/etc")
  120. ENDIF(NOT ETC_PREFIX)
  121. IF(NOT MAN_PREFIX)
  122. SET(MAN_PREFIX "${CMAKE_INSTALL_PREFIX}/share/man")
  123. ENDIF(NOT MAN_PREFIX)
  124. IF(NOT LOCALSTATES_PREFIX)
  125. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  126. ENDIF(NOT LOCALSTATES_PREFIX)
  127. SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
  128. ELSE(CMAKE_INSTALL_PREFIX)
  129. IF(NOT ETC_PREFIX)
  130. SET(ETC_PREFIX /etc)
  131. ENDIF(NOT ETC_PREFIX)
  132. IF(NOT PREFIX)
  133. SET(PREFIX /usr)
  134. ENDIF(NOT PREFIX)
  135. IF(NOT MAN_PREFIX)
  136. SET(MAN_PREFIX /usr/share/man)
  137. ENDIF(NOT MAN_PREFIX)
  138. IF(NOT LOCALSTATES_PREFIX)
  139. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  140. ENDIF(NOT LOCALSTATES_PREFIX)
  141. ENDIF(CMAKE_INSTALL_PREFIX)
  142. # Workaround with architecture specific includes
  143. IF(IS_DIRECTORY "/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/")
  144. INCLUDE_DIRECTORIES("/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/")
  145. SET(CMAKE_REQUIRED_INCLUDES "/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/")
  146. ENDIF(IS_DIRECTORY "/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/")
  147. LIST(APPEND CMAKE_REQUIRED_LIBRARIES rt)
  148. LIST(APPEND CMAKE_REQUIRED_LIBRARIES dl)
  149. MESSAGE(STATUS "Configuring for Linux")
  150. IF(EXISTS "/etc/debian_version")
  151. SET(LINUX_START_SCRIPT "rspamd_debian.in")
  152. ELSE(EXISTS "/etc/debian_version")
  153. SET(LINUX_START_SCRIPT "rspamd_rh.in")
  154. ENDIF(EXISTS "/etc/debian_version")
  155. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  156. IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
  157. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -DSOLARIS")
  158. IF(CMAKE_INSTALL_PREFIX)
  159. IF(NOT ETC_PREFIX)
  160. SET(ETC_PREFIX "${CMAKE_INSTALL_PREFIX}/etc")
  161. ENDIF(NOT ETC_PREFIX)
  162. IF(NOT MAN_PREFIX)
  163. SET(MAN_PREFIX "${CMAKE_INSTALL_PREFIX}/man")
  164. ENDIF(NOT MAN_PREFIX)
  165. IF(NOT LOCALSTATES_PREFIX)
  166. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  167. ENDIF(NOT LOCALSTATES_PREFIX)
  168. SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
  169. ELSE(CMAKE_INSTALL_PREFIX)
  170. IF(NOT ETC_PREFIX)
  171. SET(ETC_PREFIX /etc)
  172. ENDIF(NOT ETC_PREFIX)
  173. IF(NOT PREFIX)
  174. SET(PREFIX /opt/rspamd)
  175. ENDIF(NOT PREFIX)
  176. IF(NOT MAN_PREFIX)
  177. SET(MAN_PREFIX /usr/share/man)
  178. ENDIF(NOT MAN_PREFIX)
  179. IF(NOT LOCALSTATES_PREFIX)
  180. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  181. ENDIF(NOT LOCALSTATES_PREFIX)
  182. ENDIF(CMAKE_INSTALL_PREFIX)
  183. LIST(APPEND CMAKE_REQUIRED_LIBRARIES rt)
  184. LIST(APPEND CMAKE_REQUIRED_LIBRARIES dl)
  185. LIST(APPEND CMAKE_REQUIRED_LIBRARIES resolv)
  186. LIST(APPEND CMAKE_REQUIRED_LIBRARIES m)
  187. MESSAGE(STATUS "Configuring for Solaris")
  188. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
  189. # Check prefixes
  190. IF(NOT ETC_PREFIX)
  191. IF(CMAKE_INSTALL_PREFIX)
  192. MESSAGE(WARNING "Your system is unknown for rspamd, assume defining ETC_PREFIX and MAN_PREFIX by -D option, now ETC_PREFIX and MAN_PREFIX are relative to ${CMAKE_INSTALL_PREFIX}")
  193. SET(ETC_PREFIX "${CMAKE_INSTALL_PREFIX}/etc")
  194. ELSE(CMAKE_INSTALL_PREFIX)
  195. MESSAGE(FATAL_ERROR "Your system is unknown for rspamd and no CMAKE_INSTALL_PREFIX specified, assume defining CMAKE_INSTALL_PREFIX")
  196. ENDIF(CMAKE_INSTALL_PREFIX)
  197. MESSAGE(STATUS "Configuring for ${CMAKE_SYSTEM_NAME}")
  198. ENDIF(NOT ETC_PREFIX)
  199. IF(NOT MAN_PREFIX)
  200. IF(CMAKE_INSTALL_PREFIX)
  201. SET(MAN_PREFIX "${CMAKE_INSTALL_PREFIX}/man")
  202. ENDIF(CMAKE_INSTALL_PREFIX)
  203. ENDIF(NOT MAN_PREFIX)
  204. IF(NOT LOCALSTATES_PREFIX)
  205. IF(CMAKE_INSTALL_PREFIX)
  206. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  207. ENDIF(CMAKE_INSTALL_PREFIX)
  208. ENDIF(NOT LOCALSTATES_PREFIX)
  209. # Now CMAKE_INSTALL_PREFIX is a base prefix for everything
  210. # ETC_PREFIX - for configuration
  211. # MAN_PREFIX - for manual pages
  212. # LOCALSTATES_PREFIX - for runtime files
  213. # Now find libraries and headers
  214. INCLUDE(FindLua51)
  215. # Check for luajit
  216. IF(ENABLE_LUAJIT MATCHES "ON")
  217. FIND_LIBRARY(LUAJIT_LIBRARY NAMES luajit51 luajit5.1 luajit-5.1 luajit
  218. HINTS
  219. $ENV{LUA_DIR}
  220. PATH_SUFFIXES lib64 lib
  221. PATHS
  222. ~/Library/Frameworks
  223. /Library/Frameworks
  224. /usr/local
  225. /usr
  226. /sw
  227. /opt/local
  228. /opt/csw
  229. /opt
  230. )
  231. IF(NOT LUAJIT_LIBRARY)
  232. MESSAGE(FATAL_ERROR "Luajit not found but enabled in configuration")
  233. ENDIF(NOT LUAJIT_LIBRARY)
  234. ENDIF(ENABLE_LUAJIT MATCHES "ON")
  235. IF(NOT LUA_FOUND)
  236. # Automatic check failed, check passed variable
  237. IF(LUA_INCLUDE_DIR)
  238. INCLUDE_DIRECTORIES("${LUA_INCLUDE_DIR}")
  239. SET(WITH_LUA 1)
  240. ELSE(LUA_INCLUDE_DIR)
  241. MESSAGE(FATAL_ERROR "Lua not found, lua support is required for working")
  242. ENDIF(LUA_INCLUDE_DIR)
  243. ELSE(NOT LUA_FOUND)
  244. SET(WITH_LUA 1)
  245. INCLUDE_DIRECTORIES("${LUA_INCLUDE_DIR}")
  246. ENDIF(NOT LUA_FOUND)
  247. # Check and link to pcre
  248. pkg_check_modules(PCRE REQUIRED libpcre)
  249. IF(PCRE_INCLUDE_DIRS)
  250. INCLUDE_DIRECTORIES("${PCRE_INCLUDE_DIRS}")
  251. ENDIF(PCRE_INCLUDE_DIRS)
  252. IF(PCRE_LIBRARY_DIRS)
  253. LINK_DIRECTORIES("${PCRE_LIBRARY_DIRS}")
  254. ENDIF(PCRE_LIBRARY_DIRS)
  255. IF(ENABLE_STATIC MATCHES "ON")
  256. pkg_check_modules(GLIB2 REQUIRED glib-2.0>=2.12)
  257. ELSE(ENABLE_STATIC MATCHES "ON")
  258. pkg_check_modules(GLIB2 REQUIRED glib-2.0>=2.12 gmodule-2.0)
  259. SET(GLIB2_VERSION "${GLIB2_glib-2.0_VERSION}")
  260. ENDIF(ENABLE_STATIC MATCHES "ON")
  261. pkg_check_modules(GMIME2 gmime-2.0)
  262. # Try to link with gmime24
  263. IF(NOT GMIME2_FOUND OR FORCE_GMIME24)
  264. pkg_check_modules(GMIME24 REQUIRED gmime-2.4)
  265. SET(GMIME24 "yes")
  266. # Gmime2
  267. FOREACH(arg ${GMIME24_CFLAGS})
  268. SET(GMIME_CFLAGS "${GMIME_CFLAGS} ${arg}")
  269. ENDFOREACH(arg ${GMIME24_CFLAGS})
  270. IF(ENABLE_STATIC MATCHES "ON")
  271. FOREACH(arg ${GMIME24_STATIC_LDFLAGS})
  272. SET(GMIME_LDFLAGS "${GMIME_LDFLAGS} ${arg}")
  273. ENDFOREACH(arg ${GMIME24_LDFLAGS})
  274. ELSE(ENABLE_STATIC MATCHES "ON")
  275. FOREACH(arg ${GMIME24_LDFLAGS})
  276. SET(GMIME_LDFLAGS "${GMIME_LDFLAGS} ${arg}")
  277. ENDFOREACH(arg ${GMIME24_LDFLAGS})
  278. ENDIF(ENABLE_STATIC MATCHES "ON")
  279. IF(GMIME24_INCLUDE_DIRS)
  280. INCLUDE_DIRECTORIES(${GMIME24_INCLUDE_DIRS})
  281. ENDIF(GMIME24_INCLUDE_DIRS)
  282. IF(GMIME24_LIBRARY_DIRS)
  283. LINK_DIRECTORIES(${GMIME24_LIBRARY_DIRS})
  284. ENDIF(GMIME24_LIBRARY_DIRS)
  285. ELSE(NOT GMIME2_FOUND OR FORCE_GMIME24)
  286. # Gmime2
  287. FOREACH(arg ${GMIME2_CFLAGS})
  288. SET(GMIME_CFLAGS "${GMIME_CFLAGS} ${arg}")
  289. ENDFOREACH(arg ${GMIME2_CFLAGS})
  290. IF(ENABLE_STATIC MATCHES "ON")
  291. FOREACH(arg ${GMIME2_STATIC_LDFLAGS})
  292. SET(GMIME_LDFLAGS "${GMIME_LDFLAGS} ${arg}")
  293. ENDFOREACH(arg ${GMIME2_LDFLAGS})
  294. ELSE(ENABLE_STATIC MATCHES "ON")
  295. FOREACH(arg ${GMIME2_LDFLAGS})
  296. SET(GMIME_LDFLAGS "${GMIME_LDFLAGS} ${arg}")
  297. ENDFOREACH(arg ${GMIME2_LDFLAGS})
  298. ENDIF(ENABLE_STATIC MATCHES "ON")
  299. IF(GMIME2_INCLUDE_DIRS)
  300. INCLUDE_DIRECTORIES(${GMIME2_INCLUDE_DIRS})
  301. ENDIF(GMIME2_INCLUDE_DIRS)
  302. IF(GMIME2_LIBRARY_DIRS)
  303. LINK_DIRECTORIES(${GMIME2_LIBRARY_DIRS})
  304. ENDIF(GMIME2_LIBRARY_DIRS)
  305. ENDIF(NOT GMIME2_FOUND OR FORCE_GMIME24)
  306. # Make from ; separated list normal space separated list
  307. # Glib2
  308. FOREACH(arg ${GLIB2_CFLAGS})
  309. SET(GLIB_CFLAGS "${GLIB_CFLAGS} ${arg}")
  310. ENDFOREACH(arg ${GLIB2_CFLAGS})
  311. IF(ENABLE_STATIC MATCHES "ON")
  312. FOREACH(arg ${GLIB2_STATIC_LDFLAGS})
  313. SET(GLIB_LDFLAGS "${GLIB_LDFLAGS} ${arg}")
  314. ENDFOREACH(arg ${GLIB2_LDFLAGS})
  315. ELSE(ENABLE_STATIC MATCHES "ON")
  316. FOREACH(arg ${GLIB2_LDFLAGS})
  317. SET(GLIB_LDFLAGS "${GLIB_LDFLAGS} ${arg}")
  318. ENDFOREACH(arg ${GLIB2_LDFLAGS})
  319. ENDIF(ENABLE_STATIC MATCHES "ON")
  320. INCLUDE_DIRECTORIES(${GLIB2_INCLUDE_DIRS})
  321. LINK_DIRECTORIES(${GLIB2_LIBRARY_DIRS})
  322. # Check for libevent
  323. FIND_LIBRARY(LIBEVENT_LIBRARY NAMES event PATHS /lib
  324. /opt/lib
  325. /usr/lib
  326. /usr/local/lib
  327. DOC "Path where the libevent library can be found")
  328. IF(NOT LIBEVENT_LIBRARY)
  329. MESSAGE(FATAL_ERROR "libevent is required for building rspamd")
  330. ENDIF(NOT LIBEVENT_LIBRARY)
  331. FIND_PATH(LIBEVENT_INCLUDE event.h PATHS /opt/include
  332. /usr/include
  333. /usr/local/include
  334. DOC "Path where the libevent header files can be found")
  335. GET_FILENAME_COMPONENT(LIBEVENT_PATH "${LIBEVENT_LIBRARY}" PATH)
  336. INCLUDE_DIRECTORIES("${LIBEVENT_INCLUDE}")
  337. LINK_DIRECTORIES("${LIBEVENT_PATH}")
  338. # Find libjudy
  339. FIND_LIBRARY(LIBJUDY_LIBRARY NAMES Judy PATHS /lib
  340. /opt/lib
  341. /usr/lib
  342. /usr/local/lib
  343. DOC "Path where the libjudy library can be found")
  344. IF(LIBJUDY_LIBRARY)
  345. FIND_PATH(LIBJUDY_INCLUDE Judy.h PATHS /opt/include
  346. /usr/include
  347. /usr/local/include
  348. DOC "Path where the judy header files can be found")
  349. GET_FILENAME_COMPONENT(LIBJUDY_PATH "${LIBJUDY_LIBRARY}" PATH)
  350. INCLUDE_DIRECTORIES("${LIBJUDY_INCLUDE}")
  351. LINK_DIRECTORIES("${LIBJUDY_PATH}")
  352. SET(WITH_JUDY 1)
  353. ENDIF(LIBJUDY_LIBRARY)
  354. IF(ENABLE_PROFILING MATCHES "ON")
  355. SET(WITH_PROFILER 1)
  356. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
  357. SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg")
  358. ENDIF(ENABLE_PROFILING MATCHES "ON")
  359. # Static build
  360. IF(ENABLE_STATIC MATCHES "ON")
  361. SET(BUILD_STATIC 1)
  362. SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
  363. MESSAGE(STATUS "Static build of rspamd, no custom plugins support")
  364. ENDIF(ENABLE_STATIC MATCHES "ON")
  365. # Google performance tools
  366. IF(ENABLE_GPERF_TOOLS MATCHES "ON")
  367. FIND_PATH(GPERF_INCLUDE google/profiler.h PATHS /opt/include
  368. /usr/include
  369. /usr/local/include
  370. DOC "Path where google perftools includes can be found")
  371. INCLUDE_DIRECTORIES("${GPERF_INCLUDE}")
  372. FIND_LIBRARY(GPERF_LIBRARY NAMES profiler PATHS /lib
  373. /opt/lib
  374. /usr/lib
  375. /usr/local/lib
  376. DOC "Path where the gperf library can be found")
  377. IF(NOT GPERF_LIBRARY)
  378. MESSAGE(FATAL_ERROR "gperf tools support is enabled but not found in system")
  379. ENDIF(NOT GPERF_LIBRARY)
  380. GET_FILENAME_COMPONENT(GPERF_PATH "${GPERF_LIBRARY}" PATH)
  381. LINK_DIRECTORIES("${GPERF_PATH}")
  382. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer")
  383. SET(WITH_GPERF_TOOLS 1)
  384. ENDIF(ENABLE_GPERF_TOOLS MATCHES "ON")
  385. # Find util library
  386. FIND_LIBRARY(LIBUTIL_LIBRARY NAMES util PATHS /lib
  387. /opt/lib
  388. /usr/lib
  389. /usr/local/lib
  390. DOC "Path where the libutil library can be found")
  391. IF(LIBUTIL_LIBRARY)
  392. LIST(APPEND CMAKE_REQUIRED_LIBRARIES util)
  393. CHECK_FUNCTION_EXISTS(pidfile_open HAVE_PIDFILE)
  394. FIND_FILE(HAVE_LIBUTIL_H NAMES libutil.h PATHS /usr/include
  395. /opt/include
  396. /usr/local/include
  397. DOC "Path to libutil header")
  398. ENDIF(LIBUTIL_LIBRARY)
  399. # Check platform specific includes
  400. CHECK_INCLUDE_FILES(sys/types.h HAVE_SYS_TYPES_H)
  401. CHECK_INCLUDE_FILES(sys/time.h HAVE_SYS_TIME_H)
  402. CHECK_INCLUDE_FILES(sys/uio.h HAVE_SYS_UIO_H)
  403. CHECK_INCLUDE_FILES(fcntl.h HAVE_FCNTL_H)
  404. CHECK_INCLUDE_FILES(math.h HAVE_MATH_H)
  405. CHECK_INCLUDE_FILES(stdio.h HAVE_STDIO_H)
  406. CHECK_INCLUDE_FILES(stdlib.h HAVE_STDLIB_H)
  407. CHECK_INCLUDE_FILES(string.h HAVE_STRING_H)
  408. CHECK_INCLUDE_FILES(strings.h HAVE_STRINGS_H)
  409. CHECK_INCLUDE_FILES(time.h HAVE_TIME_H)
  410. CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H)
  411. CHECK_INCLUDE_FILES(sysexits.h HAVE_SYSEXITS_H)
  412. CHECK_INCLUDE_FILES(stdint.h HAVE_STDINT_H)
  413. CHECK_INCLUDE_FILES(inttypes.h HAVE_INTTYPES_H)
  414. CHECK_INCLUDE_FILES(endian.h HAVE_ENDIAN_H)
  415. CHECK_INCLUDE_FILES(sys/endian.h HAVE_SYS_ENDIAN_H)
  416. CHECK_INCLUDE_FILES(machine/endian.h HAVE_MACHINE_ENDIAN_H)
  417. CHECK_INCLUDE_FILES(sys/queue.h HAVE_SYS_QUEUE_H)
  418. CHECK_INCLUDE_FILES(sys/socket.h HAVE_SYS_SOCKET_H)
  419. CHECK_INCLUDE_FILES(sys/mman.h HAVE_SYS_MMAN_H)
  420. CHECK_INCLUDE_FILES(sys/un.h HAVE_SYS_UN_H)
  421. CHECK_INCLUDE_FILES(sys/stat.h HAVE_SYS_STAT_H)
  422. CHECK_INCLUDE_FILES(sys/wait.h HAVE_SYS_WAIT_H)
  423. CHECK_INCLUDE_FILES(sys/param.h HAVE_SYS_PARAM_H)
  424. CHECK_INCLUDE_FILES(sys/cdefs.h HAVE_SYS_CDEFS_H)
  425. CHECK_INCLUDE_FILES(sys/file.h HAVE_SYS_FILE_H)
  426. CHECK_INCLUDE_FILES(sys/utsname.h HAVE_SYS_UTSNAME_H)
  427. CHECK_INCLUDE_FILES(sys/resource.h HAVE_SYS_RESOURCE_H)
  428. CHECK_INCLUDE_FILES(netinet/in.h HAVE_NETINET_IN_H)
  429. CHECK_INCLUDE_FILES(arpa/inet.h HAVE_ARPA_INET_H)
  430. CHECK_INCLUDE_FILES(netdb.h HAVE_NETDB_H)
  431. CHECK_INCLUDE_FILES(syslog.h HAVE_SYSLOG_H)
  432. CHECK_INCLUDE_FILES(locale.h HAVE_LOCALE_H)
  433. CHECK_INCLUDE_FILES(libgen.h HAVE_LIBGEN_H)
  434. CHECK_INCLUDE_FILES(search.h HAVE_SEARCH_H)
  435. CHECK_INCLUDE_FILES(pwd.h HAVE_PWD_H)
  436. CHECK_INCLUDE_FILES(grp.h HAVE_GRP_H)
  437. CHECK_INCLUDE_FILES(glob.h HAVE_GLOB_H)
  438. CHECK_INCLUDE_FILES(poll.h HAVE_POLL_H)
  439. CHECK_INCLUDE_FILES(sys/sendfile.h HAVE_SYS_SENDFILE_H)
  440. # Some dependencies
  441. IF(HAVE_SYS_WAIT_H)
  442. LIST(APPEND CMAKE_REQUIRED_INCLUDES sys/wait.h)
  443. ENDIF(HAVE_SYS_WAIT_H)
  444. IF(HAVE_TIME_H)
  445. LIST(APPEND CMAKE_REQUIRED_INCLUDES time.h)
  446. ENDIF(HAVE_TIME_H)
  447. IF(HAVE_SYS_TIME_H)
  448. LIST(APPEND CMAKE_REQUIRED_INCLUDES sys/time.h)
  449. ENDIF(HAVE_SYS_TIME_H)
  450. # Check platform API
  451. CHECK_FUNCTION_EXISTS(setproctitle HAVE_SETPROCTITLE)
  452. CHECK_FUNCTION_EXISTS(getpagesize HAVE_GETPAGESIZE)
  453. CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
  454. CHECK_FUNCTION_EXISTS(vfork HAVE_VFORK)
  455. CHECK_FUNCTION_EXISTS(wait4 HAVE_WAIT4)
  456. CHECK_FUNCTION_EXISTS(waitpid HAVE_WAITPID)
  457. CHECK_FUNCTION_EXISTS(flock HAVE_FLOCK)
  458. CHECK_FUNCTION_EXISTS(tanhl HAVE_TANHL)
  459. CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
  460. CHECK_FUNCTION_EXISTS(mkstemp HAVE_MKSTEMP)
  461. CHECK_FUNCTION_EXISTS(setitimer HAVE_SETITIMER)
  462. CHECK_FUNCTION_EXISTS(clock_gettime HAVE_CLOCK_GETTIME)
  463. # Check macros
  464. CHECK_SYMBOL_EXISTS(PATH_MAX limits.h HAVE_PATH_MAX)
  465. CHECK_SYMBOL_EXISTS(MAXPATHLEN sys/param.h HAVE_MAXPATHLEN)
  466. CHECK_SYMBOL_EXISTS(MAP_SHARED sys/mman.h HAVE_MMAP_SHARED)
  467. CHECK_SYMBOL_EXISTS(MAP_ANON sys/mman.h HAVE_MMAP_ANON)
  468. CHECK_SYMBOL_EXISTS(MAP_NOCORE sys/mman.h HAVE_MMAP_NOCORE)
  469. CHECK_SYMBOL_EXISTS(_SC_NPROCESSORS_ONLN unistd.h HAVE_SC_NPROCESSORS_ONLN)
  470. CHECK_SYMBOL_EXISTS(SA_SIGINFO signal.h HAVE_SA_SIGINFO)
  471. IF(HAVE_CLOCK_GETTIME)
  472. CHECK_SYMBOL_EXISTS(CLOCK_PROCESS_CPUTIME_ID time.h HAVE_CLOCK_PROCESS_CPUTIME_ID)
  473. CHECK_SYMBOL_EXISTS(CLOCK_VIRTUAL time.h HAVE_CLOCK_VIRTUAL)
  474. ELSE(HAVE_CLOCK_GETTIME)
  475. CHECK_INCLUDE_FILES(sys/timeb.h HAVE_SYS_TIMEB_H)
  476. ENDIF(HAVE_CLOCK_GETTIME)
  477. # Check asm pause instruction
  478. CHECK_C_SOURCE_COMPILES ("#include <sys/types.h>
  479. int main (int argc, char **argv) {
  480. __asm __volatile(\"pause\");
  481. return 0;
  482. }" HAVE_ASM_PAUSE)
  483. # Check queue.h compatibility
  484. IF(NOT HAVE_COMPATIBLE_QUEUE_H)
  485. INCLUDE_DIRECTORIES(compat)
  486. ENDIF(NOT HAVE_COMPATIBLE_QUEUE_H)
  487. SET(CONTRIBSRC "")
  488. # Optimization flags
  489. IF(ENABLE_OPTIMIZATION MATCHES "ON")
  490. SET(CMAKE_C_OPT_FLAGS "-O3")
  491. ELSE(ENABLE_OPTIMIZATION MATCHES "ON")
  492. SET(CMAKE_C_OPT_FLAGS "-O0")
  493. ENDIF(ENABLE_OPTIMIZATION MATCHES "ON")
  494. # Process with warn flags
  495. CHECK_C_COMPILER_FLAG(-Wall SUPPORT_WALL)
  496. CHECK_C_COMPILER_FLAG(-Wall SUPPORT_W)
  497. CHECK_C_COMPILER_FLAG(-Wpointer-arith SUPPORT_WPOINTER)
  498. CHECK_C_COMPILER_FLAG(-Wno-unused-parameter SUPPORT_WPARAM)
  499. CHECK_C_COMPILER_FLAG(-Wno-unused-function SUPPORT_WFUNCTION)
  500. CHECK_C_COMPILER_FLAG(-Wunused-variable SUPPORT_WUNUSED_VAR)
  501. CHECK_C_COMPILER_FLAG(-Wno-pointer-sign SUPPORT_WPOINTER_SIGN)
  502. CHECK_C_COMPILER_FLAG(-pedantic SUPPORT_PEDANTIC_FLAG)
  503. CHECK_C_COMPILER_FLAG("-std=c99" SUPPORT_STD_FLAG)
  504. SET(CMAKE_C_WARN_FLAGS "")
  505. IF(SUPPORT_W)
  506. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -W")
  507. ENDIF(SUPPORT_W)
  508. IF(SUPPORT_WALL)
  509. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wall")
  510. ENDIF(SUPPORT_WALL)
  511. IF(SUPPORT_WPOINTER)
  512. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wpointer-arith")
  513. ENDIF(SUPPORT_WPOINTER)
  514. IF(SUPPORT_WPARAM)
  515. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-unused-parameter")
  516. ENDIF(SUPPORT_WPARAM)
  517. IF(SUPPORT_WFUNCTION)
  518. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-unused-function")
  519. ENDIF(SUPPORT_WFUNCTION)
  520. IF(SUPPORT_WUNUSED_VAR)
  521. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wunused-variable")
  522. ENDIF(SUPPORT_WUNUSED_VAR)
  523. IF(SUPPORT_WPOINTER_SIGN)
  524. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-pointer-sign")
  525. ENDIF(SUPPORT_WPOINTER_SIGN)
  526. IF(SUPPORT_PEDANTIC_FLAG)
  527. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -pedantic")
  528. ENDIF(SUPPORT_PEDANTIC_FLAG)
  529. IF(SUPPORT_STD_FLAG)
  530. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -std=c99")
  531. ENDIF(SUPPORT_STD_FLAG)
  532. SET(CMAKE_C_FLAGS "${CMAKE_C_OPT_FLAGS} ${CMAKE_C_FLAGS} ${CMAKE_C_WARN_FLAGS}")
  533. IF(DEBUG_MODE MATCHES "ON")
  534. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
  535. ENDIF(DEBUG_MODE MATCHES "ON")
  536. IF(NOT DESTDIR)
  537. SET(DESTDIR $ENV{DESTDIR})
  538. ENDIF(NOT DESTDIR)
  539. # Try to detect tip version from hg
  540. SET(ID "unknown")
  541. FIND_PROGRAM(HG "hg")
  542. IF(HG)
  543. EXECUTE_PROCESS(COMMAND "${HG} id > /dev/null" OUTPUT_VARIABLE HG_ID)
  544. IF(HG_ID)
  545. STRING(REGEX MATCH ^[0-9a-z]+ ID "${HG_ID}")
  546. ELSE(HG_ID)
  547. FIND_FILE(HG_ARCH ".hg_archival.txt" "${CMAKE_CURRENT_SOURCE_DIR}")
  548. IF(HG_ARCH)
  549. FILE(READ ${HG_ARCH} HG_ID)
  550. IF(HG_ID)
  551. STRING(REGEX MATCH "node: [0-9a-z]+" _tmp "${HG_ID}")
  552. STRING(SUBSTRING "${_tmp}" 6 12 ID)
  553. ENDIF(HG_ID)
  554. ENDIF(HG_ARCH)
  555. ENDIF(HG_ID)
  556. ELSE(HG)
  557. # Now check .hg_archival.txt
  558. FIND_FILE(HG_ARCH ".hg_archival.txt" "${CMAKE_CURRENT_SOURCE_DIR}")
  559. IF(HG_ARCH)
  560. FILE(READ ${HG_ARCH} HG_ID)
  561. IF(HG_ID)
  562. STRING(REGEX MATCH "node: [0-9a-z]+" _tmp "${HG_ID}")
  563. STRING(SUBSTRING "${_tmp}" 6 12 ID)
  564. ENDIF(HG_ID)
  565. ENDIF(HG_ARCH)
  566. ENDIF(HG)
  567. ################################ SOURCES SECTION ###########################
  568. INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/src" "${CMAKE_BINARY_DIR}/src")
  569. SET(RSPAMDSRC src/modules.c
  570. src/controller.c
  571. src/fuzzy_storage.c
  572. src/greylist_storage.c
  573. src/lmtp.c
  574. src/main.c
  575. src/map.c
  576. src/smtp.c
  577. src/worker.c)
  578. SET(TOKENIZERSSRC src/tokenizers/tokenizers.c
  579. src/tokenizers/osb.c)
  580. SET(CLASSIFIERSSRC src/classifiers/classifiers.c
  581. src/classifiers/bayes.c
  582. src/classifiers/winnow.c)
  583. SET(PLUGINSSRC src/plugins/surbl.c
  584. src/plugins/regexp.c
  585. src/plugins/chartable.c
  586. src/plugins/fuzzy_check.c
  587. src/plugins/spf.c)
  588. ADD_CUSTOM_COMMAND(OUTPUT src/modules.c
  589. COMMAND ${CMAKE_SOURCE_DIR}/utils/gen-modules.sh ${PLUGINSSRC}
  590. WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src)
  591. ADD_SUBDIRECTORY(contrib/lgpl)
  592. IF(GLIB_COMPAT)
  593. INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/contrib/lgpl")
  594. ENDIF(GLIB_COMPAT)
  595. ADD_SUBDIRECTORY(src/lua)
  596. ADD_SUBDIRECTORY(src/json)
  597. ADD_SUBDIRECTORY(src/cdb)
  598. ADD_SUBDIRECTORY(lib)
  599. ADD_SUBDIRECTORY(src/client)
  600. ADD_SUBDIRECTORY(utils)
  601. ADD_SUBDIRECTORY(test)
  602. LIST(LENGTH PLUGINSSRC RSPAMD_MODULES_NUM)
  603. ############################ TARGETS SECTION ###############################
  604. CONFIGURE_FILE(config.h.in src/config.h)
  605. CONFIGURE_FILE(contrib/exim/local_scan.c.in contrib/exim/local_scan_rspamd.c @ONLY)
  606. CONFIGURE_FILE(conf/rspamd-basic.xml.in conf/rspamd.xml.sample @ONLY)
  607. ######################### LINK SECTION ###############################
  608. ADD_EXECUTABLE(rspamd ${RSPAMDSRC} ${CONTRIBSRC} ${TOKENIZERSSRC}
  609. ${CLASSIFIERSSRC} ${PLUGINSSRC})
  610. SET_TARGET_PROPERTIES(rspamd PROPERTIES LINKER_LANGUAGE C)
  611. SET_TARGET_PROPERTIES(rspamd PROPERTIES COMPILE_FLAGS "-DRSPAMD_MAIN")
  612. SET_TARGET_PROPERTIES(rspamd PROPERTIES VERSION ${RSPAMD_VERSION})
  613. TARGET_LINK_LIBRARIES(rspamd rspamdserver)
  614. IF(ENABLE_LUAJIT MATCHES "ON")
  615. TARGET_LINK_LIBRARIES(rspamd "${LUAJIT_LIBRARY}")
  616. ELSE(ENABLE_LUAJIT MATCHES "ON")
  617. TARGET_LINK_LIBRARIES(rspamd "${LUA_LIBRARY}")
  618. ENDIF(ENABLE_LUAJIT MATCHES "ON")
  619. IF(LIBJUDY_LIBRARY)
  620. TARGET_LINK_LIBRARIES(rspamd Judy)
  621. ENDIF(LIBJUDY_LIBRARY)
  622. TARGET_LINK_LIBRARIES(rspamd event)
  623. TARGET_LINK_LIBRARIES(rspamd pcre)
  624. TARGET_LINK_LIBRARIES(rspamd ${CMAKE_REQUIRED_LIBRARIES})
  625. TARGET_LINK_LIBRARIES(rspamd ${GLIB2_LIBRARIES})
  626. IF(GMIME24)
  627. TARGET_LINK_LIBRARIES(rspamd ${GMIME24_LIBRARIES})
  628. ELSE(GMIME24)
  629. TARGET_LINK_LIBRARIES(rspamd ${GMIME2_LIBRARIES})
  630. ENDIF(GMIME24)
  631. IF(ENABLE_STATIC MATCHES "ON")
  632. TARGET_LINK_LIBRARIES(rspamd ${PCRE_LIBRARIES})
  633. ENDIF(ENABLE_STATIC MATCHES "ON")
  634. IF(ENABLE_GPERF_TOOLS MATCHES "ON")
  635. TARGET_LINK_LIBRARIES(rspamd profiler)
  636. ENDIF(ENABLE_GPERF_TOOLS MATCHES "ON")
  637. IF(GLIB_COMPAT)
  638. TARGET_LINK_LIBRARIES(rspamd glibadditions)
  639. ENDIF(GLIB_COMPAT)
  640. ##################### INSTALLATION ##########################################
  641. # Binaries
  642. INSTALL(TARGETS rspamd RUNTIME DESTINATION bin)
  643. # Configs
  644. INSTALL(CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}${ETC_PREFIX}/rspamd)")
  645. INSTALL(FILES conf/2tld.inc RENAME 2tld.inc.orig DESTINATION ${ETC_PREFIX}/rspamd)
  646. IF(NOT EXISTS ${ETC_PREFIX}/rspamd/2tld.inc)
  647. INSTALL(FILES conf/2tld.inc DESTINATION ${ETC_PREFIX}/rspamd)
  648. ENDIF(NOT EXISTS ${ETC_PREFIX}/rspamd/2tld.inc)
  649. INSTALL(FILES conf/surbl-whitelist.inc RENAME surbl-whitelist.inc DESTINATION ${ETC_PREFIX}/rspamd)
  650. IF(NOT EXISTS ${ETC_PREFIX}/rspamd/surbl-whitelist.inc)
  651. INSTALL(FILES conf/surbl-whitelist.inc DESTINATION ${ETC_PREFIX}/rspamd)
  652. ENDIF(NOT EXISTS ${ETC_PREFIX}/rspamd/surbl-whitelist.inc)
  653. INSTALL(FILES ${CMAKE_BINARY_DIR}/conf/rspamd.xml.sample DESTINATION ${ETC_PREFIX})
  654. # Lua plugins
  655. INSTALL(CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}${ETC_PREFIX}/rspamd/plugins/lua)")
  656. FILE(GLOB LUA_PLUGINS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/src/plugins/lua" "${CMAKE_CURRENT_SOURCE_DIR}/src/plugins/lua/*.lua" )
  657. FOREACH(LUA_PLUGIN ${LUA_PLUGINS})
  658. GET_FILENAME_COMPONENT(_rp ${LUA_PLUGIN} PATH)
  659. INSTALL(CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}${ETC_PREFIX}/rspamd/plugins/lua/${_rp})")
  660. INSTALL(FILES "src/plugins/lua/${LUA_PLUGIN}" DESTINATION ${ETC_PREFIX}/rspamd/plugins/lua/${_rp})
  661. ENDFOREACH(LUA_PLUGIN)
  662. # Lua config
  663. INSTALL(CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}${ETC_PREFIX}/rspamd/lua)")
  664. FILE(GLOB_RECURSE LUA_CONFIGS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/conf/lua" "${CMAKE_CURRENT_SOURCE_DIR}/conf/lua/*.lua")
  665. FOREACH(LUA_CONF ${LUA_CONFIGS})
  666. GET_FILENAME_COMPONENT(_rp ${LUA_CONF} PATH)
  667. INSTALL(CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}${ETC_PREFIX}/rspamd/lua/${_rp})")
  668. IF(NOT EXISTS ${DESTDIR}/${ETC_PREFIX}/rspamd/lua/${LUA_CONF})
  669. INSTALL(FILES "conf/lua/${LUA_CONF}" DESTINATION ${ETC_PREFIX}/rspamd/lua/${_rp})
  670. ENDIF(NOT EXISTS ${DESTDIR}/${ETC_PREFIX}/rspamd/lua/${LUA_CONF})
  671. ENDFOREACH(LUA_CONF)
  672. # Manual pages
  673. INSTALL(FILES "doc/rspamd.8" DESTINATION ${MAN_PREFIX}/man8)
  674. INSTALL(FILES "doc/rspamc.1" DESTINATION ${MAN_PREFIX}/man1)
  675. # Start scripts
  676. IF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" AND NOT BUILD_PORT)
  677. INSTALL(PROGRAMS ${CMAKE_BINARY_DIR}/freebsd/rspamd DESTINATION ${ETC_PREFIX}/rc.d)
  678. IF(ENABLE_REDIRECTOR MATCHES "ON")
  679. INSTALL(PROGRAMS ${CMAKE_BINARY_DIR}/freebsd/redirector DESTINATION ${ETC_PREFIX}/rc.d)
  680. ENDIF(ENABLE_REDIRECTOR MATCHES "ON")
  681. INSTALL(CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}/${LOCALSTATES_PREFIX})")
  682. INSTALL(CODE "EXECUTE_PROCESS(COMMAND chown ${RSPAMD_USER}:${RSPAMD_GROUP} \$ENV{DESTDIR}/${LOCALSTATES_PREFIX})")
  683. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" AND NOT BUILD_PORT)
  684. IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  685. INSTALL(PROGRAMS "linux/${LINUX_START_SCRIPT}" DESTINATION ${ETC_PREFIX}/init.d RENAME rspamd)
  686. INSTALL(CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}/${LOCALSTATES_PREFIX})")
  687. INSTALL(CODE "EXECUTE_PROCESS(COMMAND chown ${RSPAMD_USER}:${RSPAMD_GROUP} \$ENV{DESTDIR}/${LOCALSTATES_PREFIX})")
  688. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  689. # CPack section
  690. SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libevent-1.4-2, libgmime-2.0-2a")
  691. SET(CPACK_PACKAGE_CONTACT "vsevolod@highsecure.ru")
  692. SET(CPACK_PACKAGE_NAME rspamd)
  693. SET(CPACK_SOURCE_IGNORE_FILES "\\\\.swp$" "/\\\\.hg/")
  694. SET(CPACK_PACKAGE_VERSION_MAJOR ${RSPAMD_VERSION_MAJOR})
  695. SET(CPACK_PACKAGE_VERSION_MINOR ${RSPAMD_VERSION_MINOR})
  696. SET(CPACK_PACKAGE_VERSION_PATCH ${RSPAMD_VERSION_PATCH})
  697. INCLUDE(CPack)
  698. IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  699. INCLUDE("linux/cmake/DpkgDeb.cmake")
  700. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  701. IF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
  702. INCLUDE("freebsd/cmake/PkgCreate.cmake")
  703. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
  704. SET(RPMNAME "rspamd")
  705. SET(PACKAGE_NAME "rspamd")
  706. SET(PACKAGE_RELEASE "1")
  707. SET(PACKAGE_SECTION "mail")
  708. SET(PACKAGE_PRIORITY "optional")
  709. SET(PACKAGE_HOMEPAGE "http://bitbucket.org/vstakhov/rspamd")
  710. SET(PACKAGE_MAINTAINER_NAME "vstakhov")
  711. SET(PACKAGE_MAINTAINER_EMAIL "vsevolod@highsecure.ru")
  712. SET(PACKAGE_DESCRIPTION_SUMMARY "rspamd - fast and modular antispam system written in C")
  713. SET(PACKAGE_DESCRIPTION "Fast and modular antispam system written in C")
  714. IF(GMIME24)
  715. SET(PACKAGE_DEPENDS "libc6, libevent-1.4-2, libgmime-2.4-2, liblua5.1-0, libxml-parser-perl, libterm-readkey-perl, libglib2.0-0")
  716. ELSE(GMIME24)
  717. SET(PACKAGE_DEPENDS "libc6, libevent-1.4-2, libgmime-2.0-2, libxml-parser-perl, libterm-readkey-perl, libglib2.0-0")
  718. ENDIF(GMIME24)
  719. SET(PACKAGE_VERSION "${RSPAMD_VERSION_MAJOR}.${RSPAMD_VERSION_MINOR}.${RSPAMD_VERSION_PATCH}")
  720. IF(DPKG_FOUND STREQUAL "YES")
  721. ADD_DEBIAN_PACKAGE("rspamd")
  722. ENDIF(DPKG_FOUND STREQUAL "YES")
  723. IF(PKGCREATE_FOUND STREQUAL "YES")
  724. ADD_FREEBSD_PACKAGE("rspamd" "freebsd/rspamd.plist")
  725. ENDIF(PKGCREATE_FOUND STREQUAL "YES")