configure.ac 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831
  1. AC_PREREQ(2.60)
  2. m4_define([xm4_pkg_version], esyscmd([tr -d '\n' <version.in]))
  3. AC_INIT([kopano], [xm4_pkg_version], [development@kopano.io])
  4. AC_CONFIG_SRCDIR([provider/server/ECServer.cpp])
  5. AC_CONFIG_HEADERS([common/config.h])
  6. AC_CONFIG_AUX_DIR([autoconf])
  7. AC_CONFIG_MACRO_DIR([autoconf])
  8. AM_INIT_AUTOMAKE([1.10 foreign subdir-objects])
  9. m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
  10. ECCLIENT_LIBRARY_VERSION=1:0:0
  11. AC_SUBST(ECCLIENT_LIBRARY_VERSION)
  12. # Checks for programs.
  13. AC_DISABLE_STATIC dnl must be before ac_prog_libtool
  14. AC_PROG_LIBTOOL
  15. AC_PROG_CC
  16. AM_PROG_CC_C_O
  17. AC_PROG_CXX
  18. AC_PROG_INSTALL
  19. PKG_PROG_PKG_CONFIG
  20. abs_top_srcdir=`cd $srcdir; pwd`
  21. abs_top_builddir=`pwd`
  22. #
  23. # construct default CXXFLAGS
  24. #
  25. # Everything is C++
  26. AC_LANG_PUSH(C++)
  27. # save clean settings
  28. CXXFLAGS_system=$CXXFLAGS
  29. CPPFLAGS_system=$CPPFLAGS
  30. LDFLAGS_system=$LDFLAGS
  31. LIBS_system=$LIBS
  32. # check build OS
  33. AC_CANONICAL_HOST
  34. BUILDOS=""
  35. case "$host_os" in
  36. openbsd*)
  37. BUILDOS="-DOPENBSD"
  38. ;;
  39. linux*)
  40. BUILDOS="-DLINUX"
  41. ;;
  42. esac
  43. >conftest.cpp
  44. ZPHPCXXFLAGS=""
  45. if $CXX -Wno-narrowing -c conftest.cpp; then
  46. ZPHPCXXFLAGS="-Wno-narrowing"
  47. fi
  48. rm -f conftest.*
  49. AC_SUBST([ZPHPCXXFLAGS])
  50. # default to debug mode
  51. # disable write-strings: too much complains about "" being 'cast' to char* (since const char* is not in the declarations) on g++-4.2 and higher
  52. ZCPPFLAGS="$BUILDOS -DHAVE_CONFIG_H \
  53. -I\${top_builddir}/common/include \
  54. -I\${top_srcdir}/common/include \
  55. -I\${top_srcdir}/m4lcommon/include \
  56. -I\${top_srcdir}/provider/common/include \
  57. -I\${top_srcdir}/provider/libserver/include \
  58. -I\${top_srcdir}/ECtools/archiver/include \
  59. -I\${top_srcdir}/inetmapi/include \
  60. -I\${top_srcdir}/swig/include \
  61. -I\${top_srcdir}/swig/python/include \
  62. -I\${top_srcdir}"
  63. ZCXXFLAGS="-Wall -Wmissing-declarations"
  64. # programs that use files >2GB need 64-bit file support
  65. LFS_CFLAGS=`getconf LFS_CFLAGS`
  66. ZCPPFLAGS="$ZCPPFLAGS $LFS_CFLAGS"
  67. AC_MSG_CHECKING([for C++2011 support])
  68. cxxmode=""
  69. for i in "c++11" "c++0x"; do
  70. CXXFLAGS="$CXXFLAGS_system -std=$i"
  71. AC_COMPILE_IFELSE([AC_LANG_SOURCE([])], [cxxmode="$i"])
  72. AS_IF([test -n "$cxxmode"], [break])
  73. done
  74. CXXFLAGS="$CXXFLAGS_system"
  75. ZCXXFLAGS="$ZCXXFLAGS -std=$cxxmode"
  76. AC_MSG_RESULT([$cxxmode])
  77. # disable variadic-macros: too much warning: anonymous variadic macros were introduced in C99, only on new compilers
  78. AC_MSG_CHECKING([whether C++ compiler understands -Wno-variadic-macros option])
  79. if ( echo 'int main() {}' | $CXX -Wno-variadic-macros -E - >/dev/null 2>&1 ); then
  80. AC_MSG_RESULT([yes])
  81. ZCXXFLAGS="$ZCXXFLAGS -Wno-variadic-macros"
  82. else
  83. AC_MSG_RESULT([no])
  84. fi
  85. #
  86. # enable/disable options
  87. #
  88. AC_ARG_ENABLE([release], AS_HELP_STRING([--enable-release], [enable release mode (compile flags -O2 and no DEBUG defines)]),
  89. [want_release=${enableval}],[want_release=no])
  90. if test "$want_release" = "yes"; then
  91. ZCPPFLAGS="$ZCPPFLAGS -DNDEBUG"
  92. ZCXXFLAGS="$ZCXXFLAGS -O2 -fno-strict-aliasing"
  93. else
  94. # -fPIC must be present on x86_64 when -O2 isn't used
  95. ZCXXFLAGS="$ZCXXFLAGS -fPIC"
  96. ZCXXFLAGS="$ZCXXFLAGS -pedantic -Wno-long-long"
  97. fi
  98. AC_ARG_ENABLE([unicode], AS_HELP_STRING([--enable-unicode], [enable unicode mode (compile flags -DUNICODE)]),
  99. [want_unicode=${enableval}],[want_unicode=yes])
  100. SWIG_FLAGS=""
  101. if test "$want_unicode" = "yes"; then
  102. ZCPPFLAGS="$ZCPPFLAGS -DUNICODE"
  103. SWIG_FLAGS="-DUNICODE "
  104. fi
  105. AC_SUBST([SWIG_FLAGS])
  106. AC_MSG_CHECKING([specified Linux distribution name])
  107. AC_ARG_WITH([distro], AS_HELP_STRING([--with-distro], [set distribution name, used for sysconfig and initscripts only. available: rhel, suse or sles]),
  108. [with_distro=${withval}],[with_distro=rhel])
  109. if test "$with_distro" != "rhel" -a "$with_distro" != "suse" -a \
  110. "$with_distro" != "sles" -a "$with_distro" != "cbs4" -a \
  111. "$with_distro" != "debian"; then
  112. AC_MSG_ERROR([unknown distro])
  113. else
  114. AC_MSG_RESULT([using $with_distro])
  115. fi
  116. DISTRO=$with_distro
  117. AC_SUBST(DISTRO)
  118. dnl These are the only two I will allow to edit LIBS
  119. AC_ARG_WITH([asan], AS_HELP_STRING([--with-asan], [Activate Address Sanitizer]),
  120. [ZCXXFLAGS="$ZCXXFLAGS -fsanitize=address"])
  121. AC_ARG_WITH([ubsan], AS_HELP_STRING([--with-ubsan], [Activate Undefined Behavior Sanitizer]),
  122. [ZCXXFLAGS="$ZCXXFLAGS -fsanitize=undefined"])
  123. AC_ARG_ENABLE([debug], AS_HELP_STRING([--enable-debug], [enable debug mode (Adds debug code)]),
  124. [want_debug=${enableval}],[want_debug=no])
  125. if test "$want_debug" = "yes"; then
  126. DEBUGFLAGS="-DDEBUG"
  127. DEBUG=1
  128. else
  129. DEBUGFLAGS=
  130. DEBUG=0
  131. fi
  132. AC_SUBST(DEBUGFLAGS)
  133. # profiling
  134. AC_ARG_ENABLE(profiling,
  135. AS_HELP_STRING([--enable-profiling], [enable profiling (-pg)]),
  136. [ if test "${enableval}" = "yes"; then
  137. ZCXXFLAGS="$ZCXXFLAGS -pg"
  138. ZLDFLAGS="$ZLDFLAGS -pg"
  139. fi
  140. ])
  141. AC_ARG_ENABLE(coverage,
  142. AS_HELP_STRING([--enable-coverage], [enable coverage (--coverage)]),
  143. [ if test "${enableval}" = "yes"; then
  144. ZCXXFLAGS="$ZCXXFLAGS -g --coverage -fprofile-arcs -ftest-coverage"
  145. ZLDFLAGS="$ZLDFLAGS -lgcov"
  146. fi
  147. ])
  148. # MAPI config files
  149. AC_ARG_WITH(mapi-configdir,
  150. AS_HELP_STRING([--with-mapi-configdir=PATH], [path to install the libmapi config (provider) files (default /etc/mapi)]),
  151. [MAPICONFIGDIR=${withval}],[MAPICONFIGDIR='${sysconfdir}/mapi'])
  152. AC_SUBST(MAPICONFIGDIR)
  153. # user create scripts location
  154. AC_ARG_WITH(userscript-prefix,
  155. AS_HELP_STRING([--with-userscript-prefix=PATH], [path to install the userscripts in (default SYSCONFDIR/kopano/userscripts)]),
  156. [USERSCRIPTDIR=${withval}],[USERSCRIPTDIR='/etc/kopano/userscripts'])
  157. AC_SUBST(USERSCRIPTDIR)
  158. AS_IF([echo "$USERSCRIPTDIR" | grep -q '\$'],
  159. [AC_MSG_ERROR([Variable expansion unfortunately not supported for --with-userscript-prefix])])
  160. # quota warning templates location
  161. AC_ARG_WITH(quotatemplate-prefix,
  162. AS_HELP_STRING([--with-quotatemplate-prefix=PATH], [path to install the quota warning templates in (default SYSCONFDIR/kopano/quotamail)]),
  163. [QUOTATEMPLATEDIR=${withval}],[QUOTATEMPLATEDIR='${sysconfdir}/kopano/quotamail'])
  164. AC_SUBST(QUOTATEMPLATEDIR)
  165. # search scripts location
  166. AC_ARG_WITH(searchscripts-prefix,
  167. AS_HELP_STRING([--with-searchscripts-prefix=PATH], [path to install the search scripts in (default SYSCONFDIR/kopano/searchscripts)]),
  168. [SEARCHSCRIPTSDIR=${withval}],[SEARCHSCRIPTSDIR='${sysconfdir}/kopano/searchscripts'])
  169. AC_SUBST(SEARCHSCRIPTSDIR)
  170. AC_ARG_WITH([systemunitdir],
  171. [AS_HELP_STRING([--with-systemunitdir=PATH], [Path to systemd service unit directory])],
  172. [systemunitdir="$withval"],
  173. [
  174. systemunitdir=$("$PKG_CONFIG" systemd --variable systemdsystemunitdir 2>/dev/null)
  175. AS_IF([test -z "$systemunitdir"], [systemunitdir='${prefix}/lib/systemd/system'])
  176. ])
  177. AC_SUBST([systemunitdir])
  178. AC_ARG_WITH([sysusersdir],
  179. [AS_HELP_STRING([--with-sysusersdir=PATH], [Path to sysusers config directory])],
  180. [sysusersdir="$withval"],
  181. [
  182. sysusersdir=$("$PKG_CONFIG" systemd --variable sysusersdir 2>/dev/null)
  183. AS_IF([test -z "$sysusersdir"], [sysusersdir='${prefix}/lib/sysusers.d'])
  184. ])
  185. AC_SUBST([sysusersdir])
  186. AC_ARG_WITH([tmpfilesdir],
  187. [AS_HELP_STRING([--with-tmpfilesdir=PATH], [Path to tmpfiles config directory])],
  188. [tmpfilesdir="$withval"],
  189. [
  190. tmpfilesdir=$("$PKG_CONFIG" systemd --variable tmpfilesdir 2>/dev/null)
  191. AS_IF([test -z "$tmpfilesdir"], [tmpfilesdir='${prefix}/lib/tmpfiles.d'])
  192. ])
  193. AC_SUBST([tmpfilesdir])
  194. dnl Not all files will be installed to ${prefix}, so we need to cheat a bit
  195. dnl to make "distcheck" succeed.
  196. AC_ARG_WITH([dcprefix],
  197. [AS_HELP_STRING([Extra path inserted for distcheck])],
  198. [dcprefix="$withval"])
  199. AC_SUBST([dcprefix])
  200. # stats client requires ncurses(w) for --top
  201. # check wide version before non-wide version
  202. AC_DEFUN([LIBNCURSES_WITH_CONFIG],[
  203. AC_CHECK_PROGS([NCURSES_CONFIG], [ncursesw6-config ncursesw5-config ncurses6-config ncurses5-config ncursesw-config ncurses-config], [])
  204. AS_IF([test -n "$NCURSES_CONFIG"],
  205. [
  206. NCURSES_FLAGS=$("$NCURSES_CONFIG" --cflags)
  207. NCURSES_LIBS=$("$NCURSES_CONFIG" --libs)
  208. ],
  209. [
  210. dnl just pick the lowest common denominator
  211. NCURSES_FLAGS=""
  212. NCURSES_LIBS="-lncurses -ltinfo"
  213. ]
  214. )
  215. dnl We should be using ncurses.h - or is portability to non-ncurses
  216. dnl that important?
  217. AC_CHECK_HEADERS([curses.h])
  218. LIBS="$LIBS_system"
  219. CFLAGS="$CFLAGS_system"
  220. CXXFLAGS="$CXXFLAGS_system"
  221. AC_SUBST([NCURSES_FLAGS])
  222. AC_SUBST([NCURSES_LIBS])
  223. ])
  224. LIBNCURSES_WITH_CONFIG
  225. AC_CHECK_HEADERS([syslog.h sys/un.h sys/stat.h malloc.h])
  226. AC_CHECK_FUNCS([mallinfo timegm getpeereid getpwnam_r vsyslog vsnprintf_l])
  227. #
  228. # find required/optional libraries
  229. #
  230. AC_ARG_WITH([php], [AS_HELP_STRING([--without-php], [Disable building PHP components])])
  231. AS_IF([test "$with_php" != "no"], [
  232. # Checks for PHP through php-config and tests the truth of
  233. # php-config results
  234. PHP_WITH_PHP_CONFIG
  235. PHP_CHECK_INCLUDES
  236. echo "PHP version: $PHP_VERSION"
  237. AS_CASE([$PHP_VERSION],
  238. [5.*], [with_php=5],
  239. [7.*], [with_php=7]
  240. )
  241. ])
  242. AM_CONDITIONAL([WITH_PHP5], [test "$with_php" = 5])
  243. AM_CONDITIONAL([WITH_PHP7], [test "$with_php" = 7])
  244. # Checks for libxml2
  245. AC_DEFUN([LIBXML_WITH_XML2_CONFIG],[
  246. AC_ARG_WITH([xml2-config], AS_HELP_STRING([--with-xml2-config=PATH], [path to the xml2-config script of libxml2]),
  247. [XML2_CONFIG=${withval}],[XML2_CONFIG=xml2-config])
  248. AC_MSG_CHECKING([for xml2-config presence])
  249. XML2_CONFIG=`which $XML2_CONFIG 2>/dev/null`
  250. if ! test -x "$XML2_CONFIG"; then
  251. AC_MSG_ERROR([cannot execute $XML2_CONFIG, install libxml2-dev])
  252. else
  253. AC_MSG_RESULT([$XML2_CONFIG])
  254. XML2_CFLAGS=`$XML2_CONFIG --cflags`
  255. XML2_LIBS=`$XML2_CONFIG --libs`
  256. AC_SUBST(XML2_CFLAGS)
  257. AC_SUBST(XML2_LIBS)
  258. dnl check correctness of lib
  259. CXXFLAGS="$CXXFLAGS $XML2_CFLAGS"
  260. LIBS="$LIBS $XML2_LIBS"
  261. AC_MSG_CHECKING([acquired XML2 settings])
  262. AC_LINK_IFELSE([
  263. AC_LANG_SOURCE([
  264. #include <libxml/xmlwriter.h>
  265. int main() {
  266. xmlNewTextWriterMemory(NULL, 0);
  267. }
  268. ]) ], [ AC_MSG_RESULT([ok]) ], [ AC_MSG_ERROR([broken])
  269. ])
  270. LIBS=$LIBS_system
  271. CXXFLAGS=$CXXFLAGS_system
  272. fi
  273. ])
  274. LIBXML_WITH_XML2_CONFIG
  275. AM_CONDITIONAL([WITH_XML2], [test "$XML2_CONFIG" != "" -a -x "`which $XML2_CONFIG 2>/dev/null`"])
  276. # Checks for MySQL 4.1 or better
  277. AC_DEFUN([MYSQL_WITH_MYSQL_CONFIG],[
  278. AC_PATH_PROGS([MYSQL_CONFIG], [mysql_config mariadb_config])
  279. AC_ARG_WITH([mysql-config], AS_HELP_STRING([--with-mysql-config=PATH], [path to the mysql-config script of mysql 4.1]),
  280. [MYSQL_CONFIG="$withval"])
  281. AC_ARG_ENABLE([embedded-mysql], AS_HELP_STRING([--enable-embedded-mysql], [Compile server with the embedded MySQL server]),
  282. [
  283. EMBEDDED=1
  284. ZCPPFLAGS="$ZCPPFLAGS -DEMBEDDED_MYSQL"
  285. ],[
  286. EMBEDDED=0
  287. ])
  288. MYSQL_INCLUDES=`$MYSQL_CONFIG --include`
  289. if test "$EMBEDDED" -eq 1; then
  290. MYSQL_LIBS=`$MYSQL_CONFIG --libmysqld-libs`
  291. else
  292. MYSQL_LIBS=`$MYSQL_CONFIG --libs`
  293. fi
  294. MYSQL_VERSION=`$MYSQL_CONFIG --version`
  295. if test -z "$MYSQL_VERSION"; then
  296. AC_MSG_ERROR(Cannot find mysql_config. Please use --with-mysql-config=PATH or install libmysqlclient-dev)
  297. fi
  298. AC_SUBST(MYSQL_INCLUDES)
  299. AC_SUBST(MYSQL_LIBS)
  300. AC_SUBST(MYSQL_VERSION)
  301. AC_MSG_CHECKING([for MySQL includes])
  302. AC_MSG_RESULT($MYSQL_INCLUDES)
  303. AC_MSG_CHECKING([for MySQL libs])
  304. AC_MSG_RESULT($MYSQL_LIBS)
  305. ])
  306. MYSQL_WITH_MYSQL_CONFIG
  307. # test for precense of mysql 5.0.7 function
  308. CXXFLAGS="$CXXFLAGS $MYSQL_INCLUDES"
  309. LIBS="$LIBS $MYSQL_LIBS"
  310. AC_CHECK_FUNCS([mysql_set_character_set])
  311. LIBS=$LIBS_system
  312. CXXFLAGS=$CXXFLAGS_system
  313. #---------------------------------------------
  314. # pthread setname (4 non-portable variants...)
  315. #---------------------------------------------
  316. LIBS="-pthread $LIBS"
  317. AC_CHECK_HEADERS([pthread_np.h])
  318. define(pthread_np_preamble,[
  319. #include <pthread.h>
  320. #if HAVE_PTHREAD_NP_H
  321. # include <pthread_np.h>
  322. #endif
  323. ])
  324. # 2-arg setname (e.g. Linux/glibc, QNX, IBM)
  325. AC_MSG_CHECKING([for 2-arg pthread_setname_np])
  326. AC_LINK_IFELSE([AC_LANG_PROGRAM(pthread_np_preamble, [
  327. pthread_setname_np(pthread_self(), "foo")
  328. ])], [
  329. AC_DEFINE(HAVE_PTHREAD_SETNAME_NP_2, 1, [2-arg pthread_setname_np])
  330. AC_MSG_RESULT([yes])
  331. ], [
  332. AC_MSG_RESULT([no])
  333. # 2-arg set_name (e.g. FreeBSD, OpenBSD)
  334. AC_MSG_CHECKING([for 2-arg pthread_set_name_np])
  335. AC_LINK_IFELSE([AC_LANG_PROGRAM(pthread_np_preamble, [
  336. return pthread_set_name_np(pthread_self(), "foo");
  337. ])], [
  338. AC_DEFINE(HAVE_PTHREAD_SET_NAME_NP_2, 1, [2-arg pthread_set_name_np])
  339. AC_MSG_RESULT([yes])
  340. ], [
  341. AC_MSG_RESULT([no])
  342. # 1-arg setname (e.g. Darwin)
  343. AC_MSG_CHECKING([for 1-arg pthread_setname_np])
  344. AC_LINK_IFELSE([AC_LANG_PROGRAM(pthread_np_preamble, [
  345. return pthread_setname_np("foo");
  346. ])], [
  347. AC_DEFINE(HAVE_PTHREAD_SETNAME_NP_1, 1, [1-arg pthread_setname_np])
  348. AC_MSG_RESULT([yes])
  349. ], [
  350. AC_MSG_RESULT([no])
  351. # 3-arg setname (e.g. NetBSD)
  352. AC_MSG_CHECKING([for 3-arg pthread_setname_np])
  353. AC_LINK_IFELSE([AC_LANG_PROGRAM(pthread_np_preamble, [
  354. return pthread_setname_np(pthread_self(), "foo", NULL);
  355. ])], [
  356. AC_DEFINE(HAVE_PTHREAD_SETNAME_NP_3, 1, [3-arg pthread_setname_np])
  357. AC_MSG_RESULT([yes])
  358. ], [
  359. AC_MSG_RESULT([no])
  360. ])
  361. ])
  362. ])
  363. ])
  364. #---------------------------------------------
  365. # end pthread_setname stuff
  366. #---------------------------------------------
  367. CXXFLAGS="$CXXFLAGS_system $ZCXXFLAGS"
  368. LDFLAGS="$LDFLAGS_system $ZLDFLAGS"
  369. AC_CHECK_FUNCS([pthread_getname_np])
  370. dnl Stupid gsoap not abstracting properly! If our -Ds do not match with what
  371. dnl gsoap was compiled with, we are in trouble.
  372. GSOAP_CFLAGS="-DWITH_OPENSSL -DWITH_GZIP -DHAVE_OPENSSL_SSL_H -DHAVE_ZLIB_H"
  373. GSOAP_LIBS="-lgsoapssl++"
  374. AC_SUBST(GSOAP_CFLAGS)
  375. AC_SUBST(GSOAP_LIBS)
  376. ICAL_CFLAGS=""
  377. ICAL_LIBS="-lical -licalss -licalvcal"
  378. AC_ARG_WITH(ical-prefix,
  379. AS_HELP_STRING([--with-ical-prefix=PATH], [libical prefix, e.g. /usr/local, default /usr]),
  380. [
  381. ICAL_PREFIX="${withval}"
  382. ICAL_CFLAGS="$ICAL_CFLAGS -I$ICAL_PREFIX/include"
  383. # Hardcoding directories is bad… they may contain libraries of mismatching archictecture
  384. ICAL_LIBS="$ICAL_LIBS -L$ICAL_PREFIX/lib -L$ICAL_PREFIX/lib64 -R$ICAL_PREFIX/lib -R$ICAL_PREFIX/lib64"
  385. ])
  386. AC_SUBST(ICAL_CFLAGS)
  387. AC_SUBST(ICAL_LIBS)
  388. PKG_CHECK_MODULES([curl], [libcurl], [], [:])
  389. CPPFLAGS="$CPPFLAGS $curl_CFLAGS"
  390. AC_CHECK_HEADERS([curl/curl.h])
  391. CPPFLAGS="$CPPFLAGS_system"
  392. PKG_CHECK_MODULES([TCMALLOC], [libtcmalloc_minimal], [], [:])
  393. CPPFLAGS="$CPPFLAGS $TCMALLOC_CFLAGS"
  394. AC_CHECK_HEADERS([gperftools/malloc_extension.h google/malloc_extension.h])
  395. CPPFLAGS="$CPPFLAGS_system"
  396. PKG_CHECK_MODULES([VMIME], [vmime >= 0.9.2])
  397. #
  398. # Check for user plugin required libraries
  399. #
  400. AC_CHECK_HEADERS([ldap.h],
  401. [ LIBS="$LIBS -lldap_r"
  402. CXXFLAGS="$CXXFLAGS -pthread"
  403. AC_MSG_CHECKING([for -lldap_r without LDAP_DEPRECATED])
  404. AC_LINK_IFELSE([ AC_LANG_SOURCE([#include <ldap.h>
  405. int main() {
  406. LDAP *l = ldap_init("localhost",389);
  407. }]) ],
  408. [ LDAP_LIBS=-lldap_r
  409. LDAP_FLAGS=
  410. want_ldap=yes
  411. AC_MSG_RESULT([yes]) ],
  412. [ AC_MSG_RESULT([no])
  413. CXXFLAGS="$CXXFLAGS -DLDAP_DEPRECATED=1"
  414. AC_MSG_CHECKING([for -lldap_r with LDAP_DEPRECATED])
  415. AC_LINK_IFELSE([
  416. AC_LANG_SOURCE([#include <ldap.h>
  417. int main() {
  418. LDAP *l = ldap_init("localhost",389);
  419. }]) ],
  420. [ LDAP_LIBS=-lldap_r
  421. LDAP_FLAGS=-DLDAP_DEPRECATED=1
  422. want_ldap=yes
  423. AC_MSG_RESULT([yes]) ],
  424. [ LDAP_LIBS=
  425. LDAP_CXXFLAGS=
  426. want_ldap=no
  427. AC_MSG_RESULT([no]) ]
  428. )
  429. CXXFLAGS=$CXXFLAGS_system
  430. ])
  431. ], AC_MSG_RESULT([no]) )
  432. LIBS=$LIBS_system
  433. AC_SUBST(LDAP_LIBS)
  434. AC_SUBST(LDAP_FLAGS)
  435. AM_CONDITIONAL([WITH_LDAP], [test "$want_ldap" = yes])
  436. LIBS="$LIBS $LDAP_LIBS"
  437. CXXFLAGS="$CXXFLAGS $LDAP_FLAGS"
  438. AC_CHECK_FUNCS([ldap_start_tls_s])
  439. AC_CHECK_FUNCS([ldap_create_page_control])
  440. LIBS=$LIBS_system
  441. CXXFLAGS=$CXXFLAGS_system
  442. AC_CHECK_HEADERS([shadow.h], [want_unix=yes], [want_unix=no])
  443. AM_CONDITIONAL([WITH_UNIX], [test "$want_unix" = yes])
  444. AC_MSG_CHECKING([for iconv])
  445. AC_LINK_IFELSE([ AC_LANG_SOURCE([
  446. #include <stdlib.h>
  447. #include <iconv.h>
  448. int main() {
  449. iconv_t i; i = iconv_open("", "");
  450. }]) ],
  451. [ AC_MSG_RESULT([yes]) ],
  452. [ AC_MSG_RESULT([no])
  453. AC_MSG_CHECKING([for iconv in -liconv])
  454. LIBS="$LIBS -liconv"
  455. AC_LINK_IFELSE([ AC_LANG_SOURCE([
  456. #include <stdlib.h>
  457. #include <iconv.h>
  458. int main() {
  459. iconv_t i; i = iconv_open("", "");
  460. }]) ],
  461. [ AC_MSG_RESULT([yes])
  462. ICONV_LIBS=$LIBS ],
  463. [ AC_MSG_RESULT([no])
  464. AC_MSG_ERROR([required library libiconv missing or unusable]) ]) ])
  465. AC_SUBST(ICONV_LIBS)
  466. LIBS=$LIBS_system
  467. AC_SEARCH_LIBS([crypt_r], [crypt], [CRYPT_LIBS="-lcrypt"; LIBS="$LIBS_system"])
  468. AC_SUBST([CRYPT_LIBS])
  469. PKG_CHECK_EXISTS([libssl],
  470. [
  471. PKG_CHECK_MODULES([SSL], [libssl], [], [ssl_LIBS=-lssl])
  472. ],
  473. [
  474. AC_CHECK_LIB([ssl], [SSL_accept], [SSL_LIBS="-lssl"], AC_MSG_ERROR([required library libssl missing or unusable]))
  475. AC_SUBST([SSL_LIBS])
  476. ])
  477. PKG_CHECK_EXISTS([libcrypto],
  478. [
  479. PKG_CHECK_MODULES([CRYPTO], [libcrypto])
  480. ],
  481. [
  482. AC_CHECK_LIB([crypto], [BIO_accept], [CRYPTO_LIBS="-lcrypto"], AC_MSG_ERROR([required library libcrypto missing or unusable]))
  483. AC_SUBST([CRYPTO_LIBS])
  484. ])
  485. ZCPPFLAGS="$ZCPPFLAGS $CRYPTO_CFLAGS"
  486. LIBS=$LIBS_system
  487. # OpenSSL check for new EVP_PKEY_cmp() function
  488. LIBS="$LIBS $CRYPTO_LIBS"
  489. CPPFLAGS="$CPPFLAGS $CRYPTO_CFLAGS"
  490. AC_CHECK_FUNCS([EVP_PKEY_cmp])
  491. LIBS=$LIBS_system
  492. CPPFLAGS=$CPPFLAGS_system
  493. # Check for pam library (optional)
  494. PAM_LIBS=
  495. AC_CHECK_LIB([pam], [pam_start],
  496. [PAM_LIBS="-lpam"]
  497. AC_DEFINE(HAVE_PAM, [1], [pam authentication available]),
  498. AC_MSG_RESULT([library libpam missing or unusable]))
  499. AC_SUBST(PAM_LIBS)
  500. AM_CONDITIONAL([WITH_PAM], [test "$PAM_LIBS" != ""])
  501. # Check for kerberos library (optional)
  502. AC_DEFUN([LIBKRB5_WITH_KRB5_CONFIG],[
  503. AC_ARG_WITH([krb5-config], AS_HELP_STRING([--with-krb5-config=PATH], [path to the krb5-config script of libkrb5]),
  504. [KRB5_CONFIG=${withval}],[KRB5_CONFIG=krb5-config])
  505. AC_MSG_CHECKING([for krb5-config presence])
  506. KRB5_CONFIG=`which $KRB5_CONFIG 2>/dev/null`
  507. if ! test -x "$KRB5_CONFIG"; then
  508. AC_MSG_RESULT([not found])
  509. else
  510. AC_MSG_RESULT([$KRB5_CONFIG])
  511. KRB5_CFLAGS=`$KRB5_CONFIG --cflags`
  512. KRB5_LIBS=`$KRB5_CONFIG --libs gssapi`
  513. dnl test if found krb5 is good enough version
  514. CXXFLAGS="$CXXFLAGS $KRB5_CFLAGS"
  515. LIBS="$LIBS $KRB5_LIBS"
  516. use_krb=2
  517. AC_CHECK_FUNCS([gss_acquire_cred], [AC_DEFINE(HAVE_GSSAPI, [1], [Kerberos Single Signon Authentication enabled]) ], [ use_krb=$((use_krb-1)) ])
  518. AC_CHECK_FUNCS([krb5_free_unparsed_name], [ AC_DEFINE(HAVE_KRB5, [1], [Kerberos Password Authentication enabled]) ], [ use_krb=$((use_krb-1)) ])
  519. AC_MSG_CHECKING([for krb5 usability])
  520. if test $use_krb -eq 0; then
  521. KRB5_CFLAGS=
  522. KRB5_LIBS=
  523. AC_MSG_RESULT([no])
  524. else
  525. AC_MSG_RESULT([yes])
  526. fi
  527. LIBS="$LIBS_system"
  528. CFLAGS="$CFLAGS_system"
  529. CXXFLAGS="$CXXFLAGS_system"
  530. AC_SUBST(KRB5_CFLAGS)
  531. AC_SUBST(KRB5_LIBS)
  532. fi
  533. ])
  534. LIBKRB5_WITH_KRB5_CONFIG
  535. AM_CONDITIONAL([WITH_KRB5], [test "$KRB5_LIBS" != ""])
  536. # libcurl for report
  537. if ! test "$want_oss" = "yes"; then
  538. AC_CHECK_LIB([curl], [curl_easy_perform], [CURL_LIBS="-lcurl"], AC_MSG_ERROR([required library libcurl missing or unusable]))
  539. AC_SUBST(CURL_LIBS)
  540. fi # oss only
  541. # Check for libs3 amazon s3 availability
  542. LIBS_system="$LIBS"
  543. AC_CHECK_HEADERS([libs3.h])
  544. AC_SEARCH_LIBS([S3_initialize], [s3], [s3_LIBS="-ls3"; LIBS="$LIBS_system"])
  545. AC_SUBST([s3_LIBS])
  546. AC_CHECK_FUNCS([uuid_create], UUID_LIBS="", dnl uuid_create is in libc on FreeBSD
  547. AC_CHECK_LIB([uuid], [uuid_create],
  548. UUID_LIBS="-luuid"
  549. AC_DEFINE(HAVE_UUID_CREATE), dnl uuid_create is in libuuid on OpenBSD, also define such in config.h
  550. AC_CHECK_LIB([uuid], [uuid_generate], UUID_LIBS="-luuid", dnl uuid_generate in uuid on linux
  551. AC_MSG_ERROR([required library libuuid missing or unusable])
  552. )
  553. )
  554. )
  555. AC_SUBST(UUID_LIBS)
  556. AC_CHECK_FUNCS([dlopen], DL_LIBS="", dnl dlopen is in libc on FreeBSD/OpenBSD
  557. AC_CHECK_LIB([dl], [dlopen], DL_LIBS="-ldl", dnl use -ldl on linux
  558. AC_MSG_ERROR([required library libdl missing or unusable])
  559. )
  560. )
  561. AC_SUBST(DL_LIBS)
  562. AC_CHECK_LIB([z], [gzopen], GZ_LIBS="-lz",
  563. AC_MSG_ERROR([required library libz missing or unusable])
  564. )
  565. AC_SUBST(GZ_LIBS)
  566. AC_CHECK_FUNCS([gettext], INTL_LIBS="", dnl gettext in libc
  567. AC_CHECK_LIB([intl], [gettext], INTL_LIBS="-lintl", dnl in -lintl
  568. AC_MSG_ERROR([required library libintl missing or unusable])
  569. )
  570. )
  571. AC_SUBST(INTL_LIBS)
  572. # check epoll support
  573. AC_ARG_ENABLE([epoll], AS_HELP_STRING([--enable-epoll], [enable building epoll socket handling]), [want_epoll=${enableval}], [want_epoll=no])
  574. AM_CONDITIONAL(WITH_EPOLL, test "$want_epoll" = "yes")
  575. if test "$want_epoll" = "yes"; then
  576. AC_CHECK_FUNCS([epoll_create])
  577. EPOLL_CFLAGS=-DUSE_EPOLL
  578. else
  579. EPOLL_CFLAGS=
  580. fi
  581. AC_SUBST(EPOLL_CFLAGS)
  582. tidy_CPPFLAGS="-I/usr/include/tidy"
  583. CPPFLAGS="$CPPFLAGS $tidy_CPPFLAGS"
  584. AC_CHECK_HEADERS([tidy.h])
  585. AM_CONDITIONAL([HAVE_TIDY], [test "x$ac_cv_header_tidy_h" = "xyes"])
  586. AC_SUBST([tidy_CPPFLAGS])
  587. CPPFLAGS="$CPPFLAGS_system"
  588. dnl The "Locale" class is in icu-uc.
  589. dnl The "CollationKey" class is in icu-i18n.
  590. req_icu_uc="icu-uc"
  591. req_icu_i18n="icu-i18n"
  592. PKG_CHECK_EXISTS([icu-uc], [have_icu=1], [have_icu=0])
  593. PKG_CHECK_EXISTS([icu-i18n], [have_icu=1], [have_icu=0])
  594. AS_IF([test "$have_icu" = 1], [AC_MSG_RESULT([Found ICU with modern pkg-config files])])
  595. AS_IF([test "$have_icu" = 0], [
  596. dnl RHEL 6 / icu 4.x
  597. PKG_CHECK_EXISTS([icu], [
  598. req_icu_uc="icu"
  599. req_icu_i18n="icu"
  600. AC_MSG_RESULT([Found ICU with old-style pkg-config files])
  601. ])
  602. ])
  603. AS_IF([test "$want_icu" = "auto"], [
  604. PKG_CHECK_MODULES([icu_uc], [$req_icu_uc], [have_icu=1], [have_icu=0])
  605. PKG_CHECK_MODULES([icu_i18n], [$req_icu_i18n], [have_icu=1], [have_icu=0])
  606. ])
  607. AS_IF([test "$have_icu" = 0], [
  608. AC_CHECK_HEADERS([unicode/coll.h], [have_icu=2])
  609. ])
  610. AS_IF([test "$have_icu" = 1], [
  611. dnl PKG_CHECK_EXISTS only tests, and never logs.
  612. dnl Now that we know we want PKG_CHECK, do it for real:
  613. PKG_CHECK_MODULES([icu_uc], [$req_icu_uc])
  614. PKG_CHECK_MODULES([icu_i18n], [$req_icu_i18n])
  615. ])
  616. AS_IF([test "$have_icu" = 2], [
  617. AC_MSG_RESULT([Found ICU by header file])
  618. icu_uc_CFLAGS=""
  619. icu_i18n_CFLAGS=""
  620. icu_uc_LIBS="-licuuc"
  621. icu_i18n_LIBS="-licui18n"
  622. AC_SUBST([icu_uc_LIBS])
  623. AC_SUBST([icu_i18n_LIBS])
  624. ])
  625. AS_IF([test "$have_icu" = 0], [
  626. AC_MSG_ERROR([ICU is required but not found])
  627. ])
  628. ZCPPFLAGS="$ZCPPFLAGS $icu_uc_CFLAGS $icu_i18n_CFLAGS"
  629. # all libs for programs, because functions are in static common stuff
  630. PROG_LIBS="$UUID_LIBS $INTL_LIBS $ICONV_LIBS $GZ_LIBS"
  631. AC_SUBST(PROG_LIBS)
  632. # done testing C++ requirements
  633. AC_LANG_POP
  634. dnl Set default project flags. On overriding AM_CXXFLAGS, include ${ZCXXFLAGS}
  635. AM_CXXFLAGS="$ZCXXFLAGS"
  636. AM_LDFLAGS="$ZLDFLAGS"
  637. AC_SUBST([ZCPPFLAGS])
  638. AC_SUBST([ZCXXFLAGS])
  639. AC_SUBST([AM_CXXFLAGS])
  640. AC_SUBST([AM_LDFLAGS])
  641. AC_PATH_PROG(PROG_ANT, ant) # not an error if not found, no 'make dist' (waxt package)
  642. AC_PATH_PROG([SWIG_EXEC], [swig])
  643. AS_IF([test "x$SWIG_EXEC" = "x"], [AC_MSG_ERROR([Cannot find swig binary])])
  644. AM_PATH_PYTHON([2.5])
  645. PYTHON_LIBS=$("$PYTHON" -c "import sys; import distutils.sysconfig as x; print('-lpython' + x.get_config_var('VERSION') + getattr(sys, 'abiflags', '') + ' ' + x.get_config_var('LIBS') + ' ' + x.get_config_var('SYSLIBS'))")
  646. PYTHON_INCLUDES=$("$PYTHON" -c "import distutils.sysconfig as x; print('-I' + x.get_python_inc())")
  647. AC_SUBST([PYTHON_LIBS])
  648. AC_SUBST([PYTHON_INCLUDES])
  649. #
  650. # Output files
  651. #
  652. AC_CONFIG_FILES([Makefile
  653. mapi4linux/include/Makefile
  654. m4lcommon/include/kopano/Makefile
  655. provider/include/Makefile
  656. inetmapi/include/inetmapi/Makefile
  657. spooler/python/Makefile
  658. spooler/python/plugins/Makefile
  659. common/include/kopano/Makefile
  660. ECtools/archiver/include/kopano/Makefile
  661. ECtools/backup/Makefile
  662. ECtools/presence/Makefile
  663. ECtools/search/Makefile
  664. ECtools/migration-pst/Makefile
  665. installer/Makefile
  666. installer/linux/Makefile
  667. installer/userscripts/Makefile
  668. installer/userscripts/createcompany
  669. installer/userscripts/createcompany.d/Makefile
  670. installer/userscripts/creategroup
  671. installer/userscripts/creategroup.d/Makefile
  672. installer/userscripts/createuser
  673. installer/userscripts/createuser.d/Makefile
  674. installer/userscripts/deletecompany
  675. installer/userscripts/deletecompany.d/Makefile
  676. installer/userscripts/deletegroup
  677. installer/userscripts/deletegroup.d/Makefile
  678. installer/userscripts/deleteuser
  679. installer/userscripts/deleteuser.d/Makefile
  680. installer/quotamail/Makefile
  681. installer/searchscripts/Makefile
  682. po/Makefile
  683. swig/Makefile
  684. swig/include/kopano/Makefile
  685. swig/python/Makefile swig/python/python.sym
  686. swig/python/include/kopano/Makefile
  687. swig/python/kopano/Makefile
  688. swig/python/zarafa/Makefile
  689. common/kopano.pc common/libkcmapi.sym common/libkcutil.sym
  690. default.sym
  691. mapi4linux/src/libmapi.sym
  692. mapi4linux/src/libkchl.sym
  693. provider/plugin.sym provider/provider.sym
  694. provider/libkcserver.sym provider/libkcsoap.sym
  695. version
  696. ])
  697. # Python tools
  698. AC_CONFIG_FILES([ECtools/search/kopano-search], [chmod +x ECtools/search/kopano-search])
  699. AC_CONFIG_FILES([ECtools/backup/kopano-backup], [chmod +x ECtools/backup/kopano-backup])
  700. AC_CONFIG_FILES([ECtools/presence/kopano-presence], [chmod +x ECtools/presence/kopano-presence])
  701. AC_CONFIG_FILES([ECtools/migration-pst/kopano-migration-pst], [chmod +x ECtools/migration-pst/kopano-migration-pst])
  702. AC_OUTPUT
  703. ln -Tfsv "${abs_top_srcdir}" "@"
  704. AC_MSG_RESULT([
  705. Install prefix : $prefix
  706. Mapiconfig dir : $MAPICONFIGDIR
  707. Userscript dir : $USERSCRIPTDIR
  708. Quota dir : $QUOTATEMPLATEDIR
  709. Search scripts dir : $SEARCHSCRIPTSDIR
  710. Build host : $host
  711. Compile flags : $ZCPPFLAGS $CPPFLAGS $ZCXXFLAGS $CXXFLAGS
  712. Debug flags : $DEBUGFLAGS
  713. PHP version : $PHP_VERSION
  714. PHP ext dir : $PHP_EXTENSION_DIR
  715. PHP config dir : $PHP_SYSCONF_DIR
  716. PHP flags : $PHP_INCLUDES
  717. PHP libs : $PHP_LIBS
  718. gSOAP flags : $GSOAP_CFLAGS
  719. gSOAP libs : $GSOAP_LIBS
  720. gSOAP soapcpp2 : $GSOAP_SOAPCPP2
  721. OpenSSL libs : $SSL_LIBS
  722. MySQL flags : $MYSQL_INCLUDES
  723. MySQL libs : $MYSQL_LIBS
  724. VMime flags : $VMIME_CFLAGS
  725. VMime libs : $VMIME_LIBS
  726. XML2 flags : $XML2_CFLAGS
  727. XML2 libs : $XML2_LIBS
  728. ICal flags : $ICAL_CFLAGS
  729. ICal libs : $ICAL_LIBS
  730. ncurses libs : $NCURSES_LIBS
  731. Clients libs : $PROG_LIBS
  732. LDAP support : $want_ldap
  733. LDAP flags : $LDAP_FLAGS
  734. LDAP libs : $LDAP_LIBS
  735. Curl libs : $CURL_LIBS
  736. Pam libs : $PAM_LIBS
  737. Krb5 libs : $KRB5_LIBS
  738. TCMalloc lib : $TCMALLOC_LIBS
  739. S3 lib : $s3_LIBS
  740. ICU libs : $icu_uc_LIBS $icu_i18n_LIBS
  741. Python flags : $PYTHON_INCLUDES
  742. Python libs : $PYTHON_LIBS
  743. ])