1 # Simple configuration script for OpenChange
2 # Written by Jelmer Vernooij <jelmer@openchange.org>
5 AC_INIT(openchange, 0.8, [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])
12 dnl #################################################################
13 dnl Check for OS dependent options
14 dnl #################################################################
18 *freebsd*) BUILD_FOR_FREEBSD=yes ;;
22 # OC_CHECK_SAMBA_PATH([PATH],[action-if-found],[action-if-not-found])
23 # -------------------------------------------------------------------
24 AC_DEFUN([OC_CHECK_SAMBA_PATH],
26 old_PKG_CONFIG_PATH="$PKG_CONFIG_PATH"
27 PKG_CONFIG_PATH="$1/lib/pkgconfig"
28 export PKG_CONFIG_PATH
29 PKG_CHECK_EXISTS([samba-hostconfig], [found=1], [found=0])
30 PKG_CONFIG_PATH="$old_PKG_CONFIG_PATH"
31 if test $found = 1; then
32 ifelse([$2],[], [echo -n ], [$2])
33 ifelse([$3],[],[],[else
38 AC_MSG_CHECKING([for samba 4])
41 [AC_HELP_STRING([--with-samba], [Override location Samba is installed])],
43 sambaprefix="$withval"
45 for p in "$prefix" /usr/local/samba /usr/local /usr
47 OC_CHECK_SAMBA_PATH($p, [sambaprefix="$p"])
51 OC_CHECK_SAMBA_PATH($sambaprefix,[], AC_MSG_ERROR(Samba 4 not found))
52 AC_MSG_RESULT($sambaprefix)
53 PKG_CONFIG_PATH="$sambaprefix/lib/pkgconfig:$PKG_CONFIG_PATH"
54 PATH="$sambaprefix/bin:$PATH"
61 AC_ARG_VAR([NAME], [var name])
62 if test x"$enable_$1" = x""; then
68 # OC_CHECK_SAMBA_VERSION([RELEASE],[VERSION], [action-if-found],[action-if-not-found],
69 # [action-if-cross-compiling])
70 # ------------------------------------------------------------------------------------
71 AC_DEFUN([OC_CHECK_SAMBA_VERSION], [
72 AC_RUN_IFELSE([AC_LANG_SOURCE([[
73 #include <samba/version.h>
74 int main() { if (!strcmp(SAMBA_VERSION_STRING, "$1") || !strcmp(SAMBA_VERSION_STRING, "$2")) {return 0; } else { return -1;} }
76 ifelse([$4],[],[AC_MSG_WARN([The Samba4 version installed on your system doesn't meet OpenChange requirements ($1 or $2).])],[$4])],[$5])
80 # OC_RULE_ADD([NAME], [TYPE])
81 # ---------------------------
82 AC_DEFUN([OC_RULE_ADD],
84 AC_ARG_VAR([NAME], [rule name])
85 AC_ARG_VAR([TYPE], [rule type])
86 if test "x$1_set" != "xset"; then
90 OC_$2_INSTALL+=" $1-install"
91 OC_$2_UNINSTALL+=" $1-uninstall"
92 OC_$2_INSTALLPC+=" $1-installpc"
93 OC_$2_INSTALLHEADER+=" $1-installheader"
94 OC_$2_INSTALLLIB+=" $1-installlib"
96 AC_SUBST(OC_$2_INSTALLPC)
97 AC_SUBST(OC_$2_INSTALLHEADER)
98 AC_SUBST(OC_$2_INSTALLLIB)
102 OC_$2_INSTALL+=" $1-install"
103 OC_$2_UNINSTALL+=" $1-uninstall"
107 OC_$2_CLEAN+="$1-clean"
108 OC_$2_INSTALL+=" $1-install"
109 OC_$2_UNINSTALL+=" $1-uninstall"
114 AC_SUBST(OC_$2_CLEAN)
115 AC_SUBST(OC_$2_INSTALL)
116 AC_SUBST(OC_$2_UNINSTALL)
123 dnl ###########################################################################
124 dnl FreeBSD installs some libraries such as libpopt in the non default
125 dnl search path /usr/local/{include,lib}. This nasty hack ensures
126 dnl configure.ac will find the library if available and additional
127 dnl flags be correctly added while compiling.
128 dnl ###########################################################################
129 if test x"$BUILD_FOR_FREEBSD" = x"yes"; then
130 CFLAGS+=" -I/usr/local/include"
131 LDFLAGS+=" -L/usr/local/lib"
134 dnl ----------------------------------------------------------------------------
135 dnl Check for comparison_fn_t
136 dnl ----------------------------------------------------------------------------
137 AC_CHECK_TYPE(comparison_fn_t,
138 [AC_DEFINE(HAVE_COMPARISON_FN_T, 1,[Whether or not we have comparison_fn_t])])
141 dnl ###########################################################################
142 dnl libmapi and required dependencies
143 dnl ###########################################################################
145 dnl ---------------------------------------------------------------------------
147 dnl ---------------------------------------------------------------------------
150 dnl ---------------------------------------------------------------------------
151 dnl Check for install
152 dnl ---------------------------------------------------------------------------
155 dnl ---------------------------------------------------------------------------
157 dnl ---------------------------------------------------------------------------
158 . `dirname $0`/VERSION
159 AC_SUBST(OPENCHANGE_VERSION_IS_SVN_SNAPSHOT)
161 AC_PATH_PROG(PERL, perl)
163 if test x"$PERL" = x""; then
164 AC_MSG_WARN([No version of perl was found!])
165 AC_MSG_ERROR([Please install perl http://www.perl.com])
169 dnl ---------------------------------------------------------------------------
171 dnl ---------------------------------------------------------------------------
172 AC_PATH_PROG(PIDL, pidl)
174 if test x"$PIDL" = x""; then
175 AC_MSG_WARN([No version of pidl was found!])
176 AC_MSG_ERROR([Please install pidl])
180 dnl ---------------------------------------------------------------------------
182 dnl ---------------------------------------------------------------------------
184 AC_PATH_PROG(PYTHON,python)
185 AC_PATH_PROG(PYTHON_CONFIG,python-config)
187 AC_MSG_CHECKING(python library directory)
188 pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1, 0, '\\${prefix}')"`
189 AC_MSG_RESULT($pythondir)
193 dnl ----------------------------------------------------------------------------
195 dnl Flex version < 2.5.35 is fine but 2.5.4 beta is not. This is the
196 dnl default version provided under FreeBSD or RHL5
197 dnl ----------------------------------------------------------------------------
198 if test x"$OPENCHANGE_VERSION_IS_SVN_SNAPSHOT" = x"yes"; then
199 AC_ARG_VAR([FLEX], [Location of the flex program.])
200 AC_CHECK_PROG([FLEX], [flex], [flex])
202 if test x"$FLEX" = x""; then
203 AC_MSG_WARN([No version of flex was found!])
204 AC_MSG_ERROR([Please install flex])
206 V=`$FLEX --version | awk '{print $NF}'`
207 W=`echo $V | awk -F. '{if (((($1*100 + $2)*100 + $3) > 20535) || $3 == 4) print "no"}'`
208 if test "x$W" != x ; then
209 AC_MSG_WARN([Adjust your FLEX environment variable])
210 AC_MSG_ERROR([Flex version 2.5.35 or below is needed. You have $V])
217 dnl ---------------------------------------------------------------------------
219 dnl ---------------------------------------------------------------------------
220 PKG_CHECK_MODULES(TALLOC, talloc)
221 PKG_CHECK_MODULES(SAMBA, dcerpc ndr samba-hostconfig)
222 PKG_CHECK_MODULES(LDB, ldb)
224 dnl ---------------------------------------------------------------------------
225 dnl Check a particular Samba4 git revision
226 dnl ---------------------------------------------------------------------------
228 oc_save_CPPFLAGS="$CPPFLAGS"
229 CPPFLAGS="$CPPFLAGS `$PKG_CONFIG --cflags-only-I samba-hostconfig`"
230 AC_CHECK_HEADER([samba/version.h],, AC_MSG_ERROR([Could not find Samba4 headers. Re-run ./configure with --with-samba=XXX where
231 XXX is the prefix that Samba4 was installed to.]))
233 . `dirname $0`/script/samba4_ver.sh
235 OC_CHECK_SAMBA_VERSION([$SAMBA4_RELEASE],[$SAMBA4_GIT_VER-GIT-$SAMBA4_GIT_REV])
236 CPPFLAGS="$oc_save_CPPFLAGS"
238 dnl ---------------------------------------------------------------------------
239 dnl Finally add libmapi to the library list
240 dnl ---------------------------------------------------------------------------
241 OC_RULE_ADD(libmapi, LIBS)
243 dnl nasty hack: only compile IDL if we have a library
244 dnl libraries require libmapi and libmapi require IDL
248 dnl ###########################################################################
249 dnl libmapi++ dependencies
250 dnl ###########################################################################
252 dnl ---------------------------------------------------------------------------
254 dnl ---------------------------------------------------------------------------
255 AC_CACHE_CHECK([C++ compiler availability], [ac_cv_libmapixx_gxx_works],
258 AC_COMPILE_IFELSE([int main() { return 0; }],
259 [ac_cv_libmapixx_gxx_works=yes],
260 [ac_cv_libmapixx_gxx_works=no])
264 dnl ---------------------------------------------------------------------------
265 dnl Check for boost-thread
266 dnl ---------------------------------------------------------------------------
268 AC_ARG_VAR([BOOST_LIB_SUFFIX], [Boost library name suffix])
270 AC_CACHE_CHECK([for boost_thread$BOOST_LIB_SUFFIX library], [ov_cv_boost_thread],
272 ov_cv_boost_thread=no
274 LIBS="-lboost_thread$BOOST_LIB_SUFFIX $LIBS"
276 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <boost/thread.hpp>]],
277 [[boost::thread t]])],
278 [ov_cv_boost_thread=yes])
284 if test x"$ac_cv_libmapixx_gxx_works" = "xyes"; then
285 if test x"$ov_cv_boost_thread" = "xyes"; then
287 OC_RULE_ADD(libmapixx, LIBS)
292 dnl ###########################################################################
293 dnl libocpf dependencies
294 dnl ###########################################################################
296 dnl ---------------------------------------------------------------------------
298 dnl ---------------------------------------------------------------------------
299 if test x"$OPENCHANGE_VERSION_IS_SVN_SNAPSHOT" = x"yes"; then
300 AC_ARG_VAR([BISON], [Location of the bison program.])
301 AC_PATH_PROG([BISON], [bison], [bison])
303 if test x"$BISON" != x""; then
304 OC_RULE_ADD(libocpf, LIBS)
308 OC_RULE_ADD(libocpf, LIBS)
313 dnl ###########################################################################
314 dnl libmapiadmin dependencies
315 dnl ###########################################################################
316 PKG_CHECK_EXISTS([ dcerpc_samr ],
318 enable_libmapiadmin="yes"
320 enable_libmapiadmin="no"
323 if test x"$enable_libmapiadmin" = x"yes"; then
324 PKG_CHECK_MODULES(SAMR, dcerpc_samr)
325 OC_RULE_ADD(libmapiadmin, LIBS)
330 dnl ##########################################################################
331 dnl tools dependencies
332 dnl ##########################################################################
334 dnl --------------------------------------------------------------------------
335 dnl Check for libical
336 dnl --------------------------------------------------------------------------
337 PKG_CHECK_MODULES([ICAL], [libical], [have_libical="yes"], [have_libical="no"])
338 AC_SUBST(ICAL_CFLAGS)
341 dnl --------------------------------------------------------------------------
343 dnl --------------------------------------------------------------------------
345 AC_CHECK_LIB([popt], [poptFreeContext],
347 AC_DEFINE(HAVE_LIBPOPT, 1, [Define if you want to use libpopt])
351 AC_MSG_WARN([libpopt is missing - can't build openchange tools])
355 if test x"$enable_libpopt" = x"yes"; then
356 if test x"$enable_libmapiadmin" = x"yes"; then
357 OC_RULE_ADD(openchangepfadmin, TOOLS)
358 OC_RULE_ADD(mapitest, TOOLS)
361 if test x"$enable_libocpf" = x"yes"; then
362 OC_RULE_ADD(openchangeclient, TOOLS)
365 if test x"$have_libical" = x"yes"; then
366 OC_RULE_ADD(exchange2ical, TOOLS)
369 OC_RULE_ADD(mapiprofile, TOOLS)
370 OC_RULE_ADD(openchangemapidump, TOOLS)
371 OC_RULE_ADD(schemaIDGUID, TOOLS)
372 OC_RULE_ADD(locale_codepage, TOOLS)
375 dnl --------------------------------------------------------------------------
376 dnl Check for libmagic
377 dnl --------------------------------------------------------------------------
378 AC_CHECK_LIB([magic], [magic_open],
380 AC_DEFINE(HAVE_LIBMAGIC, 1, [Define if you want to use libmagic])
381 MAGIC_LIBS="-lmagic -lz"
382 enable_libmagic="yes"
386 AC_MSG_WARN([libmagic is missing - can't build exchange2mbox])
390 if test x"$enable_libmagic" = x"yes"; then
391 AC_CHECK_LIB([z], [gzopen], [],
393 AC_MSG_ERROR([Z library not found, please install zlib-devel.], [1])
395 if test x"$enable_libpopt" = x"yes"; then
396 OC_RULE_ADD(exchange2mbox, TOOLS)
401 dnl ##########################################################################
402 dnl libmapistore backends dependencies
403 dnl ##########################################################################
405 dnl --------------------------------------------------------------------------
406 dnl Check for sqlite3
407 dnl --------------------------------------------------------------------------
408 PKG_CHECK_MODULES(SQLITE, sqlite3, SQLITEFOUND=yes, [SQLITEFOUND=no])
409 AC_SUBST(SQLITE_CFLAGS)
410 AC_SUBST(SQLITE_LIBS)
412 if test x"$SQLITEFOUND" = x"yes"; then
413 OC_RULE_ADD(mapistore_sqlite3, MAPISTORE)
417 dnl ##########################################################################
418 dnl torture dependencies
419 dnl ##########################################################################
420 AC_PATH_PROG([SMBTORTURE], [smbtorture], no)
422 if test x"$SMBTORTURE" != x""; then
423 TORTURE_MODULESDIR=`$PKG_CONFIG --variable=modulesdir torture`
424 AC_SUBST(TORTURE_MODULESDIR)
425 OC_RULE_ADD(torture, TORTURE)
429 dnl ##########################################################################
431 dnl ##########################################################################
432 if test x$PYTHON != x; then
433 OC_RULE_ADD(mapiproxy, SERVER)
436 AC_ARG_WITH(modulesdir,
437 [AS_HELP_STRING([--with-modulesdir], [Modules path to use])],
438 [modulesdir="$withval"; ],
439 [modulesdir="\${prefix}/modules"; ])
443 dnl ##########################################################################
444 dnl Swig bindings dependencies
445 dnl ##########################################################################
446 AC_ARG_ENABLE(swig-perl, AC_HELP_STRING([--enable-swig-perl],
447 [build SWIG interfaces for Perl]),
448 enable_perlswig="$enableval")
449 if test "x${enable_perlswig}" = xyes; then
450 AC_PATH_PROG(SWIG, swig)
454 AC_MSG_ERROR(Please install swig)
457 SWIGDIRSALL+="swigperl-all"
458 SWIGDIRSINSTALL+="swigperl-install"
459 SWIGDIRSUNINSTALL+="swigperl-uninstall"
462 PERL5DIR=`$PERL -e 'use Config; my $dir = $Config{sitelib}; print $dir'`
465 AC_SUBST(SWIGDIRSALL)
466 AC_SUBST(SWIGDIRSINSTALL)
467 AC_SUBST(SWIGDIRSUNINSTALL)
469 dnl ##########################################################################
470 dnl Python bindings dependencies
471 dnl ##########################################################################
472 AC_ARG_ENABLE(pymapi, AC_HELP_STRING([--enable-pymapi],
473 [build Python bindings for libmapi]),
474 enable_pymapi="$enableval",
476 if test "x${enable_pymapi}" = xyes; then
478 PYMAPIINSTALL+="pymapi-install"
479 PYMAPIUNINSTALL+="pymapi-uninstall"
482 PYCDIR=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(1, prefix='\\$(prefix)')"`
486 AC_SUBST(PYMAPIINSTALL)
487 AC_SUBST(PYMAPIUNINSTALL)
489 dnl ##########################################################################
490 dnl Documentation dependencies
491 dnl ##########################################################################
492 AC_PATH_PROG(DOXYGEN, doxygen)
493 if test x"$DOXYGEN" = x""; then
503 dnl ***********************
505 dnl ***********************
506 AC_CONFIG_FILES([config.mk libmapi.pc libmapiadmin.pc libocpf.pc mapiproxy/libmapiproxy.pc
507 mapiproxy/libmapiserver.pc mapiproxy/libmapistore.pc Doxyfile libmapi++/Doxyfile
508 libocpf/Doxyfile libmapiadmin/Doxyfile libmapi/Doxyfile mapiproxy/Doxyfile
509 utils/mapitest/Doxyfile])
513 dnl ##########################################################################
514 dnl Print configuration info
515 dnl ##########################################################################
518 OC_SETVAL(libmapiadmin)
522 OC_SETVAL(openchangeclient)
523 OC_SETVAL(mapiprofile)
524 OC_SETVAL(openchangepfadmin)
525 OC_SETVAL(exchange2mbox)
526 OC_SETVAL(exchange2ical)
528 OC_SETVAL(openchangemapidump)
529 OC_SETVAL(schemaIDGUID)
530 OC_SETVAL(locale_codepage)
539 ===============================================================
540 OpenChange Configuration (Please review)
545 * OpenChange MAPI library: $enable_libmapi
547 * OpenChange Libraries:
548 - libmapi++: $enable_libmapixx
549 - libmapiadmin: $enable_libmapiadmin
550 - libocpf: $enable_libocpf
553 - mapiproxy: $enable_mapiproxy
555 * OpenChange mapistore backends:
556 - sqlite3: $enable_mapistore_sqlite3
559 - openchangeclient: $enable_openchangeclient
560 - mapiprofile: $enable_mapiprofile
561 - openchangepfadmin: $enable_openchangepfadmin
562 - exchange2mbox: $enable_exchange2mbox
563 - exchange2ical: $enable_exchange2ical
564 - mapitest: $enable_mapitest
565 - openchangemapidump: $enable_openchangemapidump
566 - schemaIDGUID: $enable_schemaIDGUID
567 - locale_codepage: $enable_locale_codepage
569 * OpenChange Torture Suite: $enable_torture
571 * OpenChange Documentation: $enable_doxygen
573 * OpenChange Bindings:
574 - Perl: $enable_perlswig
575 - Python: $enable_pymapi
577 ===============================================================