1 # Simple configuration script for OpenChange
2 # Written by Jelmer Vernooij <jelmer@openchange.org>
5 AC_INIT(openchange, 0.9, [openchange@openchange.org])
6 AC_CONFIG_HEADER([config.h])
8 AC_DEFINE(_GNU_SOURCE, 1, [Use GNU extensions])
10 PKG_PROG_PKG_CONFIG([0.20])
14 dnl #################################################################
15 dnl Check for OS dependent options
16 dnl #################################################################
20 *freebsd*) BUILD_FOR_FREEBSD=yes ;;
21 *solaris*) BUILD_FOR_SOLARIS=yes ;;
25 # OC_CHECK_SAMBA_PATH([PATH],[action-if-found],[action-if-not-found])
26 # -------------------------------------------------------------------
27 AC_DEFUN([OC_CHECK_SAMBA_PATH],
29 old_PKG_CONFIG_PATH="$PKG_CONFIG_PATH"
30 PKG_CONFIG_PATH="$1/lib/pkgconfig"
31 export PKG_CONFIG_PATH
32 PKG_CHECK_EXISTS([samba-hostconfig], [found=1], [found=0])
33 PKG_CONFIG_PATH="$old_PKG_CONFIG_PATH"
34 if test $found = 1; then
35 ifelse([$2],[], [echo -n ], [$2])
36 ifelse([$3],[],[],[else
41 AC_MSG_CHECKING([for samba 4])
44 [AC_HELP_STRING([--with-samba], [Override location Samba is installed])],
46 sambaprefix="$withval"
48 for p in "$prefix" /usr/local/samba /usr/local /usr
50 OC_CHECK_SAMBA_PATH($p, [sambaprefix="$p"])
54 OC_CHECK_SAMBA_PATH($sambaprefix,[], AC_MSG_ERROR(Samba 4 not found))
55 AC_MSG_RESULT($sambaprefix)
56 PKG_CONFIG_PATH="$sambaprefix/lib/pkgconfig:$PKG_CONFIG_PATH"
57 PATH="$sambaprefix/bin:$PATH"
64 AC_ARG_VAR([NAME], [var name])
65 if test x"$enable_$1" = x""; then
71 # OC_CHECK_SAMBA_VERSION([RELEASE],[VERSION], [action-if-found],[action-if-not-found],
72 # [action-if-cross-compiling])
73 # ------------------------------------------------------------------------------------
74 AC_DEFUN([OC_CHECK_SAMBA_VERSION], [
75 AC_RUN_IFELSE([AC_LANG_SOURCE([[
76 #include <samba/version.h>
77 int main() { if (!strcmp(SAMBA_VERSION_STRING, "$1") || !strcmp(SAMBA_VERSION_STRING, "$2")) {return 0; } else { return -1;} }
79 ifelse([$4],[],[AC_MSG_WARN([The Samba4 version installed on your system doesn't meet OpenChange requirements ($1 or $2).])],[$4])],[$5])
83 # OC_RULE_ADD([NAME], [TYPE])
84 # ---------------------------
85 AC_DEFUN([OC_RULE_ADD],
87 AC_ARG_VAR([NAME], [rule name])
88 AC_ARG_VAR([TYPE], [rule type])
89 if test "x$1_set" != "xset"; then
93 OC_$2_INSTALL="$OC_$2_INSTALL $1-install"
94 OC_$2_UNINSTALL="$OC_$2_UNINSTALL $1-uninstall"
95 OC_$2_INSTALLPC="$OC_$2_INSTALLPC $1-installpc"
96 OC_$2_INSTALLHEADER="$OC_$2_INSTALLHEADER $1-installheader"
97 OC_$2_INSTALLLIB="$OC_$2_INSTALLLIB $1-installlib"
99 AC_SUBST(OC_$2_INSTALLPC)
100 AC_SUBST(OC_$2_INSTALLHEADER)
101 AC_SUBST(OC_$2_INSTALLLIB)
105 OC_$2_INSTALL="$OC_$2_INSTALL $1-install"
106 OC_$2_UNINSTALL="$OC_$2_UNINSTALL $1-uninstall"
110 OC_$2_CLEAN="$OC_$2_CLEAN $1-clean"
111 OC_$2_INSTALL="$OC_$2_INSTALL $1-install"
112 OC_$2_UNINSTALL="$OC_$2_UNINSTALL $1-uninstall"
117 AC_SUBST(OC_$2_CLEAN)
118 AC_SUBST(OC_$2_INSTALL)
119 AC_SUBST(OC_$2_UNINSTALL)
126 dnl ##################################################################
127 dnl Some general portability stuff
128 dnl ##################################################################
129 AC_CHECK_HEADERS( sys/cdefs.h string.h sys/sockio.h)
130 AC_CHECK_FUNCS( strcasestr )
134 dnl ###########################################################################
135 dnl _AC_LANG_COMPILER_ICC
136 dnl Check whether the compiler for the current language is really ICC.
137 dnl ###########################################################################
138 m4_define([AC_LANG_COMPILER_ICC],
139 [AC_CACHE_CHECK([whether we are really using the Intel _AC_LANG compiler],
140 [ac_cv_[]_AC_LANG_ABBREV[]_compiler_icc],
141 [_AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[#ifndef __INTEL_COMPILER
145 [ac_compiler_icc=yes],
146 [ac_compiler_icc=no])
147 ac_cv_[]_AC_LANG_ABBREV[]_compiler_icc=$ac_compiler_icc
150 dnl ###########################################################################
151 dnl _AC_LANG_COMPILER_SUNCC
152 dnl Check whether the compiler for the current language is really Sun compiler.
153 dnl ###########################################################################
154 m4_define([AC_LANG_COMPILER_SUNCC],
155 [AC_CACHE_CHECK([whether we are really using the Sun _AC_LANG compiler],
156 [ac_cv_[]_AC_LANG_ABBREV[]_compiler_suncc],
157 [_AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[#ifndef __SUNPRO_C
161 [ac_compiler_suncc=yes],
162 [ac_compiler_suncc=no])
163 ac_cv_[]_AC_LANG_ABBREV[]_compiler_suncc=$ac_compiler_suncc
166 dnl ###########################################################################
167 dnl FreeBSD installs some libraries such as libpopt in the non default
168 dnl search path /usr/local/{include,lib}. This nasty hack ensures
169 dnl configure.ac will find the library if available and additional
170 dnl flags be correctly added while compiling.
171 dnl ###########################################################################
172 if test x"$BUILD_FOR_FREEBSD" = x"yes"; then
173 CFLAGS="$CFLAGS -I/usr/local/include"
174 LDFLAGS="$LDFLAGS -L/usr/local/lib"
175 CXXFLAGS="$CXXFLAGS -I/usr/local/include"
178 dnl ----------------------------------------------------------------------------
179 dnl Check for comparison_fn_t
180 dnl ----------------------------------------------------------------------------
181 AC_CHECK_TYPE(comparison_fn_t,
182 [AC_DEFINE(HAVE_COMPARISON_FN_T, 1,[Whether or not we have comparison_fn_t])],
183 [], [[#include <stdlib.h>]])
186 dnl ###########################################################################
187 dnl libmapi and required dependencies
188 dnl ###########################################################################
190 dnl ---------------------------------------------------------------------------
192 dnl ---------------------------------------------------------------------------
195 dnl ---------------------------------------------------------------------------
197 dnl ---------------------------------------------------------------------------
198 AC_ARG_ENABLE([coverage], AS_HELP_STRING([--enable-coverage],
199 [Compile the library with code coverage support (default is NO)]),
200 [use_cov=$enableval], [use_cov=no])
203 if test "x$use_cov" = x"yes"; then
204 COVERAGE_INIT="coverage-init"
206 AC_SUBST(COVERAGE_INIT)
208 dnl ---------------------------------------------------------------------------
209 dnl Set up the right compiler options
210 dnl ---------------------------------------------------------------------------
211 AC_LANG_COMPILER_SUNCC
214 if test x"$ac_cv_c_compiler_suncc" = x"yes"; then
215 dnl Sun Studio Compiler
216 COMPILER_OPTIONS_SHARED="-D__FUNCTION__=__func__"
217 COMPILER_OPTIONS_C="$COMPILER_OPTIONS_SHARED"
218 COMPILER_OPTIONS_CXX="$COMPILER_OPTIONS_SHARED"
219 elif test x"$ac_cv_c_compiler_icc" = x"yes"; then
221 COMPILER_OPTIONS_SHARED="-O3 -Wall -g3 -fstrict-aliasing -Wmissing-prototypes -Wstrict-prototypes -wd2259,188,593,869,981,181,1419,2218"
222 COMPILER_OPTIONS_C="$COMPILER_OPTIONS_SHARED"
223 COMPILER_OPTIONS_CXX="$COMPILER_OPTIONS_SHARED"
226 COMPILER_OPTIONS_SHARED="-Wall -g3 -fstrict-aliasing -Wp,-D_FORTIFY_SOURCE=2"
227 if test "x$use_cov" = "xyes"; then
228 COMPILER_OPTIONS_SHARED="-O0 $COMPILER_OPTIONS_SHARED"
230 COMPILER_OPTIONS_SHARED="-O3 $COMPILER_OPTIONS_SHARED"
232 COMPIILER_OPTIONS_C="$COMPILER_OPTIONS_SHARED -Wmissing-prototypes -Wstrict-prototypes"
233 if test "x$use_cov" = "xyes"; then
234 COMPILER_OPTIONS_C="$COMPIILER_OPTIONS_C -fprofile-arcs -ftest-coverage"
235 LDFLAGS="$LDFLAGS -lgcov --coverage"
237 COMPILER_OPTIONS_CXX="$COMPILER_OPTIONS_SHARED"
239 AC_SUBST(COMPILER_OPTIONS_C)
240 AC_SUBST(COMPILER_OPTIONS_CXX)
242 dnl ---------------------------------------------------------------------------
243 dnl Define an assert macro if this is a development release
244 dnl ---------------------------------------------------------------------------
245 . `dirname $0`/VERSION
246 AC_SUBST(OPENCHANGE_VERSION_IS_SVN_SNAPSHOT)
248 if test x"$OPENCHANGE_VERSION_IS_SVN_SNAPSHOT" = x"yes"; then
249 ASSERT_DEFINITION="-DENABLE_ASSERTS"
251 AC_SUBST(ASSERT_DEFINITION)
253 dnl ---------------------------------------------------------------------------
254 dnl Check for install
255 dnl ---------------------------------------------------------------------------
258 dnl ---------------------------------------------------------------------------
260 dnl ---------------------------------------------------------------------------
261 AC_PATH_PROG(PERL, perl)
263 if test x"$PERL" = x""; then
264 AC_MSG_WARN([No version of perl was found!])
265 AC_MSG_ERROR([Please install perl http://www.perl.com])
269 dnl ---------------------------------------------------------------------------
271 dnl ---------------------------------------------------------------------------
272 AC_PATH_PROG(PIDL, pidl)
274 if test x"$PIDL" = x""; then
275 AC_MSG_WARN([No version of pidl was found!])
276 AC_MSG_ERROR([Please install pidl])
280 dnl ---------------------------------------------------------------------------
282 dnl ---------------------------------------------------------------------------
284 AC_PATH_PROG(PYTHON,python)
285 AC_PATH_PROG(PYTHON_CONFIG,python-config)
287 AC_MSG_CHECKING(python library directory)
288 pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1, 0, '\\${prefix}')"`
289 AC_MSG_RESULT($pythondir)
293 dnl ----------------------------------------------------------------------------
295 dnl Flex version < 2.5.35 is fine but 2.5.4 beta is not. This is the
296 dnl default version provided under FreeBSD or RHL5
297 dnl ----------------------------------------------------------------------------
298 if test x"$OPENCHANGE_VERSION_IS_SVN_SNAPSHOT" = x"yes"; then
299 AC_ARG_VAR([FLEX], [Location of the flex program.])
300 AC_CHECK_PROG([FLEX], [flex], [flex])
302 if test x"$FLEX" = x""; then
303 AC_MSG_WARN([No version of flex was found!])
304 AC_MSG_ERROR([Please install flex])
306 V=`$FLEX --version | awk '{print $NF}'`
307 W=`echo $V | awk -F. '{if (((($1*100 + $2)*100 + $3) > 20535) || $3 == 4) print "no"}'`
308 if test "x$W" != x ; then
309 AC_MSG_WARN([Adjust your FLEX environment variable])
310 AC_MSG_ERROR([Flex version 2.5.35 or below is needed. You have $V])
317 dnl ---------------------------------------------------------------------------
319 dnl ---------------------------------------------------------------------------
320 PKG_CHECK_MODULES(TALLOC, talloc)
321 PKG_CHECK_MODULES(SAMBA, dcerpc ndr samba-hostconfig tevent)
322 PKG_CHECK_MODULES(TDB, tdb)
323 PKG_CHECK_MODULES(LDB, ldb)
325 dnl ---------------------------------------------------------------------------
326 dnl Check a particular Samba4 git revision
327 dnl ---------------------------------------------------------------------------
329 oc_save_CPPFLAGS="$CPPFLAGS"
330 CPPFLAGS="$CPPFLAGS `$PKG_CONFIG --cflags-only-I samba-hostconfig`"
331 AC_CHECK_HEADER([samba/version.h],, AC_MSG_ERROR([Could not find Samba4 headers. Re-run ./configure with --with-samba=XXX where
332 XXX is the prefix that Samba4 was installed to.]))
334 . `dirname $0`/script/samba4_ver.sh
336 OC_CHECK_SAMBA_VERSION([$SAMBA4_RELEASE],[$SAMBA4_GIT_VER-GIT-$SAMBA4_GIT_REV])
337 CPPFLAGS="$oc_save_CPPFLAGS"
339 dnl ---------------------------------------------------------------------------
340 dnl Finally add libmapi to the library list
341 dnl ---------------------------------------------------------------------------
342 OC_RULE_ADD(libmapi, LIBS)
344 dnl nasty hack: only compile IDL if we have a library
345 dnl libraries require libmapi and libmapi require IDL
349 dnl ###########################################################################
350 dnl libmapi++ dependencies
351 dnl ###########################################################################
353 dnl ---------------------------------------------------------------------------
355 dnl ---------------------------------------------------------------------------
356 AC_CACHE_CHECK([C++ compiler availability], [ac_cv_libmapixx_gxx_works],
359 AC_COMPILE_IFELSE([int main() { return 0; }],
360 [ac_cv_libmapixx_gxx_works=yes],
361 [ac_cv_libmapixx_gxx_works=no])
365 dnl ---------------------------------------------------------------------------
366 dnl Check for boost-thread
367 dnl ---------------------------------------------------------------------------
369 AC_ARG_VAR([BOOST_LIB_SUFFIX], [Boost library name suffix])
371 AC_CACHE_CHECK([for boost_thread$BOOST_LIB_SUFFIX library], [ov_cv_boost_thread],
373 ov_cv_boost_thread=no
375 LIBS="-lboost_thread$BOOST_LIB_SUFFIX $LIBS"
377 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <boost/thread.hpp>]],
378 [[boost::thread t]])],
379 [ov_cv_boost_thread=yes])
385 if test x"$ac_cv_libmapixx_gxx_works" = "xyes"; then
386 if test x"$ov_cv_boost_thread" = "xyes"; then
388 OC_RULE_ADD(libmapixx, LIBS)
393 dnl ###########################################################################
394 dnl libocpf dependencies
395 dnl ###########################################################################
397 dnl ---------------------------------------------------------------------------
399 dnl ---------------------------------------------------------------------------
400 if test x"$OPENCHANGE_VERSION_IS_SVN_SNAPSHOT" = x"yes"; then
401 AC_ARG_VAR([BISON], [Location of the bison program.])
402 AC_PATH_PROG([BISON], [bison], [bison])
404 if test x"$BISON" != x""; then
405 OC_RULE_ADD(libocpf, LIBS)
409 OC_RULE_ADD(libocpf, LIBS)
414 dnl ###########################################################################
415 dnl libmapiadmin dependencies
416 dnl ###########################################################################
417 PKG_CHECK_EXISTS([ dcerpc_samr ],
419 enable_libmapiadmin="yes"
421 enable_libmapiadmin="no"
424 if test x"$enable_libmapiadmin" = x"yes"; then
425 PKG_CHECK_MODULES(SAMR, dcerpc_samr)
426 OC_RULE_ADD(libmapiadmin, LIBS)
431 dnl ##########################################################################
432 dnl tools dependencies
433 dnl ##########################################################################
435 dnl --------------------------------------------------------------------------
436 dnl Check for libical
437 dnl --------------------------------------------------------------------------
438 PKG_CHECK_MODULES([ICAL], [libical], [have_libical="yes"], [have_libical="no"])
439 AC_SUBST(ICAL_CFLAGS)
442 dnl --------------------------------------------------------------------------
444 dnl --------------------------------------------------------------------------
446 AC_CHECK_LIB([popt], [poptFreeContext],
448 AC_DEFINE(HAVE_LIBPOPT, 1, [Define if you want to use libpopt])
452 AC_MSG_WARN([libpopt is missing - can't build openchange tools])
456 if test x"$enable_libpopt" = x"yes"; then
457 if test x"$enable_libmapiadmin" = x"yes"; then
458 OC_RULE_ADD(openchangepfadmin, TOOLS)
459 OC_RULE_ADD(mapitest, TOOLS)
462 if test x"$enable_libocpf" = x"yes"; then
463 OC_RULE_ADD(openchangeclient, TOOLS)
466 if test x"$have_libical" = x"yes"; then
467 OC_RULE_ADD(exchange2ical, TOOLS)
470 OC_RULE_ADD(mapiprofile, TOOLS)
471 OC_RULE_ADD(openchangemapidump, TOOLS)
472 OC_RULE_ADD(schemaIDGUID, TOOLS)
473 OC_RULE_ADD(locale_codepage, TOOLS)
476 dnl --------------------------------------------------------------------------
477 dnl Check for libmagic
478 dnl --------------------------------------------------------------------------
479 AC_CHECK_LIB([magic], [magic_open],
481 AC_DEFINE(HAVE_LIBMAGIC, 1, [Define if you want to use libmagic])
482 MAGIC_LIBS="-lmagic -lz"
483 enable_libmagic="yes"
487 AC_MSG_WARN([libmagic is missing - can't build exchange2mbox])
491 if test x"$enable_libmagic" = x"yes"; then
492 AC_CHECK_LIB([z], [gzopen], [],
494 AC_MSG_ERROR([Z library not found, please install zlib-devel.], [1])
496 if test x"$enable_libpopt" = x"yes"; then
497 OC_RULE_ADD(exchange2mbox, TOOLS)
502 dnl ##########################################################################
503 dnl libmapistore backends dependencies
504 dnl ##########################################################################
506 dnl --------------------------------------------------------------------------
507 dnl Check for sqlite3
508 dnl --------------------------------------------------------------------------
509 PKG_CHECK_MODULES(SQLITE, sqlite3, SQLITEFOUND=yes, [SQLITEFOUND=no])
510 AC_SUBST(SQLITE_CFLAGS)
511 AC_SUBST(SQLITE_LIBS)
513 if test x"$SQLITEFOUND" = x"yes"; then
514 OC_RULE_ADD(mapistore_sqlite3, MAPISTORE)
516 enable_mapistore_sqlite3="no"
520 dnl ##########################################################################
521 dnl torture dependencies
522 dnl ##########################################################################
523 AC_PATH_PROG([SMBTORTURE], [smbtorture], no)
525 if test x"$SMBTORTURE" != x""; then
526 TORTURE_MODULESDIR=`$PKG_CONFIG --variable=modulesdir torture`
527 AC_SUBST(TORTURE_MODULESDIR)
528 OC_RULE_ADD(torture, TORTURE)
532 dnl ##########################################################################
534 dnl ##########################################################################
535 if test x$PYTHON != x; then
536 OC_RULE_ADD(mapiproxy, SERVER)
539 AC_ARG_WITH(modulesdir,
540 [AS_HELP_STRING([--with-modulesdir], [Modules path to use])],
541 [modulesdir="$withval"; ],
542 [modulesdir="\${prefix}/modules"; ])
546 dnl ##########################################################################
547 dnl Swig bindings dependencies
548 dnl ##########################################################################
549 AC_ARG_ENABLE(swig-perl, AC_HELP_STRING([--enable-swig-perl],
550 [build SWIG interfaces for Perl]),
551 enable_perlswig="$enableval")
552 if test "x${enable_perlswig}" = xyes; then
553 AC_PATH_PROG(SWIG, swig)
557 AC_MSG_ERROR(Please install swig)
560 SWIGDIRSALL="swigperl-all"
561 SWIGDIRSINSTALL="swigperl-install"
562 SWIGDIRSUNINSTALL="swigperl-uninstall"
565 PERL5DIR=`$PERL -e 'use Config; my $dir = $Config{sitelib}; print $dir'`
568 AC_SUBST(SWIGDIRSALL)
569 AC_SUBST(SWIGDIRSINSTALL)
570 AC_SUBST(SWIGDIRSUNINSTALL)
572 dnl ##########################################################################
573 dnl Python bindings dependencies
574 dnl ##########################################################################
575 AC_ARG_ENABLE(pymapi, AC_HELP_STRING([--enable-pymapi],
576 [build Python bindings for libmapi]),
577 enable_pymapi="$enableval",
579 if test "x${enable_pymapi}" = xyes; then
581 PYMAPIINSTALL="pymapi-install"
582 PYMAPIUNINSTALL="pymapi-uninstall"
585 PYCDIR=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(1, prefix='\\$(prefix)')"`
589 AC_SUBST(PYMAPIINSTALL)
590 AC_SUBST(PYMAPIUNINSTALL)
592 dnl ##########################################################################
593 dnl Documentation dependencies
594 dnl ##########################################################################
595 AC_PATH_PROG(DOXYGEN, doxygen)
596 if test x"$DOXYGEN" = x""; then
606 dnl ***********************
608 dnl ***********************
609 AC_CONFIG_FILES([config.mk libmapi.pc libmapiadmin.pc libocpf.pc mapiproxy/libmapiproxy.pc
610 mapiproxy/libmapiserver.pc mapiproxy/libmapistore.pc Doxyfile libmapi++/Doxyfile
611 libocpf/Doxyfile libmapiadmin/Doxyfile libmapi/Doxyfile mapiproxy/Doxyfile
612 utils/mapitest/Doxyfile])
616 dnl ##########################################################################
617 dnl Print configuration info
618 dnl ##########################################################################
621 OC_SETVAL(libmapiadmin)
625 OC_SETVAL(openchangeclient)
626 OC_SETVAL(mapiprofile)
627 OC_SETVAL(openchangepfadmin)
628 OC_SETVAL(exchange2mbox)
629 OC_SETVAL(exchange2ical)
631 OC_SETVAL(openchangemapidump)
632 OC_SETVAL(schemaIDGUID)
633 OC_SETVAL(locale_codepage)
642 ===============================================================
643 OpenChange Configuration (Please review)
648 * OpenChange MAPI library: $enable_libmapi
650 * OpenChange Libraries:
651 - libmapi++: $enable_libmapixx
652 - libmapiadmin: $enable_libmapiadmin
653 - libocpf: $enable_libocpf
656 - mapiproxy: $enable_mapiproxy
658 * OpenChange mapistore backends:
659 - sqlite3: $enable_mapistore_sqlite3
662 - openchangeclient: $enable_openchangeclient
663 - mapiprofile: $enable_mapiprofile
664 - openchangepfadmin: $enable_openchangepfadmin
665 - exchange2mbox: $enable_exchange2mbox
666 - exchange2ical: $enable_exchange2ical
667 - mapitest: $enable_mapitest
668 - openchangemapidump: $enable_openchangemapidump
669 - schemaIDGUID: $enable_schemaIDGUID
670 - locale_codepage: $enable_locale_codepage
672 * OpenChange Torture Suite: $enable_torture
674 * OpenChange Documentation: $enable_doxygen
676 * Coverage Tests: $use_cov
678 * OpenChange Bindings:
679 - Perl: $enable_perlswig
680 - Python: $enable_pymapi
683 ===============================================================