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

13 years ago
12 years ago
11 years ago
13 years ago
11 years ago
13 years ago
11 years ago
12 years ago
14 years ago
14 years ago
12 years ago
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)