1dnl -*- mode: m4 -*-
2dnl follow section 5.3 of Autoconf, Automake book.
3dnl
4dnl 1. Boilerplate.
5dnl
6AC_PREREQ(2.59)
7dnl ###########################################################################
8dnl Boilerplace and versioning
9dnl ###########################################################################
10
11# if autoconf is used not in a git source tree, use version=2.5.0
12AC_INIT([balsa],
13        m4_esyscmd([test -d .git && echo -n `git describe --tags` || echo -n 2.5.1]),
14        [])
15
16AM_INIT_AUTOMAKE
17AC_LANG([C])
18# Automake-1.11 option for less verbose output
19# configure --disable-silent-rules to restore verbose
20m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
21
22AC_CONFIG_SRCDIR([src/main.c])
23AC_CONFIG_MACRO_DIR([m4])
24AC_CONFIG_HEADERS([config.h])
25AC_DEFINE_UNQUOTED(BALSA_VERSION, "AC_PACKAGE_VERSION",[Defines the Balsa version])
26
27AC_SYS_LARGEFILE
28
29dnl #####################################################################
30dnl 2. Options
31dnl #####################################################################
32AC_ARG_WITH([gnome],
33        AC_HELP_STRING([--with-gnome],
34                [Use GNOME libraries (default=yes)]),[
35	with_gnome=$withval
36],[
37	with_gnome=yes
38])
39
40dnl ###########################################################################
41dnl Configure locking
42dnl ###########################################################################
43
44AC_ARG_ENABLE(flock,
45        AC_HELP_STRING([--enable-flock],
46                       [Do NOT use flock() to lock files (default=no)]),
47	[if test x$enableval = xno; then balsa_cv_flock=no; fi])
48
49if test x$balsa_cv_flock = xyes; then
50	AC_DEFINE(USE_FLOCK,1,[Define if flock locking should be used.])
51fi
52
53balsa_cv_fcntl=yes
54AC_ARG_ENABLE(fcntl,
55        AC_HELP_STRING([--disable-fcntl],
56                       [Use fcntl() to lock files (default=yes)]),
57	[if test x$enableval = no; then balsa_cv_fcntl=no; fi])
58if test x$balsa_cv_fcntl = xyes; then
59	AC_DEFINE(USE_FCNTL,1,[Define if fcntl locking should be used.])
60fi
61
62AC_ARG_ENABLE(threads,
63        AC_HELP_STRING([--enable-threads],
64                       [Use threading for mail retrieval (default=yes)]),[
65	use_threads=$enableval
66],[
67	use_threads=yes
68])
69
70if test x"$use_threads" = xyes; then
71        AC_DEFINE(BALSA_USE_THREADS, 1,[Defined when balsa is to use threads.])
72fi
73
74AC_ARG_ENABLE(debug-threads,
75        AC_HELP_STRING([--enable-debug-threads],
76                       [Debug threads (default=no)]),[
77	debug_threads=$enableval
78],[
79	debug_threads=no
80])
81
82if test x"$debug_threads" = xyes; then
83        AC_DEFINE(BALSA_DEBUG_THREADS, 1,[Defined to debug threads.])
84fi
85
86
87AC_ARG_WITH([gpgme],
88   AC_HELP_STRING([--with-gpgme=gpgme-config],
89                  [build with gpgme/GnuPG support (default=no, path to gpgme-config optional)]),
90	          [ gpgmecfg=$withval ], [ gpgmecfg=no ])
91AC_ARG_ENABLE([smime],
92   AC_HELP_STRING([--enable-smime],
93                  [include S/MIME support (needs gpgme and gpgsm, experimental for gpg < 2.0.4)]),
94	          [ have_smime=$enableval ], [ have_smime=check ])
95AC_ARG_WITH([gpg-app],
96   AC_HELP_STRING([--with-gpg-app=PATH],
97                  [use PATH as GnuPG application (default=gpg2 if >= 2.0.4, otherwise gpg 1.x)]),
98	          [ gpgapp=$withval ], [ gpgapp=no ])
99
100
101
102AC_ARG_WITH(canberra,
103   AC_HELP_STRING([--with-canberra],
104                  [Use libcanberra-gtk3 for filter sounds (default=no)]),
105                  [with_canberra=$withval],[with_canberra=no])
106
107AC_ARG_WITH(compface,
108   AC_HELP_STRING([--with-compface],
109                  [Enable Compface (default=no)]),
110                  [with_compface=$withval],[with_compface=no])
111
112AC_ARG_WITH(esmtp,
113   AC_HELP_STRING([--with-esmtp=DIR],
114                  [Enable libESMTP (default=yes)]),
115                  [ with_esmtp=$withval ],[ with_esmtp=yes ])
116
117AC_ARG_ENABLE([gregex],
118   AC_HELP_STRING([--enable-gregex],
119                  [Use GRegex regular expressions if available (default=no)]),
120                  [ check_gregex=$enableval],[ check_gregex=no ])
121
122AC_ARG_WITH(gss,
123   AC_HELP_STRING([--with-gss],
124                  [Enable GSS (default=no)]),
125                  [with_gss=$withval],[with_gss=no])
126
127AC_ARG_WITH(html-widget,
128            AC_HELP_STRING([--with-html-widget=(no|gtkhtml2|gtkhtml4|webkit|webkit2)],
129                           [select the HTML renderer (default webkit)]),
130            [use_html_widget=$withval],
131            [use_html_widget=webkit])
132
133AC_ARG_WITH([gtksourceview],
134   AC_HELP_STRING([--with-gtksourceview],
135                  [Use GtkSourceView-3 if available (default=no)]),
136		  [with_gtksourceview=$withval],[with_gtksourceview=no])
137
138AC_ARG_WITH([gtkspell],
139   AC_HELP_STRING([--with-gtkspell],
140                  [Use GtkSpell/enchant if available (default=no)]),
141		  [with_gtkspell=$withval],[with_gtkspell=no])
142
143AC_ARG_WITH(iconv,
144   AC_HELP_STRING([--with-iconv=DIR],
145                  [Where libiconv is installed]),
146		  [if test "$with_iconv" != yes -a "$with_iconv" != no ; then
147                   CPPFLAGS="-I${with_iconv}/include $CPPFLAGS"
148                   LDFLAGS="-liconv -L${with_iconv}/lib $LDFLAGS"
149		   fi])
150
151AC_ARG_WITH([ldap],
152   AC_HELP_STRING([--with-ldap=DIR],
153                  [Use OpenLDAP if available (default=no)]),
154		  [with_ldap=$withval],[with_ldap=no])
155
156AC_ARG_WITH([libnotify],
157   AC_HELP_STRING([--with-libnotify],
158                  [Use libnotify if available (default=yes)]),
159		  [with_libnotify=$withval],[with_libnotify=yes])
160
161AC_ARG_WITH([macosx-desktop],
162   AC_HELP_STRING([--with-macosx-desktop],
163	          [Use Mac OS X Desktop Integration (default=no, extremely experimental)]),
164		  [use_igemacint=$withval],[use_igemacint=no])
165
166AC_ARG_WITH(nm,
167   AC_HELP_STRING([--with-nm],
168                  [Enable NetworkManager (default=yes)]),
169                  [with_nm=$withval],[with_nm=yes])
170
171AC_ARG_ENABLE([pcre],
172   AC_HELP_STRING([--enable-pcre],
173                  [Use Perl-compatible regular expressions if available (default=no)]),
174                  [ check_pcre=$enableval],[ check_pcre=no ])
175
176
177AC_ARG_WITH([rubrica],
178   AC_HELP_STRING([--with-rubrica],
179                  [add Rubrica2 address book support (needs libxml2, default=no)]),
180		  [with_rubrica=$withval],[with_rubrica=no])
181
182AC_ARG_WITH([sqlite],
183   AC_HELP_STRING([--with-sqlite=DIR],
184                  [Use SQLite for GPE address books (default=no)]),
185                  [with_sqlite=$withval],[with_sqlite=no])
186
187AC_ARG_WITH(ssl,
188   AC_HELP_STRING([--with-ssl],
189                  [Enable SSL (default=no)]),
190                  [ with_ssl=$withval ],[ with_ssl=no ])
191
192AC_ARG_WITH(gmime,
193   AC_HELP_STRING([--with-gmime],
194                  [Version of GMime 2.4, or 2.6 (default=detect)]),
195                  [with_gmime=$withval],[with_gmime=detect])
196
197AC_ARG_WITH(libsecret,
198   AC_HELP_STRING([--with-libsecret],
199                  [Link to libsecret instead of gnome-keyring (default=no)]),
200                  [with_libsecret=$withval],[with_libsecret=no])
201
202AC_ARG_ENABLE(more-warnings,
203   AC_HELP_STRING([--enable-more-warnings],
204                  [Enable maximum compiler warnings (default=yes)]),
205                  [set_more_warnings="$enableval"], [set_more_warnings=yes])
206
207
208dnl ##########################################################################
209dnl Enable touchscreen optimized UI?
210dnl ##########################################################################
211
212AC_ARG_ENABLE(touch-ui,
213              AC_HELP_STRING([--enable-touch-ui],
214                             [Enable Touchscreen UI mode (default=no)]),
215              [enable_touch_ui="$enableval"],[enable_touch_ui=no])
216
217dnl #####################################################################
218dnl 3. Programs: compilers and their options.
219dnl #####################################################################
220AC_PROG_CC
221m4_ifdef([AM_PROG_LIBTOOL],[AM_PROG_LIBTOOL],[AC_PROG_RANLIB])
222AC_PROG_LN_S
223
224# pkg-config
225#
226AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
227
228# yelp
229#
230AC_MSG_CHECKING([for Yelp tool])
231YELPTOOL=`which yelp-build 2>/dev/null`
232if test -z $YELPTOOL; then
233    AC_MSG_RESULT([no])
234    echo "*** The tools to build the documentation are not found."
235    echo "    To build it, please install the yelp-tools package."
236    echo "    Continuing with configure. ****"
237    AM_CONDITIONAL([HAVE_YELPTOOL], [false])
238else
239    AC_MSG_RESULT([yes])
240    YELP_HELP_INIT
241    AM_CONDITIONAL([HAVE_YELPTOOL], [true])
242fi
243
244# glib-genmarshal
245#
246AC_SUBST(GLIB_GENMARSHAL)
247GLIB_GENMARSHAL=`pkg-config --variable=glib_genmarshal glib-2.0`
248
249# gettext
250#
251ALL_LINGUAS="am ar az bg ca cs da de dz el en_CA en_GB es et eu fi fr ga gl he hi hr hu id it ja ko lt lv mk ml ms nb ne nl nn oc pa pl pt pt_BR ro ru rw sk sl sq sr sr@latin sv tr uk vi wa zh_CN zh_HK zh_TW"
252GETTEXT_PACKAGE=balsa
253AC_SUBST(GETTEXT_PACKAGE)
254AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
255        [The gettext package name.])
256
257AC_PROG_INTLTOOL
258AM_GLIB_GNU_GETTEXT
259
260# _NL_MEASUREMENT_MEASUREMENT is an enum and not a define
261AC_MSG_CHECKING([for _NL_MEASUREMENT_MEASUREMENT])
262AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]],
263                                [[char c;
264                                  c = *((unsigned char *)
265                                  nl_langinfo
266                                  (_NL_MEASUREMENT_MEASUREMENT));]])],
267               [have__nl_measurement_measurement=yes],
268               [have__nl_measurement_measurement=no])
269AC_MSG_RESULT($have__nl_measurement_measurement)
270if test "$have__nl_measurement_measurement" = "yes"; then
271  AC_DEFINE([HAVE__NL_MEASUREMENT_MEASUREMENT], [1],
272	    [Define if _NL_MEASUREMENT_MEASUREMENT is available])
273fi
274
275# sendmail
276#
277if test x"$with_esmtp" = xno; then
278AC_PATH_PROG(SENDMAIL, sendmail, no, $PATH:/usr/sbin:/usr/lib)
279AC_DEFINE_UNQUOTED(SENDMAIL, "$ac_cv_path_SENDMAIL",
280		   [Path to sendmail program.])
281fi
282
283dnl #####################################################################
284dnl GNOME libs
285dnl #####################################################################
286
287if test x$with_gnome != xno; then
288   gnome_extras="$gnome_extras gio-unix-2.0"
289   if test x$with_libsecret == xno; then
290     AC_MSG_CHECKING([whether we have gnome-keyring])
291     if $PKG_CONFIG --atleast-version=1.0 gnome-keyring-1; then
292        gnome_extras="$gnome_extras gnome-keyring-1"
293        AC_DEFINE(HAVE_GNOME_KEYRING,1,[Defined when gnome-keyring is there.])
294        # Work around http://bugzilla.gnome.org/show_bug.cgi?id=556530
295        if $PKG_CONFIG --atleast-version=2.24.1 gnome-keyring-1; then
296           AC_DEFINE(HAVE_GNOME_KEYRING_24,1,
297                     [Defined with gnome-keyring-2.24 or newer.])
298        fi
299        with_gnome_keyring=yes
300     else
301        with_gnome_keyring=no
302     fi
303     AC_MSG_RESULT($with_gnome_keyring)
304   fi
305   AC_DEFINE(HAVE_GNOME,1,[Defined when building for GNOME.])
306else
307   gnome_extras=""
308fi
309
310# GMime configuration
311#
312if test "$with_gmime" = detect; then
313   AC_MSG_CHECKING([Gmime version])
314   if $PKG_CONFIG --exists gmime-2.6; then
315      with_gmime=2.6
316   else
317      if $PKG_CONFIG --exists gmime-2.4; then
318         with_gmime=2.4
319      else
320         AC_MSG_ERROR([GMime 2.6 or 2.4 not detected.])
321      fi
322   fi
323   AC_MSG_RESULT([$with_gmime])
324fi
325
326case "$with_gmime" in
327    2.4) ;;
328    2.6) AC_DEFINE([HAVE_GMIME_2_6], [1],
329                   [Defined to build with GMime version 2.5 or 2.6])
330         if $PKG_CONFIG --atleast-version=2.5.7 gmime-2.6; then
331             AC_DEFINE([HAVE_GMIME_2_5_7], [1],
332                       [Defined when GMime version is at least 2.5.7])
333         fi
334         ;;
335    *) AC_MSG_ERROR([unknown GMime version $with_gmime]) ;;
336esac
337
338dnl #####################################################################
339dnl 4. Libraries.
340dnl #####################################################################
341
342dnl Make sure ld finds zlib:
343LIBS="$LIBS -lz"
344
345PKG_CHECK_MODULES(BALSA, [
346glib-2.0 >= 2.28.0
347gtk+-3.0
348gmime-$with_gmime
349gio-2.0 >= 2.27.0
350gthread-2.0
351$gnome_extras
352])
353
354PKG_CHECK_MODULES(BALSA_AB, [
355   glib-2.0 >= 2.27.0
356   gtk+-3.0
357   gmime-$with_gmime
358   $gnome_extras
359])
360
361AC_MSG_CHECKING(whether res_init is available)
362AC_LINK_IFELSE(AC_LANG_PROGRAM([#include <resolv.h>
363                               ],
364                               [res_init();]),
365               have_res_init=yes,
366               have_res_init=no)
367if test $have_res_init = no ; then
368    save_LIBS=$LIBS
369    LIBS="$LIBS -lresolv"
370    AC_LINK_IFELSE(AC_LANG_PROGRAM([#include <resolv.h>
371                                   ],
372                                   [res_init();]),
373                   have_res_init=yes)
374fi
375AC_MSG_RESULT([$have_res_init])
376if test $have_res_init = no ; then
377    LIBS=$save_LIBS
378else
379    AC_DEFINE(HAVE_RES_INIT,1,
380              [Defined when res_init is available.])
381fi
382
383dnl ##########################################################################
384dnl Check versions
385dnl ##########################################################################
386
387AC_SUBST(BALSA_CFLAGS)
388AC_SUBST(BALSA_LIBS)
389AC_SUBST(BALSA_AB_LIBS)
390AC_SUBST(BALSA_DEFS)
391
392# HTML widget
393#
394AC_MSG_CHECKING(whether to use an HTML widget)
395case "$use_html_widget" in
396    gtkhtml2)
397        AC_MSG_RESULT([$use_html_widget])
398        PKG_CHECK_MODULES(HTML, [ libgtkhtml-2.0 ])
399        AC_DEFINE(HAVE_GTKHTML2,1,[Defined when GtkHtml-2 can be used.])
400    ;;
401    gtkhtml4)
402        AC_MSG_RESULT([$use_html_widget])
403        PKG_CHECK_MODULES(HTML, [ libgtkhtml-4.0 ], [],
404          [PKG_CHECK_MODULES(HTML, [ libgtkhtml-4.0 ],[],
405             [AC_MSG_ERROR([*** You enabled gtkhtml4 but it was not found.])])])
406        AC_DEFINE(HAVE_GTKHTML4,1,[Defined when GtkHtml-4 can be used.])
407    ;;
408    webkit | webkit2)
409        AC_MSG_RESULT([$use_html_widget])
410        if test x"$use_threads" = xno ; then
411            if ! $PKG_CONFIG --atleast-version=2.24.0 glib-2.0; then
412                AC_MSG_ERROR([WebKit cannot be used with threads disabled and glib older than version 2.24.])
413            fi
414        fi
415        if test $use_html_widget = webkit2 ; then
416            PKG_CHECK_MODULES(HTML, [webkit2gtk-3.0 >= 1.11.92 ])
417            AC_DEFINE(USE_WEBKIT2,1,[Defined when WebKit2 is requested.])
418        else
419            if $PKG_CONFIG --atleast-version=1.5.1 webkitgtk-3.0 ; then
420                PKG_CHECK_MODULES(HTML, [webkitgtk-3.0 javascriptcoregtk-3.0])
421            else
422                PKG_CHECK_MODULES(HTML, [webkitgtk-3.0])
423            fi
424        fi
425        AC_DEFINE(HAVE_WEBKIT,1,[Defined when WebKit can be used.])
426    ;;
427    no)
428        AC_MSG_RESULT([none])
429    ;;
430    *) AC_MSG_ERROR([bad option $use_html_widget]) ;;
431esac
432
433if test x"$use_html_widget" != xno ; then
434    AC_DEFINE(HAVE_HTML_WIDGET,1,[Defined when any HTML widget can be used.])
435    BALSA_CFLAGS="$BALSA_CFLAGS $HTML_CFLAGS"
436    BALSA_LIBS="$BALSA_LIBS $HTML_LIBS"
437fi
438
439
440# GPGME detection.
441# We don't use the std macro AM_PATH_GPGME here to avoid dependencies.
442
443AC_MSG_CHECKING(whether to build with gpgme/GnuPG support)
444if test x"$gpgmecfg" = xyes ; then
445	AC_MSG_RESULT(yes)
446	AC_PATH_PROG(gpgmecfg, gpgme-config, no)
447	if test "$gpgmecfg" = no; then
448	AC_MSG_ERROR([GPGme build requested but gpgme-config program not found.])
449        fi
450fi
451if test x"$gpgmecfg" != xno ; then
452	AC_MSG_CHECKING([gpgme library version])
453	gpgmever=`$gpgmecfg --version`
454	AC_MSG_RESULT($gpgmever)
455        gpgme_ve=`echo $gpgmever|sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
456        gpgme_ma=`echo $gpgmever|sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
457        gpgme_mi=`echo $gpgmever|sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
458	if test $gpgme_ve -eq 0 ; then
459		if test $gpgme_ma -lt 9 ; then
460			gpgmecfg=no
461			have_smime=no
462		fi
463	fi
464	if test x"$gpgmecfg" != xno ; then
465		if test x"$use_threads" = xyes; then
466			BALSA_LIBS="$BALSA_LIBS `$gpgmecfg --thread=pthread --libs`"
467			if test x"$?" != x0 ; then
468				AC_MSG_ERROR([*** You enabled gpgme and pthread support, but your gpgme installation does not support threads.])
469			fi
470		else
471			BALSA_LIBS="$BALSA_LIBS `$gpgmecfg --libs`"
472		fi
473		AC_DEFINE(HAVE_GPGME,1,[Defined when gpgme is available.])
474		BALSA_CFLAGS="$BALSA_CFLAGS `$gpgmecfg --cflags`"
475		gpgmecfg=yes
476	else
477		AC_MSG_WARN([sorry, you need at least gpgme version 0.9.0])
478	fi
479else
480	have_smime=no
481fi
482AM_CONDITIONAL([BUILD_WITH_GPGME], [test $gpgmecfg = "yes"])
483
484# check the GnuPG engine application version
485# note: gpg2 interacts fine with gpgme only since version 2.0.4
486AC_DEFUN([AC_CHECK_GPG_VER],[
487	if ! test -x $1 ; then
488		AC_MSG_ERROR([$1 is not executable])
489	fi
490	AC_MSG_CHECKING([$1 version])
491	gpgver=`$1 --version | sed -e 's/.* //' -e q`
492	AC_MSG_RESULT($gpgver)
493        gpg_ve=`echo $gpgver|sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
494        gpg_ma=`echo $gpgver|sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
495        gpg_mi=`echo $gpgver|sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
496	HAVE_GPG2=no
497	if test \( $gpg_ve -eq 2 \) -a \( $gpg_ma -eq 0 \) -a \( $gpg_mi -lt 4 \) ; then
498    		ifelse([$3], , :, [$3])
499	else
500		if test $gpg_ve -eq 2 ; then
501			HAVE_GPG2=yes
502		fi
503    		ifelse([$2], , :, [$2])
504	fi])
505
506# find a suitable GnuPG engine if gpgme is enabled
507if test x"$gpgmecfg" != xno ; then
508	if test x"$gpgapp" != xno ; then
509		AC_CHECK_GPG_VER($gpgapp, ,
510				 AC_MSG_ERROR([gpg2 < 2.0.4 does not communicate properly with gpgme]))
511	else
512		AC_PATH_PROG(gpg2, gpg2, [no])
513		if test x"$gpg2" != xno ; then
514			AC_CHECK_GPG_VER($gpg2, [gpgapp=$gpg2],
515					 AC_MSG_WARN([gpg2 < 2.0.4 does not communicate properly with gpgme]))
516		fi
517		if test x"$gpgapp" = xno ; then
518			AC_PATH_PROG(gpg, gpg, [no])
519			if test x"$gpg" != xno ; then
520				AC_CHECK_GPG_VER($gpg, [gpgapp=$gpg],
521					 	AC_MSG_WARN([gpg2 < 2.0.4 does not communicate properly with gpgme]))
522			fi
523		fi
524		if test x"$gpgapp" = xno ; then
525			AC_PATH_PROG(gpg1, gpg1, [no])
526			if test x"$gpg1" != xno ; then
527				AC_CHECK_GPG_VER($gpg1, [gpgapp=$gpg1],
528					 	AC_MSG_WARN([gpg2 < 2.0.4 does not communicate properly with gpgme]))
529			fi
530		fi
531	fi
532	if test x"$gpgapp" != xno ; then
533		AC_DEFINE(HAVE_GPG,1,[Defined when gpg is available.])
534		AC_DEFINE_UNQUOTED(GPG_PATH,["$gpgapp"],[Path of gpg.])
535	else
536		AC_MSG_WARN([cannot find a suitable gpg application])
537		AC_MSG_WARN([please consider using --with-gpg-app to specify it])
538	fi
539else
540	AC_MSG_RESULT([no])
541fi
542
543# s/mime is mature for gpg >= 2.0.4
544AC_MSG_CHECKING(whether to include S/MIME support)
545if test \( x"$have_smime" = xyes \) -o \( \( x"$HAVE_GPG2" = xyes \) -a \( x"$have_smime" = xcheck \) \) ; then
546	AC_MSG_RESULT([yes])
547	have_smime=yes
548	AC_DEFINE(HAVE_SMIME,1,[Defined when supporting S/MIME])
549else
550	AC_MSG_RESULT([no])
551fi
552AM_CONDITIONAL([BUILD_WITH_SMIME], [test $have_smime = "yes"])
553
554
555# OpenLDAP configuration.
556#
557AC_MSG_CHECKING(whether to use LDAP)
558if test x"$with_ldap" != xno ; then
559	AC_MSG_RESULT([yes])
560	AC_CHECK_LIB(ldap, ldap_search, AC_DEFINE(ENABLE_LDAP, 1,
561                 [Defined when the LDAP support is to be compiled in.])
562              LIBS="-lldap -llber -lresolv $LIBS", AC_MSG_ERROR([*** You enabled LDAP but ldap library is not found.]), -llber -lresolv)
563        AC_CHECK_LIB(ldap, ldap_start_tls_s,
564                     AC_DEFINE(HAVE_LDAP_TLS,1,
565                               [Defined when LDAP lib supports TLS]))
566    if test "$with_ldap" != yes; then
567       LIBS="$LIBS -L$with_ldap/lib"
568       CPPFLAGS="$CPPFLAGS -I$with_ldap/include"
569    fi
570else
571	AC_MSG_RESULT([no])
572fi
573
574# SQLite configuration.
575#
576AC_MSG_CHECKING(whether to use SQLite)
577if test x$with_sqlite != xno ; then
578    AC_MSG_RESULT([yes])
579    if $PKG_CONFIG --exists sqlite3 ; then
580        PKG_CHECK_MODULES(SQLITE, [sqlite3])
581        AC_DEFINE(HAVE_SQLITE3,1,[If defined, use sqlite3 api.])
582    else
583        PKG_CHECK_MODULES(SQLITE, [sqlite >= 2.8])
584    fi
585    AC_DEFINE(HAVE_SQLITE,1,[If defined, enable GPE address book support.])
586    BALSA_CFLAGS="$BALSA_CFLAGS $SQLITE_CFLAGS"
587    BALSA_LIBS="$BALSA_LIBS $SQLITE_LIBS"
588    BALSA_AB_LIBS="$BALSA_AB_LIBS $SQLITE_LIBS"
589else
590    AC_MSG_RESULT([no])
591fi
592
593# Rubrica (libxml2) configuration
594#
595AC_MSG_CHECKING(whether to include Rubrica2 support)
596if test x$with_rubrica != xno ; then
597    AC_MSG_RESULT([yes])
598    PKG_CHECK_MODULES(LIBXML2, [libxml-2.0])
599    AC_DEFINE(HAVE_RUBRICA,1,[If defined, enable Rubrica2 address book support.])
600    BALSA_CFLAGS="$BALSA_CFLAGS $LIBXML2_CFLAGS"
601    BALSA_LIBS="$BALSA_LIBS $LIBXML2_LIBS"
602    BALSA_AB_LIBS="$BALSA_AB_LIBS $LIBXML2_LIBS"
603else
604    AC_MSG_RESULT([no])
605fi
606
607# LibESMTP configuration.
608#
609AC_MSG_CHECKING([whether to build ESMTP support])
610if test "x$with_esmtp" != xno  ; then
611    AC_MSG_RESULT([yes])
612    test "$with_esmtp" != yes && LIBS="$LIBS -L$with_esmtp/lib"
613    AC_CHECK_LIB(esmtp, smtp_start_session,BALSA_LIBS="$BALSA_LIBS -lesmtp",
614	AC_MSG_ERROR([*** You enabled ESMTP but esmtp library is not found.]),
615                 -lpthread)
616    AC_CHECK_LIB(esmtp, smtp_option_require_all_recipients,
617                 AC_DEFINE(ENABLE_ESMTP, 1,
618                           [Defined when ESTMP support is to be enabled.]),
619                 AC_MSG_ERROR([*** You enabled ESMTP but esmtp library
620                               does not support 'require_all_recipients'.
621                               Please get a Balsa-aware libESMTP from
622                               http://pawsa.fedorapeople.org/balsa/download.html
623                               or compile libESMTP with
624                               './configure --enable-require-all-recipients'.]),
625                 -lpthread)
626    AC_CHECK_LIB(esmtp, smtp_starttls_set_password_cb,
627	AC_DEFINE(HAVE_SMTP_TLS_CLIENT_CERTIFICATE,1,
628	         [Defined when libESMTP has TLS support.]),
629                 ,
630		 -lpthread)
631    test "$with_esmtp" != yes && CPPFLAGS="$CPPFLAGS -I$with_esmtp/include"
632else
633    AC_MSG_RESULT([no])
634fi
635
636# PCRE configuration.
637#
638
639AC_MSG_CHECKING(Regular expressions)
640if test x"$check_gregex" = xyes ; then
641    if $PKG_CONFIG --atleast-version=2.14.0 glib-2.0; then
642        AC_MSG_RESULT(GRegex)
643        AC_DEFINE(USE_GREGEX,1,[Defined when GRegex is to be used.])
644    else
645        AC_MSG_ERROR([*** You enabled GRegex but glib is too old. Please
646                      upgrade glib to version at least 2.14.0.])
647    fi
648else
649   if   test x"$check_pcre" = xyes ; then
650	if pcre-config --libs-posix > /dev/null 2>&1; then
651        	vers=`pcre-config --version`
652	        case $vers in
653                       2.*) have_pcre=no ;;
654                       *)   have_pcre=yes ;;
655        	esac
656	else
657        	have_pcre=no
658	fi
659
660	if test x"$have_pcre" = xyes ; then
661	       	AC_MSG_RESULT(PCRE)
662		BALSA_CFLAGS="$BALSA_CFLAGS `pcre-config --cflags-posix`"
663                PCRE_LIBS="`pcre-config --libs-posix`"
664                AC_SUBST(PCRE_LIBS)
665		BALSA_LIBS="$BALSA_LIBS $PCRE_LIBS"
666		AC_DEFINE(HAVE_PCRE,1,
667                          [Defined when PCRE library is available.])
668	else
669	        AC_MSG_RESULT(not found)
670	fi
671   else
672	have_pcre=no
673	AC_MSG_RESULT(POSIX)
674   fi
675fi
676
677# OpenSSL configuration.
678#
679
680AC_MSG_CHECKING([whether to build SSL support])
681if test "x$with_ssl" != xno  ; then
682# openssl >=0.9.7 is pkg-config compatible.
683   if pkg-config openssl >/dev/null 2>&1; then
684      BALSA_LIBS="$BALSA_LIBS `pkg-config --libs openssl`"
685      BALSA_CFLAGS="`pkg-config --cflags-only-I openssl` $BALSA_CFLAGS"
686      AC_MSG_RESULT(yes)
687      AC_DEFINE(USE_SSL,1,[Defined when SSL support is to be compiled.])
688      AC_DEFINE(USE_TLS,USE_SSL,[Defined when TLS is to be enabled.])
689   else
690      if test -d $with_ssl && test -f "$with_ssl/include/openssl/ssl.h" ; then
691         ssldir=$with_ssl
692      else
693           AC_TRY_COMPILE([#include <openssl/ssl.h>], ,
694		          ssldir=default,
695			  ssldir="")
696	   if test "x$ssldir" = x ; then
697              for prefixdir in /usr /usr/local /usr/lib /usr/pkg /var /opt; do
698                  for dir in $prefixdir $prefixdir/openssl $prefixdir/ssl; do
699                      if test -f "$dir/include/openssl/ssl.h"; then
700                         ssldir=$dir
701                      fi
702                  done
703              done
704	   fi
705       fi
706       if test -z "$ssldir"; then
707          AC_MSG_ERROR([SSL requested but no SSL headers found.])
708       else
709          AC_MSG_RESULT(yes)
710          BALSA_LIBS="$BALSA_LIBS -lssl -lcrypto"
711	  if test "x$ssldir" != xdefault ; then
712		BALSA_CFLAGS="-I${ssldir}/include $BALSA_CFLAGS"
713	  fi
714	  ac_cv_path_openssl=$ssldir
715	  AC_DEFINE(USE_SSL,1,[Defined when SSL support is to be compiled.])
716          AC_DEFINE(USE_TLS,USE_SSL,[Defined when TLS is to be enabled.])
717       fi
718   fi
719else
720   AC_MSG_RESULT(no)
721fi
722
723# KRB5/GSSAPI configuration.
724#
725if test "x$with_gss" != xno  ; then
726   AC_PATH_PROG(KRB5_CONFIG, krb5-config,no,[${PATH}:/usr/kerberos/bin:/usr/lib/mit/bin])
727   if test "x$KRB5_CONFIG" != xno ; then
728      AC_DEFINE(HAVE_GSSAPI,1,[Defined when GSSAPI support is to be compiled.])
729      BALSA_CFLAGS="$BALSA_CFLAGS `$KRB5_CONFIG --cflags gssapi`"
730      BALSA_LIBS="$BALSA_LIBS `$KRB5_CONFIG --libs gssapi`"
731      SAVE_CFLAGS="$CFLAGS"; CFLAGS="$BALSA_CFLAGS"
732      AC_CHECK_HEADER([gssapi.h],
733                      [AC_DEFINE([HAVE_HEIMDAL],1,[Defined for Heimdal.])],
734        [AC_CHECK_HEADER([gssapi/gssapi.h],,
735                         AC_MSG_ERROR([gssapi.h not found]))])
736      CFLAGS="$SAVE_CFLAGS"
737   else
738      AC_MSG_ERROR([GSS requested but krb5-config not found. Install krb5-devel/heimdal-devel])
739   fi
740fi
741
742# Libnotify configuration
743if test x$with_libnotify != xno; then
744    PKG_CHECK_MODULES(NOTIFY, [ libnotify >= 0.7.0 ], [notifyver=7],
745      [PKG_CHECK_MODULES(NOTIFY, [ libnotify >= 0.4.0 ], [notifyver=4],
746        [AC_MSG_ERROR([*** You enabled notify but the library is not found.])])])
747    AC_DEFINE_UNQUOTED(HAVE_NOTIFY,$notifyver,
748                       [Defined when libnotify can be used.])
749    BALSA_LIBS="$BALSA_LIBS $NOTIFY_LIBS"
750    BALSA_AB_LIBS="$BALSA_AB_LIBS $NOTIFY_LIBS"
751    with_libnotify=" >= 0.$notifyver"
752fi
753
754# NetworkManager
755if test "$with_nm" != no ; then
756  if $PKG_CONFIG --atleast-version=2.32.0 glib-2.0 ; then
757    with_nm="no; using GNetworkMonitor instead"
758  fi
759  PKG_CHECK_EXISTS([libnm-glib],
760  [ PKG_CHECK_MODULES(LIBNM_GLIB, [ libnm-glib >= 0.7.0]) ],
761  [ PKG_CHECK_MODULES(LIBNM_GLIB, [ libnm_glib >= 0.7.0]) ])
762
763  AC_DEFINE(HAVE_LIBNM_GLIB,1,[ Defined if NetworkManager-glib-devel is found.])
764  BALSA_CFLAGS="$BALSA_CFLAGS $LIBNM_GLIB_CFLAGS"
765  LIBS="$LIBS $LIBNM_GLIB_LIBS"
766else
767AC_MSG_CHECKING([NetworkManager-glib-devel])
768 AC_MSG_RESULT([no])
769fi
770
771# Compface configuration
772#
773AC_MSG_CHECKING([whether to build Compface support])
774if test "x$with_compface" != xno  ; then
775    AC_MSG_RESULT([yes])
776    test "$with_compface" != yes && BALSA_LIBS="$BALSA_LIBS -L$with_compface/lib"
777    AC_CHECK_LIB(compface, uncompface, BALSA_LIBS="$BALSA_LIBS -lcompface",
778	AC_MSG_ERROR([*** You enabled Compface but the library is not found.]),)
779    AC_DEFINE(HAVE_COMPFACE, 1,
780              [Defined when Compface support is requested.])
781    test "$with_compface" != yes && CPPFLAGS="$CPPFLAGS -I$with_compface/include"
782else
783    AC_MSG_RESULT([no])
784fi
785
786# GtkSourceView configuration
787#
788if test x$with_gtksourceview != xno; then
789    PKG_CHECK_MODULES(GTKSOURCEVIEW, [ gtksourceview-3.0 >= 3.2.0 ])
790    AC_DEFINE(HAVE_GTKSOURCEVIEW,3,[Defined when GtkSourceView-3 can be used.])
791    AC_MSG_NOTICE([Note: using GtkSourceview Version 3])
792    with_gtksourceview=3
793    BALSA_CFLAGS="$BALSA_CFLAGS $GTKSOURCEVIEW_CFLAGS"
794    BALSA_LIBS="$BALSA_LIBS $GTKSOURCEVIEW_LIBS"
795fi
796AM_CONDITIONAL([BUILD_WITH_GTKSOURCEVIEW], [test x$with_gtksourceview = x3 ])
797
798# libcanberra configuration
799#
800AC_MSG_CHECKING([whether to build with canberra])
801if test x$with_canberra != xno; then
802    AC_MSG_RESULT([yes])
803    PKG_CHECK_MODULES(CANBERRA, [ libcanberra-gtk3 ])
804    AC_DEFINE(HAVE_CANBERRA,1,[Defined when canberra can be used.])
805    BALSA_CFLAGS="$BALSA_CFLAGS $CANBERRA_CFLAGS"
806    BALSA_LIBS="$BALSA_LIBS $CANBERRA_LIBS"
807else
808    AC_MSG_RESULT([no])
809fi
810
811# ige-mac-integration (Mac OS X desktop only)
812AC_MSG_CHECKING([whether to include Mac OS X Desktop Integration])
813if test x$use_igemacint != xno; then
814    AC_MSG_CHECKING([for ige-mac-integration >= 0.8])
815    if $PKG_CONFIG --atleast-version=0.8 ige-mac-integration ; then
816	AC_MSG_RESULT([yes])
817	AC_DEFINE(HAVE_MACOSX_DESKTOP,1,[Defined when menus can be integrated into the Mac OS X desktop])
818	BALSA_CFLAGS="$BALSA_CFLAGS `$PKG_CONFIG --cflags ige-mac-integration`"
819	BALSA_LIBS="$BALSA_LIBS `$PKG_CONFIG --libs ige-mac-integration`"
820	BALSA_AB_LIBS="$BALSA_AB_LIBS `$PKG_CONFIG --libs ige-mac-integration`"
821    else
822	AC_MSG_ERROR([no])
823    fi
824else
825    AC_MSG_RESULT([no])
826fi
827
828# Touch UI configuration
829#
830AC_MSG_CHECKING([whether to configure for Touch UI])
831if test x$enable_touch_ui != xno; then
832    AC_DEFINE(ENABLE_TOUCH_UI,1,[Defined when touchscreen optimized UI is to be enabled.])
833    AC_MSG_RESULT([yes])
834else
835    AC_MSG_RESULT([no])
836fi
837
838# Libsecret configuration
839#
840AC_MSG_CHECKING([whether to configure for libsecret])
841if test x$with_libsecret != xno; then
842    AC_MSG_RESULT([yes])
843    PKG_CHECK_MODULES(LIBSECRET, [ libsecret-1 ], [],
844                      AC_MSG_ERROR([[You asked to link to libsecret, but
845                                    the development tool is not installed]]))
846    AC_DEFINE(HAVE_LIBSECRET,1,[Defined when libsecret can be used.])
847    BALSA_CFLAGS="$BALSA_CFLAGS $LIBSECRET_CFLAGS"
848    BALSA_LIBS="$BALSA_LIBS $LIBSECRET_LIBS"
849else
850    AC_MSG_RESULT([no])
851fi
852
853dnl #####################################################################
854dnl 5. Headers.
855dnl #####################################################################
856
857# Spell check detection.
858#
859if test x$with_gtkspell != xno; then
860    PKG_CHECK_MODULES(SPELL, [ gtkspell3-3.0 enchant ])
861    AC_DEFINE(HAVE_GTKSPELL,1,[Defined when GtkSpell can be used.])
862else
863    PKG_CHECK_MODULES(SPELL, [ enchant ])
864fi
865BALSA_CFLAGS="$BALSA_CFLAGS $SPELL_CFLAGS"
866BALSA_LIBS="$BALSA_LIBS $SPELL_LIBS"
867AM_CONDITIONAL([BUILD_WITH_GTKSPELL], [test $with_gtkspell = "yes"])
868
869dnl #####################################################################
870dnl 6. Typedefs, structures and compiler characteristics.
871dnl #####################################################################
872AC_C_CONST
873AC_STDC_HEADERS
874
875AC_DEFINE([_XOPEN_SOURCE],[500],[We strive for XOPEN compliance])
876AC_CHECK_DECLS([localtime_r, gmtime_r, ctime_r], [], [], [[#include <time.h>]])
877AC_CHECK_FUNCS([localtime_r gmtime_r ctime_r])
878AC_CHECK_HEADER([zlib.h],,AC_MSG_ERROR([zlib library required]))
879
880# more warnings.
881#
882
883if test "$GCC" = "yes" -a "$set_more_warnings" != "no"; then
884	for option in -Wsign-compare -Wpointer-arith -Wnested-externs \
885            -Wchar-subscripts -Wuninitialized -Wmissing-prototypes    \
886            -Wreturn-type -Wdeclaration-after-statement ; do
887                SAVE_CFLAGS="$CFLAGS"
888                CFLAGS="$CFLAGS $option"
889                AC_MSG_CHECKING([whether gcc understands $option])
890                AC_TRY_COMPILE([], [],
891                        has_option=yes,
892                        has_option=no,)
893                if test $has_option = no; then
894                  CFLAGS="$SAVE_CFLAGS"
895                fi
896                AC_MSG_RESULT($has_option)
897                unset has_option
898                unset SAVE_CFLAGS
899        done
900        unset option
901fi
902
903# extra warnings for GIT.
904#
905
906if test -d "${srcdir}/.git" ; then
907	BALSA_FROM_GIT=yes
908	BALSA_CFLAGS="$BALSA_CFLAGS -Wall -Werror"
909        BALSA_DEFS="$BALSA_DEFS \
910-DG_DISABLE_DEPRECATED \
911-DG_DISABLE_SINGLE_INCLUDES \
912-DGDK_DISABLE_DEPRECATED \
913-DGDK_PIXBUF_DISABLE_DEPRECATED \
914-DGDK_MULTIDEVICE_SAFE \
915-DGDK_MULTIHEAD_SAFE \
916-DGMIME_DISABLE_DEPRECATED \
917-DGNOME_DISABLE_DEPRECATED \
918-DGNOME_DISABLE_DEPRECATED_SOURCE \
919-DGNOME_VFS_DISABLE_DEPRECATED \
920-DGTK_DISABLE_DEPRECATED \
921-DGTK_DISABLE_SINGLE_INCLUDES \
922-DNM_DISABLE_DEPRECATED \
923-DPANGO_DISABLE_DEPRECATED \
924-D_FORTIFY_SOURCE=2 \
925"
926
927    if test x"$use_html_widget" != xgtkhtml2 ; then
928        BALSA_DEFS="$BALSA_DEFS \
929        -DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES"
930    fi
931else
932	BALSA_FROM_GIT=no
933fi
934
935AC_MSG_CHECKING([for GIT information])
936AC_MSG_RESULT($BALSA_FROM_GIT)
937
938dnl #####################################################################
939dnl 7. extra functions.
940dnl #####################################################################
941AC_CHECK_FUNCS(getaddrinfo getnameinfo gai_strerror)
942
943# isblank()
944AC_MSG_CHECKING([for isblank])
945AC_TRY_LINK( [#include <ctype.h>], [return isblank('a');],
946	     AC_MSG_RESULT(yes),
947	     [AC_MSG_RESULT(no)
948	      AC_DEFINE(isblank,isspace,
949                        [Redefined to isspace if isblank is not available.])] )
950
951
952dnl ###########################################################################
953dnl Remember our prefixes
954dnl   The way prefix et al are defined makes us jump through some hoops.
955dnl ###########################################################################
956
957if test "x$prefix" = "xNONE"; then
958	prefix=$ac_default_prefix
959fi
960dnl datadir='${prefix}/share', so we must eval it or something. This works
961BALSA_STD_PREFIX=`eval "echo ${prefix}"`
962BALSA_DATA_PREFIX=`eval "echo ${datadir}/balsa"`
963dnl autoconf-2.60 leaves a literal "${prefix}" in BALSA_DATA_PREFIX, so
964dnl we clean it once more.
965BALSA_DATA_PREFIX=`eval "echo ${BALSA_DATA_PREFIX}"`
966AC_SUBST(BALSA_DATA_PREFIX)
967
968dnl Consolidate them!
969AC_PROG_AWK
970BALSA_COMMON_PREFIXES=`sort<<EOF|uniq|${AWK} '{if(l!~/^$/)print l ",";l=$0}END{print l}'
971"${BALSA_STD_PREFIX}"
972"${BALSA_DATA_PREFIX}"
973EOF
974`
975
976dnl Better way to do this?
977AC_DEFINE_UNQUOTED( BALSA_STD_PREFIX, "$BALSA_STD_PREFIX",
978                   [Directory for all balsa files.] )
979AC_DEFINE_UNQUOTED( BALSA_DATA_PREFIX, "$BALSA_DATA_PREFIX",
980	           [Directory for storing balsa data files.] )
981AC_DEFINE_UNQUOTED( BALSA_COMMON_PREFIXES, `echo $BALSA_COMMON_PREFIXES`,
982	           [Common directories for storing balsa icons.] )
983dnl bleah
984
985
986dnl ###########################################################################
987dnl determine the base folder for installing the extra icons
988dnl ###########################################################################
989
990AC_ARG_ENABLE(extra-mimeicons,
991        AC_HELP_STRING([--enable-extra-mimeicons],
992                       [Install extra MIME icons (needs write access to the gtk+ icon folder, default=yes)]),[
993	install_mimeicons=$enableval
994],[
995	install_mimeicons=yes
996])
997AM_CONDITIONAL([INSTALL_MIME_ICONS], [test $install_mimeicons = "yes"])
998HICOLOR_ICON_DIR=`$PKG_CONFIG --variable=prefix gtk+-3.0`/share/icons/hicolor
999AC_SUBST(HICOLOR_ICON_DIR)
1000dnl however, we do not mess with the icon caches - it messes up more
1001dnl things that it fixes, for eg. user installs, package builds etc.
1002dnl AC_PATH_PROG(GTK_UPDATE_ICON_CACHE, gtk-update-icon-cache)
1003
1004dnl #####################################################################
1005dnl 8. Output
1006dnl #####################################################################
1007
1008AC_OUTPUT([
1009Makefile
1010balsa.1
1011balsa.spec
1012balsa.desktop.in
1013balsa-mailto-handler.desktop.in
1014po/Makefile.in
1015sounds/Makefile
1016images/Makefile
1017images/mimetypes/Makefile
1018images/16x16/Makefile
1019images/24x24/Makefile
1020doc/Makefile
1021libbalsa/Makefile
1022libbalsa/imap/Makefile
1023libinit_balsa/Makefile
1024src/Makefile
1025])
1026
1027dnl ##########################################################################
1028dnl Summary
1029dnl ##########################################################################
1030
1031echo ""
1032echo "================ Final configuration ==================="
1033echo "    Installing into prefix: $prefix"
1034echo "      Using multithreading: $use_threads"
1035echo "   Enable compile warnings: $set_more_warnings"
1036echo "                Use ESMTP : $with_esmtp"
1037echo "               HTML widget: $use_html_widget"
1038echo "                 Use GNOME: $with_gnome"
1039echo "              Use Canberra: $with_canberra"
1040echo "                 Use GPGME: $gpgmecfg"
1041echo "                  Use LDAP: $with_ldap"
1042echo "                   Use GSS: $with_gss"
1043echo "                Use SQLite: $with_sqlite"
1044echo "                   Use SSL: $with_ssl"
1045echo "        Use NetworkManager: $with_nm"
1046echo "              Use GtkSpell: $with_gtkspell"
1047echo "             Use Libnotify: $with_libnotify"
1048echo "         Use GtkSourceView: $with_gtksourceview"
1049echo "              Use Compface: $with_compface"
1050echo "  Install extra MIME icons: $install_mimeicons"
1051echo "    Configure for Touch UI: $enable_touch_ui"
1052echo "             GMime version: $with_gmime"
1053echo "             Use libsecret: $with_libsecret"
1054dnl echo "                  Use SASL: $need_sasl"
1055echo ""
1056
1057if test x"$BALSA_FROM_GIT" = xyes ; then
1058	echo "============================== NOTICE ================================"
1059	echo "                You are using Balsa from GIT source."
1060	echo "  The program is likely to be unstable, contain incomplete features,"
1061	echo "or just plain not work. Use it at your own risk. You have been warned."
1062	echo "======================================================================"
1063	echo ""
1064fi
1065