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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191
  1. #
  2. # Rspamd - rambler antispam system
  3. #
  4. # Cmake configuration file
  5. #
  6. ############################# INITIAL SECTION #############################################
  7. PROJECT(rspamd C)
  8. SET(RSPAMD_VERSION_MAJOR 0)
  9. SET(RSPAMD_VERSION_MINOR 6)
  10. SET(RSPAMD_VERSION_PATCH 0)
  11. SET(RSPAMD_VERSION "${RSPAMD_VERSION_MAJOR}.${RSPAMD_VERSION_MINOR}.${RSPAMD_VERSION_PATCH}")
  12. SET(RSPAMD_MASTER_SITE_URL "http://bitbucket.org/vstakhov/rspamd")
  13. IF(NOT RSPAMD_USER)
  14. SET(RSPAMD_USER "nobody")
  15. SET(RSPAMD_GROUP "nobody")
  16. ENDIF(NOT RSPAMD_USER)
  17. CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)
  18. ############################# OPTIONS SECTION #############################################
  19. OPTION(DEBUG_MODE "Enable debug output [default: ON]" ON)
  20. OPTION(ENABLE_OPTIMIZATION "Enable optimization [default: OFF]" OFF)
  21. OPTION(SKIP_RELINK_RPATH "Skip relinking and full RPATH for the install tree" OFF)
  22. OPTION(ENABLE_REDIRECTOR "Enable redirector install [default: OFF]" OFF)
  23. OPTION(ENABLE_PROFILING "Enable profiling [default: OFF]" OFF)
  24. OPTION(ENABLE_GPERF_TOOLS "Enable google perftools [default: OFF]" OFF)
  25. OPTION(ENABLE_STATIC "Enable static compiling [default: OFF]" OFF)
  26. OPTION(ENABLE_LUAJIT "Link with libluajit [default: OFF]" OFF)
  27. OPTION(ENABLE_JUDY "Find and link with Judy library [default: ON]" ON)
  28. OPTION(ENABLE_DB "Find and link with DB library [default: OFF]" OFF)
  29. OPTION(ENABLE_SQLITE "Find and link with sqlite3 library [default: OFF]" OFF)
  30. OPTION(ENABLE_HIREDIS "Find and link with external redis library [default: OFF]" OFF)
  31. OPTION(NO_SHARED "Build internal libs static [default: OFF]" OFF)
  32. OPTION(FORCE_GMIME24 "Link with gmime2.4 [default: OFF]" OFF)
  33. # Build optimized code for following CPU (default i386)
  34. #SET(CPU_TUNE "i686")
  35. ############################# INCLUDE SECTION #############################################
  36. INCLUDE(CheckIncludeFiles)
  37. INCLUDE(CheckFunctionExists)
  38. INCLUDE(CheckSymbolExists)
  39. INCLUDE(CheckCSourceCompiles)
  40. INCLUDE(CheckLibraryExists)
  41. INCLUDE(FindPkgConfig)
  42. INCLUDE(CheckCCompilerFlag)
  43. INCLUDE(FindPerl)
  44. INCLUDE(FindOpenSSL)
  45. ############################# MODULES SECTION #############################################
  46. MACRO(_AddModulesForced MLIST WLIST)
  47. # Generate unique string for this build
  48. STRING(RANDOM LENGTH 8 _MODULES_ID)
  49. SET(MODULES_ID ${_MODULES_ID} CACHE INTERNAL "Modules ID" FORCE)
  50. FILE(WRITE "src/modules.c" "/* ${MODULES_ID} */\n#include \"config.h\"\n")
  51. # Handle even old cmake
  52. LIST(LENGTH ${MLIST} MLIST_COUNT)
  53. LIST(LENGTH ${WLIST} WLIST_COUNT)
  54. MATH(EXPR MLIST_MAX ${MLIST_COUNT}-1)
  55. MATH(EXPR WLIST_MAX ${WLIST_COUNT}-1)
  56. FOREACH(MOD_IDX RANGE ${MLIST_MAX})
  57. LIST(GET ${MLIST} ${MOD_IDX} MOD)
  58. FILE(APPEND "src/modules.c" "extern module_t ${MOD}_module;\n")
  59. ENDFOREACH(MOD_IDX RANGE ${MLIST_MAX})
  60. FILE(APPEND "src/modules.c" "\n\nmodule_t *modules[] = {\n")
  61. FOREACH(MOD_IDX RANGE ${MLIST_MAX})
  62. LIST(GET ${MLIST} ${MOD_IDX} MOD)
  63. FILE(APPEND "src/modules.c" "&${MOD}_module,\n")
  64. ENDFOREACH(MOD_IDX RANGE ${MLIST_MAX})
  65. FILE(APPEND "src/modules.c" "NULL\n};\n")
  66. FOREACH(MOD_IDX RANGE ${WLIST_MAX})
  67. LIST(GET ${WLIST} ${MOD_IDX} WRK)
  68. FILE(APPEND "src/modules.c" "extern worker_t ${WRK}_worker;\n")
  69. ENDFOREACH(MOD_IDX RANGE ${WLIST_MAX})
  70. FILE(APPEND "src/modules.c" "\n\nworker_t *workers[] = {\n")
  71. FOREACH(MOD_IDX RANGE ${WLIST_MAX})
  72. LIST(GET ${WLIST} ${MOD_IDX} WRK)
  73. FILE(APPEND "src/modules.c" "&${WRK}_worker,\n")
  74. ENDFOREACH(MOD_IDX RANGE ${WLIST_MAX})
  75. FILE(APPEND "src/modules.c" "NULL\n};\n")
  76. ENDMACRO(_AddModulesForced MLIST WLIST)
  77. MACRO(AddModules MLIST WLIST)
  78. _AddModulesForced(${MLIST} ${WLIST})
  79. #IF(NOT EXISTS "src/modules.c")
  80. # _AddModulesForced(${MLIST} ${WLIST})
  81. #ELSE(NOT EXISTS "src/modules.c")
  82. # FILE(STRINGS "src/modules.c" FILE_ID_RAW REGEX "^/.*[a-zA-Z0-9]+.*/$")
  83. # STRING(REGEX MATCH "[a-zA-Z0-9]+" FILE_ID "${FILE_ID_RAW}")
  84. # IF(NOT FILE_ID STREQUAL MODULES_ID)
  85. # MESSAGE("Regenerate modules info")
  86. # _AddModulesForced(${MLIST} ${WLIST})
  87. # ENDIF(NOT FILE_ID STREQUAL MODULES_ID)
  88. #ENDIF(NOT EXISTS "src/modules.c")
  89. ENDMACRO(AddModules MLIST WLIST)
  90. ############################# CONFIG SECTION #############################################
  91. # Initial set
  92. IF(CMAKE_INSTALL_PREFIX)
  93. SET(PREFIX ${CMAKE_INSTALL_PREFIX})
  94. ENDIF(CMAKE_INSTALL_PREFIX)
  95. LIST(APPEND CMAKE_REQUIRED_LIBRARIES m)
  96. # Try to detect platform for further configuration
  97. CHECK_C_SOURCE_COMPILES ("#if !defined(__x86_64) && !defined(__amd64) && !defined(_M_X64)
  98. #error assume 32 bit arch
  99. #endif
  100. int main() { return 0;}" AMD_64)
  101. IF(NOT BUILD_CPU_MODE)
  102. IF(AMD_64)
  103. SET (BUILD_CPU_MODE "64")
  104. ELSE(AMD_64)
  105. SET (BUILD_CPU_MODE "32")
  106. ENDIF(AMD_64)
  107. ENDIF(NOT BUILD_CPU_MODE)
  108. # Platform specific configuration
  109. IF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
  110. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_BSD_SOURCE -DFREEBSD")
  111. CONFIGURE_FILE(freebsd/rspamd.sh.in freebsd/rspamd @ONLY)
  112. IF(ENABLE_REDIRECTOR MATCHES "ON")
  113. CONFIGURE_FILE(freebsd/redirector.sh.in freebsd/redirector @ONLY)
  114. ENDIF(ENABLE_REDIRECTOR MATCHES "ON")
  115. IF(CMAKE_INSTALL_PREFIX)
  116. IF(NOT ETC_PREFIX)
  117. SET(ETC_PREFIX "${CMAKE_INSTALL_PREFIX}/etc")
  118. ENDIF(NOT ETC_PREFIX)
  119. IF(NOT MAN_PREFIX)
  120. SET(MAN_PREFIX "${CMAKE_INSTALL_PREFIX}/man")
  121. ENDIF(NOT MAN_PREFIX)
  122. IF(NOT LOCALSTATES_PREFIX)
  123. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  124. ENDIF(NOT LOCALSTATES_PREFIX)
  125. SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
  126. ELSE(CMAKE_INSTALL_PREFIX)
  127. IF(NOT ETC_PREFIX)
  128. SET(ETC_PREFIX /usr/local/etc)
  129. ENDIF(NOT ETC_PREFIX)
  130. IF(NOT MAN_PREFIX)
  131. SET(MAN_PREFIX /usr/local/man)
  132. ENDIF(NOT MAN_PREFIX)
  133. IF(NOT LOCALSTATES_PREFIX)
  134. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  135. ENDIF(NOT LOCALSTATES_PREFIX)
  136. IF(NOT PREFIX)
  137. SET(PREFIX /usr/local)
  138. ENDIF(NOT PREFIX)
  139. ENDIF(CMAKE_INSTALL_PREFIX)
  140. FIND_LIBRARY(LIBINTL_LIBRARY NAMES intl PATHS /lib
  141. /opt/lib
  142. /usr/lib
  143. /usr/local/lib
  144. DOC "Path where the libintl library can be found")
  145. LIST(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBINTL_LIBRARY})
  146. MESSAGE(STATUS "Configuring for FreeBSD")
  147. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
  148. IF(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  149. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_BSD_SOURCE -DDARWIN")
  150. IF(CMAKE_INSTALL_PREFIX)
  151. IF(NOT ETC_PREFIX)
  152. SET(ETC_PREFIX "${CMAKE_INSTALL_PREFIX}/etc")
  153. ENDIF(NOT ETC_PREFIX)
  154. IF(NOT MAN_PREFIX)
  155. SET(MAN_PREFIX "${CMAKE_INSTALL_PREFIX}/man")
  156. ENDIF(NOT MAN_PREFIX)
  157. IF(NOT LOCALSTATES_PREFIX)
  158. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  159. ENDIF(NOT LOCALSTATES_PREFIX)
  160. SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
  161. ELSE(CMAKE_INSTALL_PREFIX)
  162. IF(NOT ETC_PREFIX)
  163. SET(ETC_PREFIX /usr/local/etc)
  164. ENDIF(NOT ETC_PREFIX)
  165. IF(NOT MAN_PREFIX)
  166. SET(MAN_PREFIX /usr/local/man)
  167. ENDIF(NOT MAN_PREFIX)
  168. IF(NOT LOCALSTATES_PREFIX)
  169. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  170. ENDIF(NOT LOCALSTATES_PREFIX)
  171. IF(NOT PREFIX)
  172. SET(PREFIX /usr/local)
  173. ENDIF(NOT PREFIX)
  174. ENDIF(CMAKE_INSTALL_PREFIX)
  175. FIND_LIBRARY(LIBINTL_LIBRARY NAMES intl PATHS /lib
  176. /opt/lib
  177. /usr/lib
  178. /usr/local/lib
  179. DOC "Path where the libintl library can be found")
  180. LIST(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBINTL_LIBRARY})
  181. MESSAGE(STATUS "Configuring for Darwin")
  182. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  183. IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  184. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -DLINUX")
  185. IF(CMAKE_INSTALL_PREFIX)
  186. IF(NOT ETC_PREFIX)
  187. SET(ETC_PREFIX "${CMAKE_INSTALL_PREFIX}/etc")
  188. ENDIF(NOT ETC_PREFIX)
  189. IF(NOT MAN_PREFIX)
  190. SET(MAN_PREFIX "${CMAKE_INSTALL_PREFIX}/share/man")
  191. ENDIF(NOT MAN_PREFIX)
  192. IF(NOT LOCALSTATES_PREFIX)
  193. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  194. ENDIF(NOT LOCALSTATES_PREFIX)
  195. SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
  196. ELSE(CMAKE_INSTALL_PREFIX)
  197. IF(NOT ETC_PREFIX)
  198. SET(ETC_PREFIX /etc)
  199. ENDIF(NOT ETC_PREFIX)
  200. IF(NOT PREFIX)
  201. SET(PREFIX /usr)
  202. ENDIF(NOT PREFIX)
  203. IF(NOT MAN_PREFIX)
  204. SET(MAN_PREFIX /usr/share/man)
  205. ENDIF(NOT MAN_PREFIX)
  206. IF(NOT LOCALSTATES_PREFIX)
  207. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  208. ENDIF(NOT LOCALSTATES_PREFIX)
  209. ENDIF(CMAKE_INSTALL_PREFIX)
  210. IF(BUILD_CPU_MODE STREQUAL "32")
  211. SET(CMAKE_C_FLAGS "-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE ${CMAKE_C_FLAGS}")
  212. ENDIF(BUILD_CPU_MODE STREQUAL "32")
  213. # Workaround with architecture specific includes
  214. IF(IS_DIRECTORY "/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/")
  215. INCLUDE_DIRECTORIES("/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/")
  216. SET(CMAKE_REQUIRED_INCLUDES "/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/")
  217. ENDIF(IS_DIRECTORY "/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/")
  218. LIST(APPEND CMAKE_REQUIRED_LIBRARIES rt)
  219. LIST(APPEND CMAKE_REQUIRED_LIBRARIES dl)
  220. MESSAGE(STATUS "Configuring for Linux")
  221. IF(EXISTS "/etc/debian_version")
  222. SET(LINUX_START_SCRIPT "rspamd_debian.in")
  223. ELSE(EXISTS "/etc/debian_version")
  224. SET(LINUX_START_SCRIPT "rspamd_rh.in")
  225. ENDIF(EXISTS "/etc/debian_version")
  226. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  227. IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
  228. IF(NOT BUILD_CPU_MODE)
  229. SET (BUILD_CPU_MODE "32")
  230. ENDIF(NOT BUILD_CPU_MODE)
  231. IF("${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
  232. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Xa -xregs=no%frameptr -xstrconst -xc99")
  233. SET(SUN_BUILD32 "-xtarget=generic")
  234. SET(SUN_BUILD64 "-xtarget=generic64")
  235. IF(ENABLE_OPTIMIZATION MATCHES "ON")
  236. SET(CMAKE_C_OPT_FLAGS "-fast -xdepend")
  237. ELSE(ENABLE_OPTIMIZATION MATCHES "ON")
  238. SET(CMAKE_C_OPT_FLAGS "-xO0")
  239. ENDIF(ENABLE_OPTIMIZATION MATCHES "ON")
  240. ELSE("${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
  241. set(SUN_BUILD32 "-m32")
  242. set(SUN_BUILD64 "-m64")
  243. ENDIF("${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
  244. IF (BUILD_CPU_MODE STREQUAL "32")
  245. message (STATUS "Building 32-bit mode on Solaris")
  246. # If we are asked to build 32 bit mode
  247. set(CMAKE_C_FLAGS "${SUN_BUILD32} ${CMAKE_C_FLAGS}")
  248. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${SUN_BUILD32}")
  249. ELSE (BUILD_CPU_MODE STREQUAL "32")
  250. # solaris 64-bit mode
  251. message (STATUS "Building 64-bit mode on Solaris")
  252. set(CMAKE_C_FLAGS "${SUN_BUILD64} ${CMAKE_C_FLAGS}")
  253. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${SUN_BUILD64}")
  254. ENDIF (BUILD_CPU_MODE STREQUAL "32")
  255. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__EXTENSIONS__ -DSOLARIS -D_POSIX_SOURCE -D_POSIX_C_SOURCE=200112L")
  256. IF(CMAKE_INSTALL_PREFIX)
  257. IF(NOT ETC_PREFIX)
  258. SET(ETC_PREFIX "${CMAKE_INSTALL_PREFIX}/etc")
  259. ENDIF(NOT ETC_PREFIX)
  260. IF(NOT MAN_PREFIX)
  261. SET(MAN_PREFIX "${CMAKE_INSTALL_PREFIX}/man")
  262. ENDIF(NOT MAN_PREFIX)
  263. IF(NOT LOCALSTATES_PREFIX)
  264. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  265. ENDIF(NOT LOCALSTATES_PREFIX)
  266. SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
  267. ELSE(CMAKE_INSTALL_PREFIX)
  268. IF(NOT ETC_PREFIX)
  269. SET(ETC_PREFIX /etc)
  270. ENDIF(NOT ETC_PREFIX)
  271. IF(NOT PREFIX)
  272. SET(PREFIX /usr)
  273. ENDIF(NOT PREFIX)
  274. IF(NOT MAN_PREFIX)
  275. SET(MAN_PREFIX /usr/share/man)
  276. ENDIF(NOT MAN_PREFIX)
  277. IF(NOT LOCALSTATES_PREFIX)
  278. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  279. ENDIF(NOT LOCALSTATES_PREFIX)
  280. ENDIF(CMAKE_INSTALL_PREFIX)
  281. LIST(APPEND CMAKE_REQUIRED_LIBRARIES rt)
  282. LIST(APPEND CMAKE_REQUIRED_LIBRARIES dl)
  283. LIST(APPEND CMAKE_REQUIRED_LIBRARIES resolv)
  284. LIST(APPEND CMAKE_REQUIRED_LIBRARIES nsl)
  285. LIST(APPEND CMAKE_REQUIRED_LIBRARIES socket)
  286. LIST(APPEND CMAKE_REQUIRED_LIBRARIES umem)
  287. # Ugly hack, but FindOpenSSL on Solaris does not link with libcrypto
  288. LIST(APPEND CMAKE_REQUIRED_LIBRARIES crypto)
  289. SET(CMAKE_VERBOSE_MAKEFILE ON)
  290. SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
  291. SET(CMAKE_INSTALL_RPATH "${PREFIX}/lib")
  292. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
  293. # Set libdir
  294. IF(NOT LIBDIR)
  295. SET(LIBDIR lib/rspamd)
  296. IF(NOT CMAKE_INSTALL_RPATH)
  297. SET(CMAKE_INSTALL_RPATH ${PREFIX}/${LIBDIR})
  298. ENDIF(NOT CMAKE_INSTALL_RPATH)
  299. ENDIF(NOT LIBDIR)
  300. # Set includedir
  301. IF(NOT INCLUDEDIR)
  302. SET(INCLUDEDIR include/rspamd)
  303. ENDIF(NOT INCLUDEDIR)
  304. # Check prefixes
  305. IF(NOT ETC_PREFIX)
  306. IF(CMAKE_INSTALL_PREFIX)
  307. 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}")
  308. SET(ETC_PREFIX "${CMAKE_INSTALL_PREFIX}/etc")
  309. ELSE(CMAKE_INSTALL_PREFIX)
  310. MESSAGE(FATAL_ERROR "Your system is unknown for rspamd and no CMAKE_INSTALL_PREFIX specified, assume defining CMAKE_INSTALL_PREFIX")
  311. ENDIF(CMAKE_INSTALL_PREFIX)
  312. MESSAGE(STATUS "Configuring for ${CMAKE_SYSTEM_NAME}")
  313. ENDIF(NOT ETC_PREFIX)
  314. IF(NOT MAN_PREFIX)
  315. IF(CMAKE_INSTALL_PREFIX)
  316. SET(MAN_PREFIX "${CMAKE_INSTALL_PREFIX}/man")
  317. ENDIF(CMAKE_INSTALL_PREFIX)
  318. ENDIF(NOT MAN_PREFIX)
  319. IF(NOT LOCALSTATES_PREFIX)
  320. IF(CMAKE_INSTALL_PREFIX)
  321. SET(LOCALSTATES_PREFIX "/var/run/rspamd")
  322. ENDIF(CMAKE_INSTALL_PREFIX)
  323. ENDIF(NOT LOCALSTATES_PREFIX)
  324. # Now CMAKE_INSTALL_PREFIX is a base prefix for everything
  325. # ETC_PREFIX - for configuration
  326. # MAN_PREFIX - for manual pages
  327. # LOCALSTATES_PREFIX - for runtime files
  328. # Now find libraries and headers
  329. # Find lua libraries
  330. IF(NOT LUA_VERSION_MAJOR OR NOT LUA_VERSION_MINOR)
  331. SET(LUA_VERSION_MAJOR "5")
  332. SET(LUA_VERSION_MINOR "1")
  333. ENDIF(NOT LUA_VERSION_MAJOR OR NOT LUA_VERSION_MINOR)
  334. FIND_PATH(LUA_INCLUDE_DIR lua.h
  335. HINTS
  336. $ENV{LUA_DIR}
  337. PATH_SUFFIXES "include/lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
  338. "include/lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
  339. include/lua include
  340. PATHS
  341. /usr/local
  342. /usr
  343. ~/Library/Frameworks
  344. /Library/Frameworks
  345. /sw # Fink
  346. /opt/local # DarwinPorts
  347. /opt/csw # Blastwave
  348. /opt
  349. )
  350. FIND_LIBRARY(LUA_LIBRARY
  351. NAMES lua
  352. "lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
  353. "lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
  354. "lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
  355. HINTS
  356. $ENV{LUA_DIR}
  357. PATH_SUFFIXES lib64 lib
  358. PATHS
  359. /usr/local
  360. /usr
  361. ~/Library/Frameworks
  362. /Library/Frameworks
  363. /sw
  364. /opt/local
  365. /opt/csw
  366. /opt
  367. DOC "Lua library"
  368. )
  369. IF(LUA_LIBRARY AND LUA_INCLUDE_DIR)
  370. SET(LUA_FOUND 1)
  371. ENDIF(LUA_LIBRARY AND LUA_INCLUDE_DIR)
  372. # Check for luajit
  373. IF(ENABLE_LUAJIT MATCHES "ON")
  374. FIND_LIBRARY(LUAJIT_LIBRARY NAMES
  375. "luajit${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
  376. "luajit${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
  377. "luajit-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
  378. luajit
  379. HINTS
  380. $ENV{LUA_DIR}
  381. PATH_SUFFIXES lib64 lib
  382. PATHS
  383. ~/Library/Frameworks
  384. /Library/Frameworks
  385. /usr/local
  386. /usr
  387. /sw
  388. /opt/local
  389. /opt/csw
  390. /opt
  391. )
  392. IF(NOT LUAJIT_LIBRARY)
  393. MESSAGE(FATAL_ERROR "Luajit not found but enabled in configuration")
  394. ENDIF(NOT LUAJIT_LIBRARY)
  395. ENDIF(ENABLE_LUAJIT MATCHES "ON")
  396. IF(NOT LUA_FOUND)
  397. MESSAGE(FATAL_ERROR "Lua not found, lua support is required for working")
  398. ELSE(NOT LUA_FOUND)
  399. SET(WITH_LUA 1)
  400. INCLUDE_DIRECTORIES("${LUA_INCLUDE_DIR}")
  401. ENDIF(NOT LUA_FOUND)
  402. # Check and link to pcre
  403. pkg_check_modules(PCRE REQUIRED libpcre)
  404. IF(PCRE_INCLUDE_DIRS)
  405. INCLUDE_DIRECTORIES("${PCRE_INCLUDE_DIRS}")
  406. ENDIF(PCRE_INCLUDE_DIRS)
  407. IF(PCRE_LIBRARY_DIRS)
  408. LINK_DIRECTORIES("${PCRE_LIBRARY_DIRS}")
  409. ENDIF(PCRE_LIBRARY_DIRS)
  410. IF(ENABLE_SQLITE MATCHES "ON")
  411. # Find optional sqlite3 support
  412. pkg_check_modules(SQLITE sqlite3>=3.6.0)
  413. IF(SQLITE_FOUND)
  414. SET(WITH_SQLITE 1)
  415. ENDIF(SQLITE_FOUND)
  416. IF(SQLITE_INCLUDE_DIRS)
  417. INCLUDE_DIRECTORIES("${SQLITE_INCLUDE_DIRS}")
  418. ENDIF(SQLITE_INCLUDE_DIRS)
  419. IF(SQLITE_LIBRARY_DIRS)
  420. LINK_DIRECTORIES("${SQLITE_LIBRARY_DIRS}")
  421. ENDIF(SQLITE_LIBRARY_DIRS)
  422. ENDIF(ENABLE_SQLITE MATCHES "ON")
  423. #Check for openssl (required for dkim)
  424. IF(OPENSSL_FOUND)
  425. SET(HAVE_OPENSSL 1)
  426. INCLUDE_DIRECTORIES("${OPENSSL_INCLUDE_DIR}")
  427. ENDIF(OPENSSL_FOUND)
  428. IF(ENABLE_STATIC MATCHES "ON")
  429. pkg_check_modules(GLIB2 REQUIRED glib-2.0>=2.12 gthread-2.0 gmodule-2.0)
  430. SET(LINK_TYPE "STATIC")
  431. ELSE(ENABLE_STATIC MATCHES "ON")
  432. pkg_check_modules(GLIB2 REQUIRED glib-2.0>=2.12 gthread-2.0 gmodule-2.0)
  433. IF(NO_SHARED MATCHES "OFF")
  434. SET(LINK_TYPE "SHARED")
  435. ELSE(NO_SHARED MATCHES "OFF")
  436. SET(LINK_TYPE "STATIC")
  437. ENDIF(NO_SHARED MATCHES "OFF")
  438. ENDIF(ENABLE_STATIC MATCHES "ON")
  439. SET(GLIB2_VERSION "${GLIB2_glib-2.0_VERSION}")
  440. IF(GLIB2_VERSION VERSION_GREATER "2.30.0")
  441. pkg_check_modules(LIBFFI libffi)
  442. IF(LIBFFI_FOUND)
  443. SET(GLIB2_LDFLAGS "${GLIB2_LDFLAGS};${LIBFFI_LDFLAGS}")
  444. SET(GLIB2_LIBRARIES "${GLIB2_LIBRARIES};${LIBFFI_LIBRARIES}")
  445. SET(GLIB2_STATIC_LDFLAGS "${GLIB2_STATIC_LDFLAGS};${LIBFFI_STATIC_LDFLAGS}")
  446. SET(GLIB2_CFLAGS "${GLIB2_CFLAGS};${LIBFFI_CFLAGS}")
  447. ENDIF(LIBFFI_FOUND)
  448. ENDIF(GLIB2_VERSION VERSION_GREATER "2.30.0")
  449. pkg_check_modules(GMIME2 gmime-2.0)
  450. IF(ENABLE_HIREDIS MATCHES "ON")
  451. # Try to find hiredis library
  452. pkg_check_modules(HIREDIS REQUIRED libhiredis)
  453. IF(HIREDIS_INCLUDE_DIRS)
  454. INCLUDE_DIRECTORIES("${HIREDIS_INCLUDE_DIRS}")
  455. ENDIF(HIREDIS_INCLUDE_DIRS)
  456. IF(HIREDIS_LIBRARY_DIRS)
  457. LINK_DIRECTORIES("${HIREDIS_LIBRARY_DIRS}")
  458. ENDIF(HIREDIS_LIBRARY_DIRS)
  459. IF(HIREDIS_FOUND)
  460. SET(WITH_SYSTEM_HIREDIS 1)
  461. ENDIF(HIREDIS_FOUND)
  462. ENDIF(ENABLE_HIREDIS MATCHES "ON")
  463. # Try to link with gmime24
  464. IF(NOT GMIME2_FOUND OR FORCE_GMIME24)
  465. pkg_check_modules(GMIME24 gmime-2.4)
  466. IF(NOT GMIME24_FOUND)
  467. pkg_check_modules(GMIME24 REQUIRED gmime-2.6)
  468. ENDIF(NOT GMIME24_FOUND)
  469. SET(GMIME24 "yes")
  470. # Gmime2
  471. FOREACH(arg ${GMIME24_CFLAGS})
  472. SET(GMIME_CFLAGS "${GMIME_CFLAGS} ${arg}")
  473. ENDFOREACH(arg ${GMIME24_CFLAGS})
  474. IF(ENABLE_STATIC MATCHES "ON")
  475. FOREACH(arg ${GMIME24_STATIC_LDFLAGS})
  476. SET(GMIME_LDFLAGS "${GMIME_LDFLAGS} ${arg}")
  477. ENDFOREACH(arg ${GMIME24_LDFLAGS})
  478. ELSE(ENABLE_STATIC MATCHES "ON")
  479. FOREACH(arg ${GMIME24_LDFLAGS})
  480. SET(GMIME_LDFLAGS "${GMIME_LDFLAGS} ${arg}")
  481. ENDFOREACH(arg ${GMIME24_LDFLAGS})
  482. ENDIF(ENABLE_STATIC MATCHES "ON")
  483. IF(GMIME24_INCLUDE_DIRS)
  484. INCLUDE_DIRECTORIES(${GMIME24_INCLUDE_DIRS})
  485. ENDIF(GMIME24_INCLUDE_DIRS)
  486. IF(GMIME24_LIBRARY_DIRS)
  487. LINK_DIRECTORIES(${GMIME24_LIBRARY_DIRS})
  488. ENDIF(GMIME24_LIBRARY_DIRS)
  489. ELSE(NOT GMIME2_FOUND OR FORCE_GMIME24)
  490. # Gmime2
  491. FOREACH(arg ${GMIME2_CFLAGS})
  492. SET(GMIME_CFLAGS "${GMIME_CFLAGS} ${arg}")
  493. ENDFOREACH(arg ${GMIME2_CFLAGS})
  494. IF(ENABLE_STATIC MATCHES "ON")
  495. FOREACH(arg ${GMIME2_STATIC_LDFLAGS})
  496. SET(GMIME_LDFLAGS "${GMIME_LDFLAGS} ${arg}")
  497. ENDFOREACH(arg ${GMIME2_LDFLAGS})
  498. ELSE(ENABLE_STATIC MATCHES "ON")
  499. FOREACH(arg ${GMIME2_LDFLAGS})
  500. SET(GMIME_LDFLAGS "${GMIME_LDFLAGS} ${arg}")
  501. ENDFOREACH(arg ${GMIME2_LDFLAGS})
  502. ENDIF(ENABLE_STATIC MATCHES "ON")
  503. IF(GMIME2_INCLUDE_DIRS)
  504. INCLUDE_DIRECTORIES(${GMIME2_INCLUDE_DIRS})
  505. ENDIF(GMIME2_INCLUDE_DIRS)
  506. IF(GMIME2_LIBRARY_DIRS)
  507. LINK_DIRECTORIES(${GMIME2_LIBRARY_DIRS})
  508. ENDIF(GMIME2_LIBRARY_DIRS)
  509. ENDIF(NOT GMIME2_FOUND OR FORCE_GMIME24)
  510. # Make from ; separated list normal space separated list
  511. # Glib2
  512. FOREACH(arg ${GLIB2_CFLAGS})
  513. SET(GLIB_CFLAGS "${GLIB_CFLAGS} ${arg}")
  514. ENDFOREACH(arg ${GLIB2_CFLAGS})
  515. IF(ENABLE_STATIC MATCHES "ON")
  516. FOREACH(arg ${GLIB2_STATIC_LDFLAGS})
  517. SET(GLIB_LDFLAGS "${GLIB_LDFLAGS} ${arg}")
  518. ENDFOREACH(arg ${GLIB2_LDFLAGS})
  519. ELSE(ENABLE_STATIC MATCHES "ON")
  520. FOREACH(arg ${GLIB2_LDFLAGS})
  521. SET(GLIB_LDFLAGS "${GLIB_LDFLAGS} ${arg}")
  522. ENDFOREACH(arg ${GLIB2_LDFLAGS})
  523. ENDIF(ENABLE_STATIC MATCHES "ON")
  524. INCLUDE_DIRECTORIES(${GLIB2_INCLUDE_DIRS})
  525. LINK_DIRECTORIES(${GLIB2_LIBRARY_DIRS})
  526. FIND_LIBRARY(LIBZ_LIBRARY NAMES z PATH_SUFFIXES lib64 lib
  527. PATHS
  528. ~/Library/Frameworks
  529. /Library/Frameworks
  530. /usr/local
  531. /usr
  532. /sw
  533. /opt/local
  534. /opt/csw
  535. /opt
  536. DOC "Path where the libz library can be found")
  537. IF(NOT LIBZ_LIBRARY)
  538. MESSAGE(FATAL_ERROR "libz is required for libgmime")
  539. ENDIF(NOT LIBZ_LIBRARY)
  540. # Check for libevent
  541. FIND_LIBRARY(LIBEVENT_LIBRARY NAMES event PATH_SUFFIXES lib64 lib
  542. PATHS
  543. ~/Library/Frameworks
  544. /Library/Frameworks
  545. /usr/local
  546. /usr
  547. /sw
  548. /opt/local
  549. /opt/csw
  550. /opt
  551. DOC "Path where the libevent library can be found")
  552. IF(NOT LIBEVENT_LIBRARY)
  553. MESSAGE(FATAL_ERROR "libevent is required for building rspamd")
  554. ENDIF(NOT LIBEVENT_LIBRARY)
  555. FIND_PATH(LIBEVENT_INCLUDE event.h PATHS /opt/include
  556. /usr/include
  557. /usr/local/include
  558. DOC "Path where the libevent header files can be found")
  559. FIND_PATH(LIBEVENT_EVHTTP evhttp.h PATHS /opt/include
  560. /usr/include
  561. /usr/local/include
  562. DOC "Path where the libevhttp header files can be found")
  563. GET_FILENAME_COMPONENT(LIBEVENT_PATH "${LIBEVENT_LIBRARY}" PATH)
  564. INCLUDE_DIRECTORIES("${LIBEVENT_INCLUDE}")
  565. LINK_DIRECTORIES("${LIBEVENT_PATH}")
  566. IF(ENABLE_JUDY MATCHES "ON")
  567. # Find libjudy
  568. FIND_LIBRARY(LIBJUDY_LIBRARY NAMES Judy PATH_SUFFIXES lib64 lib
  569. PATHS
  570. ~/Library/Frameworks
  571. /Library/Frameworks
  572. /usr/local
  573. /usr
  574. /sw
  575. /opt/local
  576. /opt/csw
  577. /opt
  578. DOC "Path where the libjudy library can be found")
  579. IF(LIBJUDY_LIBRARY)
  580. FIND_PATH(LIBJUDY_INCLUDE Judy.h PATHS /opt/include
  581. /usr/include
  582. /usr/local/include
  583. DOC "Path where the judy header files can be found")
  584. GET_FILENAME_COMPONENT(LIBJUDY_PATH "${LIBJUDY_LIBRARY}" PATH)
  585. INCLUDE_DIRECTORIES("${LIBJUDY_INCLUDE}")
  586. LINK_DIRECTORIES("${LIBJUDY_PATH}")
  587. SET(WITH_JUDY 1)
  588. ENDIF(LIBJUDY_LIBRARY)
  589. ENDIF(ENABLE_JUDY MATCHES "ON")
  590. # Find libbd
  591. IF(ENABLE_DB MATCHES "ON")
  592. FIND_LIBRARY(LIBDB_LIBRARY NAMES db PATHS PATH_SUFFIXES lib64 lib
  593. PATHS
  594. ~/Library/Frameworks
  595. /Library/Frameworks
  596. /usr/local
  597. /usr
  598. /sw
  599. /opt/local
  600. /opt/csw
  601. /opt
  602. DOC "Path where the libdb library can be found")
  603. IF(LIBDB_LIBRARY)
  604. FIND_PATH(LIBDB_INCLUDE db.h PATHS /opt/include
  605. /usr/include
  606. /usr/local/include
  607. DOC "Path where the bdb header files can be found")
  608. GET_FILENAME_COMPONENT(LIBDB_PATH "${LIBDB_LIBRARY}" PATH)
  609. INCLUDE_DIRECTORIES("${LIBDB_INCLUDE}")
  610. LINK_DIRECTORIES("${LIBDB_PATH}")
  611. SET(WITH_DB 1)
  612. ENDIF(LIBDB_LIBRARY)
  613. ENDIF(ENABLE_DB MATCHES "ON")
  614. IF(ENABLE_PROFILING MATCHES "ON")
  615. SET(WITH_PROFILER 1)
  616. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
  617. SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg")
  618. ENDIF(ENABLE_PROFILING MATCHES "ON")
  619. # Static build
  620. IF(ENABLE_STATIC MATCHES "ON")
  621. SET(BUILD_STATIC 1)
  622. SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -pthread")
  623. MESSAGE(STATUS "Static build of rspamd, no custom plugins support")
  624. ENDIF(ENABLE_STATIC MATCHES "ON")
  625. # Google performance tools
  626. IF(ENABLE_GPERF_TOOLS MATCHES "ON")
  627. FIND_PATH(GPERF_INCLUDE google/profiler.h PATHS /opt/include
  628. /usr/include
  629. /usr/local/include
  630. DOC "Path where google perftools includes can be found")
  631. INCLUDE_DIRECTORIES("${GPERF_INCLUDE}")
  632. FIND_LIBRARY(GPERF_LIBRARY NAMES profiler PATH_SUFFIXES lib64 lib
  633. PATHS
  634. ~/Library/Frameworks
  635. /Library/Frameworks
  636. /usr/local
  637. /usr
  638. /sw
  639. /opt/local
  640. /opt/csw
  641. /opt
  642. DOC "Path where the gperf library can be found")
  643. IF(NOT GPERF_LIBRARY)
  644. MESSAGE(FATAL_ERROR "gperf tools support is enabled but not found in system")
  645. ENDIF(NOT GPERF_LIBRARY)
  646. GET_FILENAME_COMPONENT(GPERF_PATH "${GPERF_LIBRARY}" PATH)
  647. LINK_DIRECTORIES("${GPERF_PATH}")
  648. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer")
  649. SET(WITH_GPERF_TOOLS 1)
  650. ENDIF(ENABLE_GPERF_TOOLS MATCHES "ON")
  651. # Find util library
  652. FIND_LIBRARY(LIBUTIL_LIBRARY NAMES util PATHS PATH_SUFFIXES lib64 lib
  653. PATHS
  654. ~/Library/Frameworks
  655. /Library/Frameworks
  656. /usr/local
  657. /usr
  658. /sw
  659. /opt/local
  660. /opt/csw
  661. /opt
  662. DOC "Path where the libutil library can be found")
  663. IF(LIBUTIL_LIBRARY)
  664. LIST(APPEND CMAKE_REQUIRED_LIBRARIES util)
  665. CHECK_FUNCTION_EXISTS(pidfile_open HAVE_PIDFILE)
  666. CHECK_FUNCTION_EXISTS(pidfile_fileno HAVE_PIDFILE_FILENO)
  667. FIND_FILE(HAVE_LIBUTIL_H NAMES libutil.h PATHS /usr/include
  668. /opt/include
  669. /usr/local/include
  670. DOC "Path to libutil header")
  671. ENDIF(LIBUTIL_LIBRARY)
  672. # Process with warn flags
  673. SET(CMAKE_C_WARN_FLAGS "")
  674. CHECK_C_COMPILER_FLAG(-Wall SUPPORT_WALL)
  675. CHECK_C_COMPILER_FLAG(-W SUPPORT_W)
  676. CHECK_C_COMPILER_FLAG(-Wpointer-arith SUPPORT_WPOINTER)
  677. CHECK_C_COMPILER_FLAG(-Wno-unused-parameter SUPPORT_WPARAM)
  678. CHECK_C_COMPILER_FLAG(-Wno-unused-function SUPPORT_WFUNCTION)
  679. CHECK_C_COMPILER_FLAG(-Wunused-variable SUPPORT_WUNUSED_VAR)
  680. CHECK_C_COMPILER_FLAG(-Wno-pointer-sign SUPPORT_WPOINTER_SIGN)
  681. CHECK_C_COMPILER_FLAG(-Wstrict-prototypes SUPPORT_WSTRICT_PROTOTYPES)
  682. CHECK_C_COMPILER_FLAG(-pedantic SUPPORT_PEDANTIC_FLAG)
  683. IF(NOT "${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
  684. CHECK_C_COMPILER_FLAG("-std=c99" SUPPORT_STD_FLAG)
  685. ENDIF(NOT "${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
  686. IF(SUPPORT_W)
  687. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -W")
  688. ENDIF(SUPPORT_W)
  689. IF(SUPPORT_WALL)
  690. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wall")
  691. ENDIF(SUPPORT_WALL)
  692. IF(SUPPORT_WPOINTER)
  693. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wpointer-arith")
  694. ENDIF(SUPPORT_WPOINTER)
  695. IF(SUPPORT_WPARAM)
  696. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-unused-parameter")
  697. ENDIF(SUPPORT_WPARAM)
  698. IF(SUPPORT_WFUNCTION)
  699. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-unused-function")
  700. ENDIF(SUPPORT_WFUNCTION)
  701. IF(SUPPORT_WUNUSED_VAR)
  702. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wunused-variable")
  703. ENDIF(SUPPORT_WUNUSED_VAR)
  704. IF(SUPPORT_WPOINTER_SIGN)
  705. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-pointer-sign")
  706. ENDIF(SUPPORT_WPOINTER_SIGN)
  707. IF(SUPPORT_WSTRICT_PROTOTYPES)
  708. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wstrict-prototypes")
  709. ENDIF(SUPPORT_WSTRICT_PROTOTYPES)
  710. IF(SUPPORT_PEDANTIC_FLAG)
  711. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -pedantic")
  712. ENDIF(SUPPORT_PEDANTIC_FLAG)
  713. IF(SUPPORT_STD_FLAG)
  714. SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -std=c99")
  715. ENDIF(SUPPORT_STD_FLAG)
  716. CHECK_C_COMPILER_FLAG(-fPIC SUPPORT_FPIC)
  717. IF(SUPPORT_FPIC)
  718. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
  719. ENDIF(SUPPORT_FPIC)
  720. CHECK_C_COMPILER_FLAG(-fpic SUPPORT_Fpic)
  721. IF(SUPPORT_Fpic)
  722. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpic")
  723. ENDIF(SUPPORT_Fpic)
  724. # Optimization flags
  725. IF(NOT CMAKE_C_OPT_FLAGS)
  726. IF(ENABLE_OPTIMIZATION MATCHES "ON")
  727. SET(CMAKE_C_OPT_FLAGS "-O3 -fstrict-aliasing")
  728. ELSE(ENABLE_OPTIMIZATION MATCHES "ON")
  729. SET(CMAKE_C_OPT_FLAGS "-O0 -fstrict-aliasing")
  730. ENDIF(ENABLE_OPTIMIZATION MATCHES "ON")
  731. ENDIF(NOT CMAKE_C_OPT_FLAGS)
  732. IF(DEBUG_MODE MATCHES "ON")
  733. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
  734. ENDIF(DEBUG_MODE MATCHES "ON")
  735. SET(CMAKE_C_FLAGS "${CMAKE_C_OPT_FLAGS} ${CMAKE_C_FLAGS} ${CMAKE_C_WARN_FLAGS}")
  736. # Check platform specific includes
  737. CHECK_INCLUDE_FILES(sys/types.h HAVE_SYS_TYPES_H)
  738. CHECK_INCLUDE_FILES(sys/time.h HAVE_SYS_TIME_H)
  739. CHECK_INCLUDE_FILES(sys/uio.h HAVE_SYS_UIO_H)
  740. CHECK_INCLUDE_FILES(fcntl.h HAVE_FCNTL_H)
  741. CHECK_INCLUDE_FILES(math.h HAVE_MATH_H)
  742. CHECK_INCLUDE_FILES(stdio.h HAVE_STDIO_H)
  743. CHECK_INCLUDE_FILES(stdlib.h HAVE_STDLIB_H)
  744. CHECK_INCLUDE_FILES(string.h HAVE_STRING_H)
  745. CHECK_INCLUDE_FILES(strings.h HAVE_STRINGS_H)
  746. CHECK_INCLUDE_FILES(time.h HAVE_TIME_H)
  747. CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H)
  748. CHECK_INCLUDE_FILES(sysexits.h HAVE_SYSEXITS_H)
  749. CHECK_INCLUDE_FILES(stdint.h HAVE_STDINT_H)
  750. CHECK_INCLUDE_FILES(inttypes.h HAVE_INTTYPES_H)
  751. CHECK_INCLUDE_FILES(endian.h HAVE_ENDIAN_H)
  752. CHECK_INCLUDE_FILES(sys/endian.h HAVE_SYS_ENDIAN_H)
  753. CHECK_INCLUDE_FILES(machine/endian.h HAVE_MACHINE_ENDIAN_H)
  754. CHECK_INCLUDE_FILES(sys/queue.h HAVE_SYS_QUEUE_H)
  755. CHECK_INCLUDE_FILES(sys/socket.h HAVE_SYS_SOCKET_H)
  756. CHECK_INCLUDE_FILES(sys/mman.h HAVE_SYS_MMAN_H)
  757. CHECK_INCLUDE_FILES(sys/un.h HAVE_SYS_UN_H)
  758. CHECK_INCLUDE_FILES(sys/stat.h HAVE_SYS_STAT_H)
  759. CHECK_INCLUDE_FILES(sys/wait.h HAVE_SYS_WAIT_H)
  760. CHECK_INCLUDE_FILES(sys/param.h HAVE_SYS_PARAM_H)
  761. CHECK_INCLUDE_FILES(sys/cdefs.h HAVE_SYS_CDEFS_H)
  762. CHECK_INCLUDE_FILES(sys/file.h HAVE_SYS_FILE_H)
  763. CHECK_INCLUDE_FILES(sys/utsname.h HAVE_SYS_UTSNAME_H)
  764. CHECK_INCLUDE_FILES(sys/resource.h HAVE_SYS_RESOURCE_H)
  765. CHECK_INCLUDE_FILES(netinet/in.h HAVE_NETINET_IN_H)
  766. CHECK_INCLUDE_FILES(arpa/inet.h HAVE_ARPA_INET_H)
  767. CHECK_INCLUDE_FILES(netdb.h HAVE_NETDB_H)
  768. CHECK_INCLUDE_FILES(syslog.h HAVE_SYSLOG_H)
  769. CHECK_INCLUDE_FILES(siginfo.h HAVE_SIGINFO_H)
  770. CHECK_INCLUDE_FILES(locale.h HAVE_LOCALE_H)
  771. CHECK_INCLUDE_FILES(libgen.h HAVE_LIBGEN_H)
  772. CHECK_INCLUDE_FILES(search.h HAVE_SEARCH_H)
  773. CHECK_INCLUDE_FILES(pwd.h HAVE_PWD_H)
  774. CHECK_INCLUDE_FILES(grp.h HAVE_GRP_H)
  775. CHECK_INCLUDE_FILES(glob.h HAVE_GLOB_H)
  776. CHECK_INCLUDE_FILES(poll.h HAVE_POLL_H)
  777. CHECK_INCLUDE_FILES(sys/sendfile.h HAVE_SYS_SENDFILE_H)
  778. CHECK_INCLUDE_FILES(linux/falloc.h HAVE_LINUX_FALLOC_H)
  779. CHECK_INCLUDE_FILES(sys/eventfd.h HAVE_SYS_EVENTFD_H)
  780. CHECK_INCLUDE_FILES(aio.h HAVE_AIO_H)
  781. CHECK_INCLUDE_FILES(libaio.h HAVE_LIBAIO_H)
  782. # Some dependencies
  783. IF(HAVE_SYS_WAIT_H)
  784. LIST(APPEND CMAKE_REQUIRED_INCLUDES sys/wait.h)
  785. ENDIF(HAVE_SYS_WAIT_H)
  786. IF(HAVE_TIME_H)
  787. LIST(APPEND CMAKE_REQUIRED_INCLUDES time.h)
  788. ENDIF(HAVE_TIME_H)
  789. IF(HAVE_SYS_TIME_H)
  790. LIST(APPEND CMAKE_REQUIRED_INCLUDES sys/time.h)
  791. ENDIF(HAVE_SYS_TIME_H)
  792. # Check platform API
  793. CHECK_FUNCTION_EXISTS(setproctitle HAVE_SETPROCTITLE)
  794. CHECK_FUNCTION_EXISTS(getpagesize HAVE_GETPAGESIZE)
  795. CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
  796. CHECK_FUNCTION_EXISTS(vfork HAVE_VFORK)
  797. CHECK_FUNCTION_EXISTS(wait4 HAVE_WAIT4)
  798. CHECK_FUNCTION_EXISTS(waitpid HAVE_WAITPID)
  799. CHECK_FUNCTION_EXISTS(flock HAVE_FLOCK)
  800. CHECK_FUNCTION_EXISTS(tanhl HAVE_TANHL)
  801. CHECK_FUNCTION_EXISTS(expl HAVE_EXPL)
  802. CHECK_FUNCTION_EXISTS(exp2l HAVE_EXP2L)
  803. CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
  804. CHECK_FUNCTION_EXISTS(mkstemp HAVE_MKSTEMP)
  805. CHECK_FUNCTION_EXISTS(setitimer HAVE_SETITIMER)
  806. CHECK_FUNCTION_EXISTS(inet_pton HAVE_INET_PTON)
  807. CHECK_FUNCTION_EXISTS(clock_gettime HAVE_CLOCK_GETTIME)
  808. #
  809. # Check macros
  810. CHECK_SYMBOL_EXISTS(PATH_MAX limits.h HAVE_PATH_MAX)
  811. CHECK_SYMBOL_EXISTS(MAXPATHLEN sys/param.h HAVE_MAXPATHLEN)
  812. CHECK_SYMBOL_EXISTS(MAP_SHARED sys/mman.h HAVE_MMAP_SHARED)
  813. CHECK_SYMBOL_EXISTS(MAP_ANON sys/mman.h HAVE_MMAP_ANON)
  814. CHECK_SYMBOL_EXISTS(MAP_NOCORE sys/mman.h HAVE_MMAP_NOCORE)
  815. CHECK_SYMBOL_EXISTS(O_DIRECT fcntl.h HAVE_O_DIRECT)
  816. CHECK_SYMBOL_EXISTS(posix_fadvise fcntl.h HAVE_FADVISE)
  817. CHECK_SYMBOL_EXISTS(posix_fallocate fcntl.h HAVE_POSIX_FALLOCATE)
  818. CHECK_SYMBOL_EXISTS(fallocate fcntl.h HAVE_FALLOCATE)
  819. CHECK_SYMBOL_EXISTS(fdatasync unistd.h HAVE_FDATASYNC)
  820. CHECK_SYMBOL_EXISTS(_SC_NPROCESSORS_ONLN unistd.h HAVE_SC_NPROCESSORS_ONLN)
  821. CHECK_SYMBOL_EXISTS(setbit sys/param.h PARAM_H_HAS_BITSET)
  822. CHECK_SYMBOL_EXISTS(getaddrinfo "sys/types.h;sys/socket.h;netdb.h" HAVE_GETADDRINFO)
  823. IF(NOT HAVE_GETADDRINFO)
  824. MESSAGE(FATAL_ERROR "Your system does not support getaddrinfo call, please consider upgrading it to run rspamd")
  825. ENDIF(NOT HAVE_GETADDRINFO)
  826. IF(HAVE_SIGINFO_H)
  827. CHECK_SYMBOL_EXISTS(SA_SIGINFO "signal.h;siginfo.h" HAVE_SA_SIGINFO)
  828. ELSE(HAVE_SIGINFO_H)
  829. CHECK_SYMBOL_EXISTS(SA_SIGINFO "signal.h" HAVE_SA_SIGINFO)
  830. ENDIF(HAVE_SIGINFO_H)
  831. # Some hack for libevent 2.0
  832. CHECK_C_SOURCE_COMPILES ("#include <event.h>
  833. #if _EVENT_NUMERIC_VERSION < 0x02000000
  834. #error Unsupported
  835. #endif
  836. int main() { return 0;}" HAVE_LIBEVENT2)
  837. IF(NOT CMAKE_SYSTEM_NAME STREQUAL "SunOS")
  838. IF(HAVE_CLOCK_GETTIME)
  839. CHECK_SYMBOL_EXISTS(CLOCK_PROCESS_CPUTIME_ID time.h HAVE_CLOCK_PROCESS_CPUTIME_ID)
  840. CHECK_SYMBOL_EXISTS(CLOCK_VIRTUAL time.h HAVE_CLOCK_VIRTUAL)
  841. ELSE(HAVE_CLOCK_GETTIME)
  842. CHECK_INCLUDE_FILES(sys/timeb.h HAVE_SYS_TIMEB_H)
  843. ENDIF(HAVE_CLOCK_GETTIME)
  844. # Check asm pause instruction
  845. CHECK_C_SOURCE_COMPILES ("#include <sys/types.h>
  846. int main (int argc, char **argv) {
  847. __asm __volatile(\"pause\");
  848. return 0;
  849. }" HAVE_ASM_PAUSE)
  850. ENDIF(NOT CMAKE_SYSTEM_NAME STREQUAL "SunOS")
  851. # Check queue.h compatibility
  852. IF(NOT HAVE_COMPATIBLE_QUEUE_H)
  853. INCLUDE_DIRECTORIES(compat)
  854. ENDIF(NOT HAVE_COMPATIBLE_QUEUE_H)
  855. SET(CONTRIBSRC "")
  856. IF(NOT DESTDIR)
  857. SET(DESTDIR $ENV{DESTDIR})
  858. ENDIF(NOT DESTDIR)
  859. # Try to detect tip version from hg
  860. SET(ID "unknown")
  861. FIND_PROGRAM(HG "hg")
  862. IF(HG)
  863. EXECUTE_PROCESS(COMMAND "${HG}" id OUTPUT_VARIABLE HG_ID ERROR_QUIET)
  864. IF(HG_ID)
  865. STRING(REGEX MATCH ^[0-9a-z]+ ID "${HG_ID}")
  866. ELSE(HG_ID)
  867. FIND_FILE(HG_ARCH ".hg_archival.txt" "${CMAKE_CURRENT_SOURCE_DIR}")
  868. IF(HG_ARCH)
  869. FILE(READ ${HG_ARCH} HG_ID)
  870. IF(HG_ID)
  871. STRING(REGEX MATCH "node: [0-9a-z]+" _tmp "${HG_ID}")
  872. STRING(SUBSTRING "${_tmp}" 6 12 ID)
  873. ENDIF(HG_ID)
  874. ELSE(HG_ARCH)
  875. # Maybe this is git copy
  876. FIND_PROGRAM(GIT "git")
  877. IF(GIT)
  878. EXECUTE_PROCESS(COMMAND "${GIT}" --git-dir=${CMAKE_SOURCE_DIR}/.git branch -v OUTPUT_VARIABLE GIT_ID ERROR_QUIET)
  879. IF(GIT_ID)
  880. STRING(REGEX REPLACE "^. [0-9a-z]+ ([0-9a-f]+) .*" \\1 ID "${GIT_ID}")
  881. ENDIF(GIT_ID)
  882. ENDIF(GIT)
  883. ENDIF(HG_ARCH)
  884. ENDIF(HG_ID)
  885. ELSE(HG)
  886. # Now check .hg_archival.txt
  887. FIND_FILE(HG_ARCH ".hg_archival.txt" "${CMAKE_CURRENT_SOURCE_DIR}")
  888. IF(HG_ARCH)
  889. FILE(READ ${HG_ARCH} HG_ID)
  890. IF(HG_ID)
  891. STRING(REGEX MATCH "node: [0-9a-z]+" _tmp "${HG_ID}")
  892. STRING(SUBSTRING "${_tmp}" 6 12 ID)
  893. ENDIF(HG_ID)
  894. ELSE(HG_ARCH)
  895. # Maybe this is git copy
  896. FIND_PROGRAM(GIT "git")
  897. IF(GIT)
  898. EXECUTE_PROCESS(COMMAND "${GIT}" --git-dir=${CMAKE_SOURCE_DIR}/.git branch -v OUTPUT_VARIABLE GIT_ID ERROR_QUIET)
  899. IF(GIT_ID)
  900. STRING(REGEX REPLACE "^. [0-9a-z]+ ([0-9a-f]+) .*" \\1 ID "${GIT_ID}")
  901. ENDIF(GIT_ID)
  902. ENDIF(GIT)
  903. ENDIF(HG_ARCH)
  904. ENDIF(HG)
  905. ################################ SOURCES SECTION ###########################
  906. INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/src" "${CMAKE_BINARY_DIR}/src")
  907. SET(RSPAMDSRC src/modules.c
  908. src/controller.c
  909. src/fuzzy_storage.c
  910. src/lua_worker.c
  911. src/main.c
  912. src/map.c
  913. src/smtp.c
  914. src/smtp_proxy.c
  915. src/webui.c
  916. src/worker.c)
  917. SET(PLUGINSSRC src/plugins/surbl.c
  918. src/plugins/regexp.c
  919. src/plugins/chartable.c
  920. src/plugins/fuzzy_check.c
  921. src/plugins/spf.c
  922. src/plugins/dkim_check.c)
  923. SET(MODULES_LIST surbl regexp chartable fuzzy_check spf dkim)
  924. SET(WORKERS_LIST normal controller smtp smtp_proxy fuzzy lua webui)
  925. AddModules(MODULES_LIST WORKERS_LIST)
  926. ################################ SUBDIRS SECTION ###########################
  927. ADD_SUBDIRECTORY(contrib/lgpl)
  928. IF(GLIB_COMPAT)
  929. INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/contrib/lgpl")
  930. ENDIF(GLIB_COMPAT)
  931. IF(NOT HIREDIS_FOUND)
  932. ADD_SUBDIRECTORY(contrib/hiredis)
  933. INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/contrib/hiredis")
  934. ENDIF(NOT HIREDIS_FOUND)
  935. ADD_SUBDIRECTORY(src/lua)
  936. ADD_SUBDIRECTORY(src/json)
  937. ADD_SUBDIRECTORY(src/cdb)
  938. ADD_SUBDIRECTORY(lib)
  939. ADD_SUBDIRECTORY(src/client)
  940. ADD_SUBDIRECTORY(utils)
  941. ADD_SUBDIRECTORY(test)
  942. LIST(LENGTH PLUGINSSRC RSPAMD_MODULES_NUM)
  943. ############################ TARGETS SECTION ###############################
  944. CONFIGURE_FILE(config.h.in src/config.h)
  945. CONFIGURE_FILE(contrib/exim/local_scan.c.in contrib/exim/local_scan_rspamd.c @ONLY)
  946. CONFIGURE_FILE(conf/rspamd-basic.xml.in conf/rspamd.xml.sample @ONLY)
  947. ######################### LINK SECTION ###############################
  948. ADD_EXECUTABLE(rspamd ${RSPAMDSRC} ${CONTRIBSRC} ${PLUGINSSRC})
  949. SET_TARGET_PROPERTIES(rspamd PROPERTIES LINKER_LANGUAGE C)
  950. SET_TARGET_PROPERTIES(rspamd PROPERTIES COMPILE_FLAGS "-DRSPAMD_MAIN")
  951. IF(NOT DEBIAN_BUILD)
  952. SET_TARGET_PROPERTIES(rspamd PROPERTIES VERSION ${RSPAMD_VERSION})
  953. ENDIF(NOT DEBIAN_BUILD)
  954. TARGET_LINK_LIBRARIES(rspamd rspamd-mime)
  955. TARGET_LINK_LIBRARIES(rspamd rspamd-server)
  956. TARGET_LINK_LIBRARIES(rspamd rspamd-util)
  957. TARGET_LINK_LIBRARIES(rspamd rspamd-lua)
  958. IF(LIBJUDY_LIBRARY)
  959. TARGET_LINK_LIBRARIES(rspamd Judy)
  960. ENDIF(LIBJUDY_LIBRARY)
  961. TARGET_LINK_LIBRARIES(rspamd event)
  962. IF(HAVE_LIBEVENT2)
  963. TARGET_LINK_LIBRARIES(rspamd event_pthreads)
  964. ENDIF(HAVE_LIBEVENT2)
  965. IF(WITH_DB)
  966. TARGET_LINK_LIBRARIES(rspamd db)
  967. ENDIF(WITH_DB)
  968. IF(SQLITE_LIBRARIES)
  969. TARGET_LINK_LIBRARIES(rspamd ${SQLITE_LIBRARIES})
  970. ENDIF(SQLITE_LIBRARIES)
  971. IF(OPENSSL_FOUND)
  972. TARGET_LINK_LIBRARIES(rspamd ${OPENSSL_LIBRARIES})
  973. ENDIF(OPENSSL_FOUND)
  974. TARGET_LINK_LIBRARIES(rspamd ${PCRE_LIBRARIES})
  975. IF(GMIME24)
  976. TARGET_LINK_LIBRARIES(rspamd ${GMIME24_LIBRARIES})
  977. ELSE(GMIME24)
  978. TARGET_LINK_LIBRARIES(rspamd ${GMIME2_LIBRARIES})
  979. ENDIF(GMIME24)
  980. TARGET_LINK_LIBRARIES(rspamd ${GLIB2_LIBRARIES})
  981. TARGET_LINK_LIBRARIES(rspamd ${CMAKE_REQUIRED_LIBRARIES})
  982. IF(ENABLE_STATIC MATCHES "ON")
  983. TARGET_LINK_LIBRARIES(rspamd ${PCRE_LIBRARIES})
  984. TARGET_LINK_LIBRARIES(rspamd "z")
  985. ENDIF(ENABLE_STATIC MATCHES "ON")
  986. IF(ENABLE_LUAJIT MATCHES "ON")
  987. TARGET_LINK_LIBRARIES(rspamd "${LUAJIT_LIBRARY}")
  988. ELSE(ENABLE_LUAJIT MATCHES "ON")
  989. TARGET_LINK_LIBRARIES(rspamd "${LUA_LIBRARY}")
  990. ENDIF(ENABLE_LUAJIT MATCHES "ON")
  991. IF(ENABLE_GPERF_TOOLS MATCHES "ON")
  992. TARGET_LINK_LIBRARIES(rspamd profiler)
  993. ENDIF(ENABLE_GPERF_TOOLS MATCHES "ON")
  994. TARGET_LINK_LIBRARIES(rspamd hiredis)
  995. IF(GLIB_COMPAT)
  996. TARGET_LINK_LIBRARIES(rspamd glibadditions)
  997. ENDIF(GLIB_COMPAT)
  998. ##################### INSTALLATION ##########################################
  999. # Binaries
  1000. INSTALL(TARGETS rspamd RUNTIME DESTINATION bin)
  1001. # Configs
  1002. INSTALL(CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}${ETC_PREFIX}/rspamd)")
  1003. INSTALL(FILES conf/2tld.inc RENAME 2tld.inc DESTINATION ${ETC_PREFIX}/rspamd)
  1004. IF(NOT EXISTS ${ETC_PREFIX}/rspamd/2tld.inc OR BUILD_PORT)
  1005. INSTALL(FILES conf/2tld.inc DESTINATION ${ETC_PREFIX}/rspamd)
  1006. ENDIF(NOT EXISTS ${ETC_PREFIX}/rspamd/2tld.inc OR BUILD_PORT)
  1007. INSTALL(FILES conf/surbl-whitelist.inc RENAME surbl-whitelist.inc DESTINATION ${ETC_PREFIX}/rspamd)
  1008. IF(NOT EXISTS ${ETC_PREFIX}/rspamd/surbl-whitelist.inc OR BUILD_PORT)
  1009. INSTALL(FILES conf/surbl-whitelist.inc DESTINATION ${ETC_PREFIX}/rspamd)
  1010. ENDIF(NOT EXISTS ${ETC_PREFIX}/rspamd/surbl-whitelist.inc OR BUILD_PORT)
  1011. IF(NOT DEBIAN_BUILD)
  1012. INSTALL(FILES ${CMAKE_BINARY_DIR}/conf/rspamd.xml.sample DESTINATION ${ETC_PREFIX})
  1013. ENDIF(NOT DEBIAN_BUILD)
  1014. # Lua plugins
  1015. INSTALL(CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}${ETC_PREFIX}/rspamd/plugins/lua)")
  1016. FILE(GLOB LUA_PLUGINS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/src/plugins/lua" "${CMAKE_CURRENT_SOURCE_DIR}/src/plugins/lua/*.lua" )
  1017. FOREACH(LUA_PLUGIN ${LUA_PLUGINS})
  1018. GET_FILENAME_COMPONENT(_rp ${LUA_PLUGIN} PATH)
  1019. INSTALL(CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}${ETC_PREFIX}/rspamd/plugins/lua/${_rp})")
  1020. INSTALL(FILES "src/plugins/lua/${LUA_PLUGIN}" DESTINATION ${ETC_PREFIX}/rspamd/plugins/lua/${_rp})
  1021. ENDFOREACH(LUA_PLUGIN)
  1022. # Lua config
  1023. INSTALL(CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}${ETC_PREFIX}/rspamd/lua)")
  1024. FILE(GLOB_RECURSE LUA_CONFIGS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/conf/lua" "${CMAKE_CURRENT_SOURCE_DIR}/conf/lua/*.lua")
  1025. FOREACH(LUA_CONF ${LUA_CONFIGS})
  1026. GET_FILENAME_COMPONENT(_rp ${LUA_CONF} PATH)
  1027. INSTALL(CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}${ETC_PREFIX}/rspamd/lua/${_rp})")
  1028. INSTALL(FILES "conf/lua/${LUA_CONF}" DESTINATION ${ETC_PREFIX}/rspamd/lua/${_rp})
  1029. ENDFOREACH(LUA_CONF)
  1030. # Manual pages
  1031. INSTALL(FILES "doc/rspamd.8" DESTINATION ${MAN_PREFIX}/man8)
  1032. INSTALL(FILES "doc/rspamc.1" DESTINATION ${MAN_PREFIX}/man1)
  1033. # Start scripts
  1034. IF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" AND NOT BUILD_PORT)
  1035. INSTALL(PROGRAMS ${CMAKE_BINARY_DIR}/freebsd/rspamd DESTINATION ${ETC_PREFIX}/rc.d)
  1036. IF(ENABLE_REDIRECTOR MATCHES "ON")
  1037. INSTALL(PROGRAMS ${CMAKE_BINARY_DIR}/freebsd/redirector DESTINATION ${ETC_PREFIX}/rc.d)
  1038. ENDIF(ENABLE_REDIRECTOR MATCHES "ON")
  1039. INSTALL(CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}/${LOCALSTATES_PREFIX})")
  1040. INSTALL(CODE "EXECUTE_PROCESS(COMMAND chown ${RSPAMD_USER}:${RSPAMD_GROUP} \$ENV{DESTDIR}/${LOCALSTATES_PREFIX})")
  1041. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" AND NOT BUILD_PORT)
  1042. IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT DEBIAN_BUILD)
  1043. INSTALL(PROGRAMS "linux/${LINUX_START_SCRIPT}" DESTINATION ${ETC_PREFIX}/init.d RENAME rspamd)
  1044. INSTALL(CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}/${LOCALSTATES_PREFIX})")
  1045. INSTALL(CODE "EXECUTE_PROCESS(COMMAND chown ${RSPAMD_USER}:${RSPAMD_GROUP} \$ENV{DESTDIR}/${LOCALSTATES_PREFIX})")
  1046. ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT DEBIAN_BUILD)