]> git.llucax.com Git - software/mutt-debian.git/blob - configure.ac
doc update: clarify what attach_charset does (Closes: 502628)
[software/mutt-debian.git] / configure.ac
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl !!! WHEN ADDING NEW CONFIGURE TESTS, PLEASE ADD CODE TO MAIN.C !!!
4 dnl !!! TO DUMP THEIR RESULTS WHEN MUTT -V IS CALLED            !!!
5
6 AC_PREREQ([2.54])
7 AC_INIT([mutt.h])
8 AM_CONFIG_HEADER([config.h])
9
10 mutt_cv_version=`cat $srcdir/VERSION`
11 AM_INIT_AUTOMAKE(mutt, $mutt_cv_version)
12 AC_SUBST([CONFIG_STATUS_DEPENDENCIES], ['$(top_srcdir)/VERSION'])
13
14 AC_GNU_SOURCE
15
16 ALL_LINGUAS="de eu ru it es uk fr pl nl cs id sk ko el zh_TW zh_CN pt_BR eo gl sv da lt tr ja hu et ca bg ga"
17
18 AC_CANONICAL_HOST
19
20 AC_MSG_CHECKING([for prefix])
21 if test x$prefix = xNONE; then
22   mutt_cv_prefix=$ac_default_prefix
23 else
24   mutt_cv_prefix=$prefix
25 fi
26 AC_MSG_RESULT($mutt_cv_prefix)
27
28 AC_PROG_CC
29 AC_ISC_POSIX
30 AM_C_PROTOTYPES
31 if test "x$U" != "x"; then
32   AC_MSG_ERROR(Compiler not ANSI compliant)
33 fi
34 AC_PROG_CPP
35 AC_PROG_MAKE_SET
36 AC_PROG_INSTALL
37 AC_PROG_RANLIB
38 AC_CHECK_TOOL(AR, ar, ar)
39
40 AC_C_INLINE
41 AC_C_CONST
42 AC_C_BIGENDIAN
43
44 AC_SYS_LARGEFILE
45 AC_FUNC_FSEEKO
46 AC_CHECK_SIZEOF(off_t)
47
48 AC_PATH_PROG(DBX, dbx, no)
49 AC_PATH_PROG(GDB, gdb, no)
50 AC_PATH_PROG(SDB, sdb, no)
51
52 if test $GDB != no ; then
53         DEBUGGER=$GDB
54 elif test $DBX != no ; then
55         DEBUGGER=$DBX
56 elif test $SDB != no ; then
57         DEBUGGER=$SDB
58 else
59         DEBUGGER=no
60 fi
61
62 AC_SUBST([DEBUGGER])
63
64 AH_TEMPLATE([sig_atomic_t],
65             [/* Define to `int' if <signal.h> doesn't define.])
66 AH_TEMPLATE([HAVE_START_COLOR],
67             [Define if you have start_color, as a function or macro.])
68 AH_TEMPLATE([HAVE_TYPEAHEAD],
69             [Define if you have typeahead, as a function or macro.])
70 AH_TEMPLATE([HAVE_BKGDSET],
71             [Define if you have bkgdset, as a function or macro.])
72 AH_TEMPLATE([HAVE_CURS_SET],
73             [Define if you have curs_set, as a function or macro.])
74 AH_TEMPLATE([HAVE_META],
75             [Define if you have meta, as a function or macro.])
76 AH_TEMPLATE([HAVE_USE_DEFAULT_COLORS],
77             [Define if you have use_default_colors, as a function or macro.])
78 AH_TEMPLATE([HAVE_RESIZETERM],
79             [Define if you have resizeterm, as a function or macro.])
80 AH_TEMPLATE([SIG_ATOMIC_VOLATILE_T],
81             [Some systems declare sig_atomic_t as volatile, some others -- no.
82              This define will have value `sig_atomic_t' or
83              `volatile sig_atomic_t' accordingly.])
84 AH_TEMPLATE([ICONV_NONTRANS],
85             [Define as 1 if iconv() only converts exactly and we should treat
86              all return values other than (size_t)(-1) as equivalent.])
87
88 AH_BOTTOM([/* fseeko portability defines */
89 #ifdef HAVE_FSEEKO
90 # define LOFF_T off_t
91 # if HAVE_C99_INTTYPES && HAVE_INTTYPES_H
92 #  if SIZEOF_OFF_T == 8
93 #   define OFF_T_FMT "%" PRId64
94 #  else
95 #   define OFF_T_FMT "%" PRId32
96 #  endif
97 # else
98 #  if (SIZEOF_OFF_T == 8) && (SIZEOF_LONG == 4)
99 #   define OFF_T_FMT "%lld"
100 #  else
101 #   define OFF_T_FMT "%ld"
102 #  endif
103 # endif
104 #else
105 # define LOFF_T long
106 # define fseeko fseek
107 # define ftello ftell
108 # define OFF_T_FMT "%ld"
109 #endif
110 ])
111 MUTT_C99_INTTYPES
112
113 ac_aux_path_sendmail=/usr/sbin:/usr/lib
114 AC_PATH_PROG(SENDMAIL, sendmail, /usr/sbin/sendmail, $PATH:$ac_aux_path_sendmail)
115 AC_DEFINE_UNQUOTED(SENDMAIL,"$ac_cv_path_SENDMAIL", [Where to find sendmail on your system.])
116
117 OPS='$(srcdir)/OPS'
118
119 AC_MSG_CHECKING([whether to build with GPGME support])
120 AC_ARG_ENABLE(gpgme, AC_HELP_STRING([--enable-gpgme], [Enable GPGME support]),
121 [       if test x$enableval = xyes; then
122                 enable_gpgme=yes
123         fi
124 ])
125
126 if test x"$enable_gpgme" = xyes; then
127    AC_MSG_RESULT(yes)
128    AM_PATH_GPGME(1.0.0, AC_DEFINE(CRYPT_BACKEND_GPGME, 1,
129                  [Defined, if GPGME support is enabled]),
130                  [gpgme_found=no])
131    if test x"$gpgme_found" = xno; then
132       AC_MSG_ERROR([*** GPGME not found ***])
133    else
134       AM_PATH_GPGME(1.1.1, AC_DEFINE(HAVE_GPGME_PKA_TRUST, 1,
135                                   [Define if GPGME supports PKA]))
136       #needed to get GPGME_LIBS and al correctly
137       AM_PATH_GPGME(1.0.0, AC_DEFINE(CRYPT_BACKEND_GPGME, 1,
138                     [Define if you use GPGME to support OpenPGP]))
139       MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS crypt-gpgme.o crypt-mod-pgp-gpgme.o crypt-mod-smime-gpgme.o"
140    fi
141 else
142    AC_MSG_RESULT([no])
143 fi
144
145 AC_ARG_ENABLE(pgp, AC_HELP_STRING([--disable-pgp], [Disable PGP support]),
146 [       if test x$enableval = xno ; then
147                 have_pgp=no
148         fi
149 ])
150
151 if test x$have_pgp != xno ; then
152         AC_DEFINE(CRYPT_BACKEND_CLASSIC_PGP,1, [Define if you want classic PGP support.])
153         PGPAUX_TARGET="pgpring\$(EXEEXT) pgpewrap\$(EXEEXT)"
154         MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pgp.o pgpinvoke.o pgpkey.o pgplib.o gnupgparse.o pgpmicalg.o pgppacket.o crypt-mod-pgp-classic.o"
155 fi
156
157 AC_ARG_ENABLE(smime, AC_HELP_STRING([--disable-smime], [Disable SMIME support]),
158 [       if test x$enableval = xno ; then
159                 have_smime=no
160         fi
161 ])
162  
163 if test x$have_smime != xno ; then
164         AC_DEFINE(CRYPT_BACKEND_CLASSIC_SMIME, 1, [Define if you want clasic S/MIME support.])
165         MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS smime.o crypt-mod-smime-classic.o"
166         SMIMEAUX_TARGET="smime_keys"
167 fi
168
169 AC_ARG_WITH(mixmaster, AC_HELP_STRING([--with-mixmaster@<:@=PATH@:>@], [Include Mixmaster support]),
170   [if test "$withval" != no
171    then
172      if test -x "$withval"
173      then
174        MIXMASTER="$withval"
175      else
176        MIXMASTER="mixmaster"
177      fi
178      OPS="$OPS \$(srcdir)/OPS.MIX"
179      MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS remailer.o"
180      AC_DEFINE_UNQUOTED(MIXMASTER,"$MIXMASTER", [Where to find mixmaster on your system.])
181    fi])
182
183 # We now require all OPS
184 OPS="$OPS \$(srcdir)/OPS.PGP \$(srcdir)/OPS.SMIME \$(srcdir)/OPS.CRYPT "
185 AC_SUBST([OPS])
186
187 AC_SUBST(PGPAUX_TARGET)
188 AC_SUBST(SMIMEAUX_TARGET)
189
190 AC_PATH_PROG(ISPELL, ispell, no)
191 if test $ISPELL != no; then
192         AC_DEFINE_UNQUOTED(ISPELL,"$ISPELL",[ Where to find ispell on your system. ])
193 fi
194
195 AC_ARG_WITH(slang, AC_HELP_STRING([--with-slang@<:@=DIR@:>@], [Use S-Lang instead of ncurses]),
196         [AC_CACHE_CHECK([if this is a BSD system], mutt_cv_bsdish,
197                 [AC_TRY_RUN([#include <sys/param.h>
198 #include <stdlib.h>
199
200 main ()
201 {
202 #ifdef BSD
203         exit (0);
204 #else
205         exit (1);
206 #endif
207 }],
208                         mutt_cv_bsdish=yes,
209                         mutt_cv_bsdish=no,
210                         mutt_cv_bsdish=no)])
211
212         AC_MSG_CHECKING(for S-Lang)
213         if test $withval = yes; then
214                 if test -d $srcdir/../slang; then
215                         mutt_cv_slang=$srcdir/../slang/src
216                         CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}"
217                         LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs"
218                 else
219                         if test -d $mutt_cv_prefix/include/slang; then
220                                 CPPFLAGS="$CPPFLAGS -I$mutt_cv_prefix/include/slang"
221                         elif test -d /usr/include/slang; then
222                                 CPPFLAGS="$CPPFLAGS -I/usr/include/slang"
223                         fi
224                         mutt_cv_slang=yes
225                 fi
226         else
227                 dnl ---Check to see if $withval is a source directory
228                 if test -f $withval/src/slang.h; then
229                         mutt_cv_slang=$withval/src
230                         CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}"
231                         LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs"
232                 else
233                         dnl ---Must be installed somewhere
234                         mutt_cv_slang=$withval
235                         if test -d $withval/include/slang; then
236                                 CPPFLAGS="$CPPFLAGS -I${withval}/include/slang"
237                         elif test -d $withval/include; then
238                                 CPPFLAGS="$CPPFLAGS -I${withval}/include"
239                         fi
240                         LDFLAGS="$LDFLAGS -L${withval}/lib"
241                 fi
242         fi
243         AC_MSG_RESULT($mutt_cv_slang)
244         if test $mutt_cv_bsdish = yes; then
245                 AC_CHECK_LIB(termlib, main)
246         fi
247         AC_DEFINE(USE_SLANG_CURSES,1,
248                 [ Define if you compile with SLang instead of curses/ncurses. ])
249         AC_DEFINE(HAVE_COLOR,1,[ Define if your curses library supports color. ])
250         MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o"
251
252         dnl --- now that we've found it, check the link
253
254         AC_CHECK_LIB(slang, SLtt_get_terminfo,
255                 [MUTTLIBS="$MUTTLIBS -lslang -lm"],
256                 [AC_MSG_ERROR(unable to compile.  check config.log)], -lm)
257
258         ],
259
260         [mutt_cv_curses=/usr
261         AC_ARG_WITH(curses, AC_HELP_STRING([--with-curses=DIR], [Where ncurses is installed]),
262                 [if test $withval != yes; then
263                         mutt_cv_curses=$withval
264                 fi
265                 if test x$mutt_cv_curses != x/usr; then
266                         LDFLAGS="$LDFLAGS -L${mutt_cv_curses}/lib"
267                         CPPFLAGS="$CPPFLAGS -I${mutt_cv_curses}/include"
268                 fi])
269
270         AC_CHECK_FUNC(initscr,,[
271         cf_ncurses="ncurses"
272         for lib in ncurses ncursesw
273         do
274                 AC_CHECK_LIB($lib, waddnwstr, [cf_ncurses="$lib"; break])
275         done
276         AC_CHECK_LIB($cf_ncurses, initscr,
277                 [MUTTLIBS="$MUTTLIBS -l$cf_ncurses"
278                 
279                 if test "$cf_ncurses" = ncursesw; then
280                         AC_CHECK_HEADERS(ncursesw/ncurses.h,[cf_cv_ncurses_header="ncursesw/ncurses.h"])
281                 else
282                   AC_CHECK_HEADERS(ncurses/ncurses.h,[cf_cv_ncurses_header="ncurses/ncurses.h"],
283                     [AC_CHECK_HEADERS(ncurses.h,[cf_cv_ncurses_header="ncurses.h"])])
284                 fi],
285
286                 [CF_CURSES_LIBS])
287                 ])
288
289         old_LIBS="$LIBS"
290         LIBS="$LIBS $MUTTLIBS"
291         CF_CHECK_FUNCDECLS([#include <${cf_cv_ncurses_header-curses.h}>],
292                            [start_color typeahead bkgdset curs_set meta use_default_colors resizeterm])
293         if test "$ac_cv_func_decl_start_color" = yes; then
294                 AC_DEFINE(HAVE_COLOR,1,[ Define if your curses library supports color. ])
295         fi
296         if test "$ac_cv_func_decl_resizeterm" = yes; then
297                 MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o"
298         fi
299         LIBS="$old_LIBS"
300         ])
301
302 AC_HEADER_STDC
303
304 AC_CHECK_HEADERS(stdarg.h sys/ioctl.h ioctl.h sysexits.h)
305 AC_CHECK_HEADERS(sys/time.h sys/resource.h)
306 AC_CHECK_HEADERS(unix.h)
307
308 AC_CHECK_FUNCS(setrlimit getsid)
309
310 AC_TYPE_SIGNAL
311
312 AC_MSG_CHECKING(for sig_atomic_t in signal.h)
313 AC_EGREP_HEADER(sig_atomic_t,signal.h,
314   [
315     ac_cv_type_sig_atomic_t=yes;
316     AC_EGREP_HEADER(volatile.*sig_atomic_t,
317                     signal.h,
318                     [
319                         is_sig_atomic_t_volatile=yes;
320                         AC_MSG_RESULT([yes, volatile])
321                     ],
322                     [
323                         is_sig_atomic_t_volatile=no;
324                         AC_MSG_RESULT([yes, non volatile])
325                     ])
326   ],
327   [
328     AC_MSG_RESULT(no)
329     AC_CHECK_TYPE(sig_atomic_t, int)
330     is_sig_atomic_t_volatile=no
331   ])
332 if test $is_sig_atomic_t_volatile = 'yes'
333 then
334     AC_DEFINE(SIG_ATOMIC_VOLATILE_T, sig_atomic_t)
335 else
336     AC_DEFINE(SIG_ATOMIC_VOLATILE_T, [volatile sig_atomic_t])
337 fi
338
339 AC_DECL_SYS_SIGLIST
340
341 AC_TYPE_PID_T
342 AC_CHECK_TYPE(ssize_t, int)
343
344 AC_CHECK_FUNCS(fgetpos memmove setegid srand48 strerror)
345
346 AC_REPLACE_FUNCS([setenv strcasecmp strdup strsep strtok_r])
347
348 AC_CHECK_FUNC(getopt)
349 if test $ac_cv_func_getopt = yes; then
350         AC_CHECK_HEADERS(getopt.h)
351 fi
352
353 SNPRINTFOBJS=""
354 AC_CHECK_FUNC(snprintf, [mutt_cv_func_snprintf=yes], [mutt_cv_func_snprintf=no])
355 AC_CHECK_FUNC(vsnprintf, [mutt_cv_func_vsnprintf=yes], [mutt_cv_func_vsnprintf=no])
356 if test $mutt_cv_func_snprintf = yes; then
357 AC_CACHE_CHECK([whether your system's snprintf is C99 compliant],
358         [mutt_cv_c99_snprintf],
359         AC_TRY_RUN([
360 #include <stdio.h>
361 int main()
362 {
363 changequote(, )dnl
364   char buf[8];
365   int len = snprintf(buf, 4, "1234567");
366   return (len != 7 || buf[3] != '\0');
367 changequote([, ])dnl
368 }
369         ], mutt_cv_c99_snprintf=yes, mutt_cv_c99_snprintf=no, mutt_cv_c99_snprintf=no))
370 else
371         mutt_cv_c99_snprintf=no
372 fi
373 if test $mutt_cv_func_vsnprintf = yes; then
374 AC_CACHE_CHECK([whether your system's vsnprintf is C99 compliant],
375         [mutt_cv_c99_vsnprintf],
376         AC_TRY_RUN([
377 #include <stdarg.h>
378 #include <stdio.h>
379 int foo(const char *fmt, ...)
380 {
381 changequote(, )dnl
382   char buf[8];
383   int len;
384   va_list ap;
385   va_start(ap, fmt);
386   len = vsnprintf(buf, 4, fmt, ap);
387   va_end(ap);
388   return (len != 7 || buf[3] != '\0');
389 changequote([, ])dnl
390 }
391
392 int main()
393 {
394   return foo("%s", "1234567");
395 }
396         ], mutt_cv_c99_vsnprintf=yes, mutt_cv_c99_vsnprintf=no, mutt_cv_c99_vsnprintf=no))
397 else
398         mutt_cv_c99_vsnprintf=no
399 fi
400 if test $mutt_cv_c99_snprintf = yes; then
401         AC_DEFINE(HAVE_SNPRINTF, 1, [ Define to 1 if you have a C99 compliant snprintf function. ])
402 fi
403 if test $mutt_cv_c99_vsnprintf = yes; then
404         AC_DEFINE(HAVE_VSNPRINTF, 1, [ Define to 1 if you have a C99 compliant vsnprintf function. ])
405 fi
406 if test $mutt_cv_c99_snprintf = no -o $mutt_cv_c99_vsnprintf = no; then
407         AC_LIBOBJ(snprintf)
408 fi
409
410 XIPH_FUNC_VA_COPY
411
412 dnl SCO uses chsize() instead of ftruncate()
413 AC_CHECK_FUNCS(ftruncate, , [AC_CHECK_LIB(x, chsize)])
414
415 dnl SCO has strftime() in libintl
416 AC_CHECK_FUNCS(strftime, , [AC_CHECK_LIB(intl, strftime)])
417
418 dnl AIX may not have fchdir()
419 AC_CHECK_FUNCS(fchdir, , [mutt_cv_fchdir=no])
420
421 AC_ARG_WITH(regex, AC_HELP_STRING([--with-regex], [Use the GNU regex library]),
422         [mutt_cv_regex=yes],
423         [AC_CHECK_FUNCS(regcomp, mutt_cv_regex=no, mutt_cv_regex=yes)])
424
425 if test $mutt_cv_regex = no ; then
426 AC_CACHE_CHECK([whether your system's regexp library is completely broken],
427         [mutt_cv_regex_broken],
428         AC_TRY_RUN([
429 #include <unistd.h>
430 #include <regex.h>
431 main() { regex_t blah ; regmatch_t p; p.rm_eo = p.rm_eo; return regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec (&blah, "foobar", 0, NULL, 0); }],
432         mutt_cv_regex_broken=no, mutt_cv_regex_broken=yes, mutt_cv_regex_broken=yes))
433         if test $mutt_cv_regex_broken = yes ; then
434                 echo "Using the included GNU regex instead." >&AC_FD_MSG
435                 mutt_cv_regex=yes
436         fi
437 fi
438
439 if test $mutt_cv_regex = yes; then
440         AC_DEFINE(USE_GNU_REGEX,1,[ Define if you want to use the included regex.c. ])
441         AC_LIBOBJ(regex)
442 fi
443
444
445 AC_ARG_WITH(homespool,
446   AC_HELP_STRING([--with-homespool@<:@=FILE@:>@], [File in user's directory where new mail is spooled]), with_homespool=${withval})
447 if test x$with_homespool != x; then
448         if test $with_homespool = yes; then
449                 with_homespool=mailbox
450         fi
451         AC_DEFINE_UNQUOTED(MAILPATH,"$with_homespool",[ Where new mail is spooled. ])
452         AC_DEFINE(HOMESPOOL,1,
453           [Is mail spooled to the user's home directory?  If defined,
454            MAILPATH should be set to the filename of the spool mailbox
455            relative the the home directory.
456            use: configure --with-homespool=FILE])
457         AC_DEFINE(USE_DOTLOCK,1,[ Define to use dotlocking for mailboxes. ])
458         mutt_cv_setgid=no
459 else
460         AC_ARG_WITH(mailpath, AC_HELP_STRING([--with-mailpath=DIR], [Directory where spool mailboxes are located]),
461                 [mutt_cv_mailpath=$withval],
462                 [ AC_CACHE_CHECK(where new mail is stored, mutt_cv_mailpath,
463                         [mutt_cv_mailpath=no
464                         if test -d /var/mail; then
465                                 mutt_cv_mailpath=/var/mail
466                         elif test -d /var/spool/mail; then
467                                 mutt_cv_mailpath=/var/spool/mail
468                         elif test -d /usr/spool/mail; then
469                                 mutt_cv_mailpath=/usr/spool/mail
470                         elif test -d /usr/mail; then
471                                 mutt_cv_mailpath=/usr/mail
472                         fi])
473                 ])
474         if test "$mutt_cv_mailpath" = no; then
475                 AC_MSG_ERROR("Could not determine where new mail is stored.")
476         fi
477         AC_DEFINE_UNQUOTED(MAILPATH,"$mutt_cv_mailpath",[ Where new mail is spooled. ])
478
479         AC_CACHE_CHECK(if $mutt_cv_mailpath is world writable, mutt_cv_worldwrite, [AC_TRY_RUN([#include <sys/types.h>
480 #include <sys/stat.h>
481 #include <stdlib.h>
482
483 int main (int argc, char **argv)
484 {
485         struct stat s;
486
487         stat ("$mutt_cv_mailpath", &s);
488         if (s.st_mode & S_IWOTH) exit (0);
489         exit (1);
490 }], mutt_cv_worldwrite=yes, mutt_cv_worldwrite=no, mutt_cv_worldwrite=no)])
491
492         mutt_cv_setgid=no
493         if test $mutt_cv_worldwrite = yes; then
494                 AC_DEFINE(USE_DOTLOCK,1,[ Define to use dotlocking for mailboxes. ])
495         else
496
497                 AC_CACHE_CHECK(if $mutt_cv_mailpath is group writable, mutt_cv_groupwrite, [AC_TRY_RUN([#include <sys/types.h>
498 #include <sys/stat.h>
499 #include <stdlib.h>
500
501 int main (int argc, char **argv)
502 {
503         struct stat s;
504
505         stat ("$mutt_cv_mailpath", &s);
506         if (s.st_mode & S_IWGRP) exit (0);
507         exit (1);
508 }], mutt_cv_groupwrite=yes, mutt_cv_groupwrite=no, mutt_cv_groupwrite=no)])
509
510                 if test $mutt_cv_groupwrite = yes; then
511                         AC_DEFINE(USE_DOTLOCK,1,[ Define to use dotlocking for mailboxes. ])
512                         AC_DEFINE(USE_SETGID,1,[ Define if mutt should run setgid "mail". ])
513                         mutt_cv_setgid=yes
514                 fi
515         fi
516 fi
517
518 AC_ARG_ENABLE(external_dotlock, AC_HELP_STRING([--enable-external-dotlock], [Force use of an external dotlock program]),
519         [mutt_cv_external_dotlock="$enableval"])
520
521 if test "x$mutt_cv_setgid" = "xyes" || test "x$mutt_cv_fchdir" = "xno" \
522         || test "x$mutt_cv_external_dotlock" = "xyes"
523 then
524         AC_DEFINE(DL_STANDALONE,1,[ Define if you want to use an external dotlocking program. ])
525         DOTLOCK_TARGET="mutt_dotlock\$(EXEEXT)"
526 else
527         MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS dotlock.o"
528 fi
529
530 AC_SUBST(DOTLOCK_TARGET)
531
532 dnl autoconf <2.60 compatibility
533 if test -z "$datarootdir"; then
534   datarootdir='${prefix}/share'
535 fi
536 AC_SUBST([datarootdir])
537
538 AC_MSG_CHECKING(where to put the documentation)
539 AC_ARG_WITH(docdir, AC_HELP_STRING([--with-docdir=PATH], [Specify where to put the documentation]),
540         [mutt_cv_docdir=$withval],
541         [mutt_cv_docdir='${datarootdir}/doc/mutt'])
542 AC_MSG_RESULT($mutt_cv_docdir)
543
544 docdir=$mutt_cv_docdir
545 AC_SUBST(docdir)
546
547 if test x$mutt_cv_setgid = xyes; then
548         DOTLOCK_GROUP='mail'
549         DOTLOCK_PERMISSION=2755
550 else
551         DOTLOCK_GROUP=''
552         DOTLOCK_PERMISSION=755
553 fi
554 AC_SUBST(DOTLOCK_GROUP)
555 AC_SUBST(DOTLOCK_PERMISSION)
556
557 AC_ARG_WITH(domain, AC_HELP_STRING([--with-domain=DOMAIN], [Specify your DNS domain name]),
558         [if test $withval != yes; then
559             if test $withval != no; then
560                 AC_DEFINE_UNQUOTED(DOMAIN,"$withval",[ Define your domain name. ])
561             fi
562         fi])
563
564 need_socket="no"
565
566 dnl -- socket dependencies --
567
568 AC_ARG_ENABLE(pop,  AC_HELP_STRING([--enable-pop], [Enable POP3 support]),
569 [       if test x$enableval = xyes ; then
570                 AC_DEFINE(USE_POP,1,[ Define if you want support for the POP3 protocol. ])
571                 MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pop.o pop_lib.o pop_auth.o"
572                 need_pop="yes"
573                 need_socket="yes"
574                 need_md5="yes"
575         fi
576 ])
577
578 AC_ARG_ENABLE(imap, AC_HELP_STRING([--enable-imap], [Enable IMAP support]),
579 [       if test x$enableval = xyes ; then
580                 AC_DEFINE(USE_IMAP,1,[ Define if you want support for the IMAP protocol. ])
581                 LIBIMAP="-Limap -limap"
582                 LIBIMAPDEPS="\$(top_srcdir)/imap/imap.h imap/libimap.a"
583                 need_imap="yes"
584                 need_socket="yes"
585                 need_md5="yes"
586         fi
587 ])
588 AM_CONDITIONAL(BUILD_IMAP, test x$need_imap = xyes)
589
590 AC_ARG_ENABLE(smtp, AC_HELP_STRING([--enable-smtp], [include internal SMTP relay support]),
591         [if test $enableval = yes; then
592                 AC_DEFINE(USE_SMTP, 1, [Include internal SMTP relay support])
593                 MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS smtp.o"
594                 need_socket="yes"
595         fi])
596
597 if test x"$need_imap" = xyes -o x"$need_pop" = xyes ; then
598   MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS bcache.o"
599 fi
600
601 dnl -- end socket dependencies --
602
603 if test "$need_socket" = "yes"
604 then
605         AC_CHECK_HEADERS([sys/select.h])
606         AC_MSG_CHECKING([for socklen_t])
607         AC_EGREP_HEADER(socklen_t, sys/socket.h, AC_MSG_RESULT([yes]),
608                 AC_MSG_RESULT([no])
609                 AC_DEFINE(socklen_t,int,
610                         [ Define to 'int' if <sys/socket.h> doesn't have it. ]))
611         AC_CHECK_FUNC(gethostent, , AC_CHECK_LIB(nsl, gethostent))
612         AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))
613         AC_CHECK_FUNCS(getaddrinfo)
614         AC_DEFINE(USE_SOCKET,1,
615                 [ Include code for socket support. Set automatically if you enable POP3 or IMAP ])
616         MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS account.o mutt_socket.o mutt_tunnel.o"
617 fi
618
619 dnl -- imap dependencies --
620
621 AC_ARG_WITH(gss, AC_HELP_STRING([--with-gss@<:@=PFX@:>@], [Compile in GSSAPI authentication for IMAP]), 
622     gss_prefix="$withval", gss_prefix="no")
623 if test "$gss_prefix" != "no"
624 then
625   if test "$need_imap" = "yes"
626   then
627     MUTT_AM_PATH_GSSAPI(gss_prefix)
628     AC_MSG_CHECKING(GSSAPI implementation)
629     AC_MSG_RESULT($GSSAPI_IMPL)
630     if test "$GSSAPI_IMPL" = "none"
631     then
632       AC_CACHE_SAVE
633       AC_MSG_RESULT([GSSAPI libraries not found])
634     fi
635     if test "$GSSAPI_IMPL" = "Heimdal"
636     then
637       AC_DEFINE(HAVE_HEIMDAL,1,[ Define if your GSSAPI implementation is Heimdal ])
638     fi
639     CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS"
640     MUTTLIBS="$MUTTLIBS $GSSAPI_LIBS"
641     AC_DEFINE(USE_GSS,1,[ Define if you have GSSAPI libraries available ])
642     need_gss="yes"
643   else
644     AC_MSG_WARN([GSS was requested but IMAP is not enabled])
645   fi
646 fi
647 AM_CONDITIONAL(USE_GSS, test x$need_gss = xyes)
648
649 dnl -- end imap dependencies --
650
651 AC_ARG_WITH(ssl, AC_HELP_STRING([--with-ssl@<:@=PFX@:>@], [Compile in SSL support for POP/IMAP/SMTP using OpenSSL]),
652 [       if test "$with_ssl" != "no"
653         then
654           if test "$need_socket" != "yes"; then
655            AC_MSG_WARN([SSL support is only useful with POP, IMAP or SMTP support])
656           else
657             if test "$with_ssl" != "yes"
658             then
659              LDFLAGS="$LDFLAGS -L$withval/lib"
660              CPPFLAGS="$CPPFLAGS -I$withval/include"
661             fi
662             saved_LIBS="$LIBS"
663
664             crypto_libs=""
665             AC_CHECK_LIB(z, deflate, [crypto_libs=-lz])
666             AC_CHECK_LIB(crypto, X509_new,
667               [crypto_libs="-lcrypto $crypto_libs"],, [$crypto_libs])
668             AC_CHECK_LIB(ssl, SSL_new,,
669               AC_MSG_ERROR([Unable to find SSL library]), [$crypto_libs])
670
671             LIBS="$LIBS $crypto_libs"
672             AC_CHECK_FUNCS(RAND_status RAND_egd)
673
674             AC_DEFINE(USE_SSL,1,[ Define if you want support for SSL. ])
675             AC_DEFINE(USE_SSL_OPENSSL,1,[ Define if you want support for SSL via OpenSSL. ])
676             LIBS="$saved_LIBS"
677             MUTTLIBS="$MUTTLIBS -lssl $crypto_libs"
678             MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_ssl.o"
679             need_ssl=yes
680           fi
681         fi
682 ])
683
684 AC_ARG_WITH([gnutls], AC_HELP_STRING([--with-gnutls@<:@=PFX@:>@], [Compile in SSL support for POP/IMAP/SMTP using gnutls]),
685     [gnutls_prefix="$withval"], [gnutls_prefix="no"])
686 if test "$gnutls_prefix" != "no" && test x"$need_ssl" != xyes
687 then
688   if test "$need_socket" != "yes"
689   then
690     AC_MSG_WARN([SSL support is only useful with POP, IMAP or SMTP support])
691   else
692     MUTT_AM_PATH_GNUTLS([$gnutls_prefix],
693       [dnl GNUTLS found
694       CPPFLAGS="$CPPFLAGS $LIBGNUTLS_CFLAGS"
695       MUTTLIBS="$MUTTLIBS $LIBGNUTLS_LIBS"
696
697       AC_DEFINE(USE_SSL,1,[ Define if you want support for SSL. ])
698       AC_DEFINE(USE_SSL_GNUTLS,1,[ Define if you want support for SSL via GNUTLS. ])
699
700       MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_ssl_gnutls.o"
701       need_ssl=yes],
702       [dnl GNUTLS not found
703         AC_MSG_ERROR([could not find libgnutls])
704       ])
705   fi
706 fi
707 AM_CONDITIONAL(USE_SSL, test x$need_ssl = xyes)
708
709 AC_ARG_WITH(sasl, AC_HELP_STRING([--with-sasl@<:@=PFX@:>@], [Use Cyrus SASL 2 network security library]),
710         [       
711         if test "$with_sasl" != "no"
712         then
713           if test "$need_socket" != "yes"
714           then
715             AC_MSG_ERROR([SASL support is only useful with POP or IMAP support])
716           fi
717
718           if test "$with_sasl" != "yes"
719           then
720             CPPFLAGS="$CPPFLAGS -I$with_sasl/include"
721             LDFLAGS="$LDFLAGS -L$with_sasl/lib"
722           fi
723
724           saved_LIBS="$LIBS"
725
726           AC_CHECK_LIB(sasl2, sasl_client_init,,
727             AC_MSG_ERROR([could not find libsasl2]),)
728
729           MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_sasl.o"
730           MUTTLIBS="$MUTTLIBS -lsasl2"
731           LIBS="$saved_LIBS"
732           AC_DEFINE(USE_SASL,1,
733                   [ Define if want to use the Cyrus SASL library for POP/IMAP authentication. ])
734           need_sasl=yes
735         fi
736         ])
737 AM_CONDITIONAL(USE_SASL, test x$need_sasl = xyes)
738
739 dnl -- end socket --
740
741 AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug], [Enable debugging support]),
742         [ if test x$enableval = xyes ; then
743                 AC_DEFINE(DEBUG,1,[ Define to enable debugging info. ])
744           fi
745          ])
746
747 AC_ARG_ENABLE(flock, AC_HELP_STRING([--enable-flock], [Use flock() to lock files]),
748         [if test $enableval = yes; then
749                 AC_DEFINE(USE_FLOCK,1, [ Define to use flock() to lock mailboxes. ])
750         fi])
751
752 mutt_cv_fcntl=yes
753 AC_ARG_ENABLE(fcntl, AC_HELP_STRING([--disable-fcntl], [Do NOT use fcntl() to lock files]),
754         [if test $enableval = no; then mutt_cv_fcntl=no; fi])
755
756 if test $mutt_cv_fcntl = yes; then
757         AC_DEFINE(USE_FCNTL,1, [ Define to use fcntl() to lock folders. ])
758 fi
759
760 AC_MSG_CHECKING(whether struct dirent defines d_ino)
761 ac_cv_dirent_d_ino=no
762 AC_TRY_LINK([#include <dirent.h>],[struct dirent dp; (void)dp.d_ino],[ac_cv_dirent_d_ino=yes])
763 if test x$ac_cv_dirent_d_ino = xyes ; then
764   AC_DEFINE(HAVE_DIRENT_D_INO,1,
765             [Define to 1 if your system has the dirent::d_ino member])
766 fi
767 AC_MSG_RESULT($ac_cv_dirent_d_ino)
768
769 mutt_cv_warnings=yes
770 AC_ARG_ENABLE(warnings, AC_HELP_STRING([--disable-warnings], [Turn off compiler warnings (not recommended)]),
771 [if test $enableval = no; then
772         mutt_cv_warnings=no
773 fi])
774
775 if test x$GCC = xyes && test $mutt_cv_warnings = yes; then
776   CFLAGS="-Wall -pedantic -Wno-long-long $CFLAGS"
777 fi
778
779 AC_ARG_ENABLE(nfs-fix, AC_HELP_STRING([--enable-nfs-fix], [Work around an NFS with broken attributes caching]),
780         [if test x$enableval = xyes; then
781                 AC_DEFINE(NFS_ATTRIBUTE_HACK,1,
782                   [Define if you have problems with mutt not detecting
783                    new/old mailboxes over NFS.  Some NFS implementations
784                    incorrectly cache the attributes of small files.])
785         fi])
786
787 AC_ARG_ENABLE(mailtool, AC_HELP_STRING([--enable-mailtool], [Enable Sun mailtool attachments support]),
788         [if test x$enableval = xyes; then
789                 AC_DEFINE(SUN_ATTACHMENT,1,[ Define to enable Sun mailtool attachments support. ])
790         fi])
791
792 AC_ARG_ENABLE(locales-fix, AC_HELP_STRING([--enable-locales-fix], [The result of isprint() is unreliable]),
793         [if test x$enableval = xyes; then
794                 AC_DEFINE(LOCALES_HACK,1,[ Define if the result of isprint() is unreliable. ])
795         fi])
796
797 AC_ARG_WITH(exec-shell, AC_HELP_STRING([--with-exec-shell=SHELL], [Specify alternate shell (ONLY if /bin/sh is broken)]),
798         [if test $withval != yes; then
799                 AC_DEFINE_UNQUOTED(EXECSHELL, "$withval",
800                  [program to use for shell commands])
801          else
802                 AC_DEFINE_UNQUOTED(EXECSHELL, "/bin/sh")
803         fi],
804         [AC_DEFINE_UNQUOTED(EXECSHELL, "/bin/sh")])
805
806 AC_ARG_ENABLE(exact-address, AC_HELP_STRING([--enable-exact-address], [Enable regeneration of email addresses]),
807         [if test $enableval = yes; then
808                 AC_DEFINE(EXACT_ADDRESS,1,
809                   [Enable exact regeneration of email addresses as parsed?
810                    NOTE: this requires significant more memory when defined.])
811
812         fi])
813
814 dnl -- start cache --
815 db_found=no
816 db_requested=auto
817 AC_ARG_ENABLE(hcache, AC_HELP_STRING([--enable-hcache],
818   [Enable header caching]))
819 AC_ARG_WITH(tokyocabinet, AC_HELP_STRING([--without-tokyocabinet],
820   [Don't use tokyocabinet even if it is available]))
821 AC_ARG_WITH(qdbm, AC_HELP_STRING([--without-qdbm],
822   [Don't use qdbm even if it is available]))
823 AC_ARG_WITH(gdbm, AC_HELP_STRING([--without-gdbm],
824   [Don't use gdbm even if it is available]))
825 AC_ARG_WITH(bdb, AC_HELP_STRING([--with-bdb@<:@=DIR@:>@],
826   [Use BerkeleyDB4 if gdbm is not available]))
827
828 if test x$enable_hcache = xyes
829 then
830     AC_DEFINE(USE_HCACHE, 1, [Enable header caching])
831     MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS hcache.o"
832
833     OLDCPPFLAGS="$CPPFLAGS"
834     OLDLDFLAGS="$LDFLAGS"
835     OLDLIBS="$LIBS"
836
837     need_md5="yes"
838
839     if test -n "$with_tokyocabinet" && test "$with_tokyocabinet" != "no"
840     then
841       db_requested=tc
842     fi
843     if test -n "$with_qdbm" && test "$with_qdbm" != "no"
844     then
845       if test "$db_requested" != "auto"
846       then
847         AC_MSG_ERROR([more than one header cache engine requested.])
848       else
849         db_requested=qdbm
850       fi
851     fi
852     if test -n "$with_gdbm" && test "$with_gdbm" != "no"
853     then
854       if test "$db_requested" != "auto"
855       then
856         AC_MSG_ERROR([more than one header cache engine requested.])
857       else
858         db_requested=gdbm
859       fi
860     fi
861     if test -n "$with_bdb" && test "$with_bdb" != "no"
862     then
863       if test "$db_requested" != "auto"
864       then
865         AC_MSG_ERROR([more than one header cache engine requested.])
866       else
867         db_requested=bdb
868       fi
869     fi
870     
871     dnl -- Tokyo Cabinet --
872     if test "$with_tokyocabinet" != "no" \
873             && test "$db_requested" = auto -o "$db_requested" = tc
874     then
875       if test -n "$with_tokyocabinet" && test "$with_tokyocabinet" != "yes"
876       then
877         CPPFLAGS="$CPPFLAGS -I$with_tokyocabinet/include"
878         LDFLAGS="$LDFLAGS -L$with_tokyocabinet/lib"
879       fi
880
881       AC_CHECK_HEADER(tcbdb.h,
882       AC_CHECK_LIB(tokyocabinet, tcbdbopen,
883         [MUTTLIBS="$MUTTLIBS -ltokyocabinet"
884          AC_DEFINE(HAVE_TC, 1, [Tokyo Cabinet Support])
885          db_found=tc],
886         [CPPFLAGS="$OLDCPPFLAGS"
887          LDFLAGS="$OLDLDFLAGS"]))
888       if test "$db_requested" != auto && test "$db_found" != "$db_requested"
889       then
890         AC_MSG_ERROR([Tokyo Cabinet could not be used. Check config.log for details.])
891       fi
892     fi
893
894     dnl -- QDBM --
895     if test "$with_qdbm" != "no" && test $db_found = no \
896             && test "$db_requested" = auto -o "$db_requested" = qdbm
897     then
898       if test -n "$with_qdbm" && test "$with_qdbm" != "yes"
899       then
900         if test -d $with_qdbm/include/qdbm; then
901           CPPFLAGS="$CPPFLAGS -I$with_qdbm/include/qdbm"
902         else
903           CPPFLAGS="$CPPFLAGS -I$with_qdbm/include"
904         fi
905         LDFLAGS="$LDFLAGS -L$with_qdbm/lib"
906       else
907          if test -d /usr/include/qdbm; then
908            CPPFLAGS="$CPPFLAGS -I/usr/include/qdbm"
909          fi
910       fi
911
912       saved_LIBS="$LIBS"
913       AC_CHECK_HEADERS(villa.h)
914       AC_CHECK_LIB(qdbm, vlopen,
915         [MUTTLIBS="$MUTTLIBS -lqdbm"
916          AC_DEFINE(HAVE_QDBM, 1, [QDBM Support])
917          db_found=qdbm],
918         [CPPFLAGS="$OLDCPPFLAGS"
919          LDFLAGS="$OLDLDFLAGS"])
920       LIBS="$saved_LIBS"
921       if test "$db_requested" != auto && test "$db_found" != "$db_requested"
922       then
923         AC_MSG_ERROR([QDBM could not be used. Check config.log for details.])
924       fi
925     fi
926
927     dnl -- GDBM --
928     if test x$with_gdbm != xno && test $db_found = no \
929             && test "$db_requested" = auto -o "$db_requested" = gdbm
930     then
931         if test "$with_gdbm" != "yes"
932         then
933           CPPFLAGS="$CPPFLAGS -I$with_gdbm/include"
934           LDFLAGS="$LDFLAGS -L$with_gdbm/lib"
935         fi
936         saved_LIBS="$LIBS"
937         LIBS="$LIBS -lgdbm"
938         AC_CACHE_CHECK(for gdbm_open, ac_cv_gdbmopen,[
939             ac_cv_gdbmopen=no
940             AC_TRY_LINK([#include <gdbm.h>],[gdbm_open(0,0,0,0,0);],[ac_cv_gdbmopen=yes])
941         ])
942         LIBS="$saved_LIBS"
943         if test "$ac_cv_gdbmopen" = yes
944         then
945           AC_DEFINE(HAVE_GDBM, 1, [GDBM Support])
946           MUTTLIBS="$MUTTLIBS -lgdbm"
947           db_found=gdbm
948         fi
949         if test "$db_requested" != auto && test "$db_found" != "$db_requested"
950         then
951           AC_MSG_ERROR([GDBM could not be used. Check config.log for details.])
952         fi
953     fi
954
955     dnl -- BDB --
956     ac_bdb_prefix="$with_bdb"
957     if test x$ac_bdb_prefix != xno && test $db_found = no
958     then
959         if test x$ac_bdb_prefix = xyes || test x$ac_bdb_prefix = x
960         then
961           ac_bdb_prefix="$mutt_cv_prefix /opt/csw/bdb4 /opt /usr/local /usr"
962         fi
963         for d in $ac_bdb_prefix; do
964             bdbpfx="$bdbpfx $d"
965             for v in BerkeleyDB.4.3 BerkeleyDB.4.2 BerkeleyDB.4.1; do
966                 bdbpfx="$bdbpfx $d/$v"
967             done
968         done
969         BDB_VERSIONS="db-4 db4 db-4.6 db4.6 db46 db-4.5 db4.5 db45 db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db ''"
970         AC_MSG_CHECKING([for BerkeleyDB > 4.0])
971         for d in $bdbpfx; do
972             BDB_INCLUDE_DIR=""
973             BDB_LIB_DIR=""
974             for v in / $BDB_VERSIONS; do
975                 if test -r "$d/include/$v/db.h"; then
976                     BDB_INCLUDE_DIR="$d/include/$v"
977                     for bdblibdir in "$d/lib/$v" "$d/lib"; do
978                         test -d "$bdblibdir" || continue
979                         BDB_LIB_DIR="$bdblibdir"
980                         for l in `echo $BDB_VERSIONS`; do
981                             CPPFLAGS="$OLDCPPFLAGS -I$BDB_INCLUDE_DIR"
982                             LIBS="$OLDLIBS -L$BDB_LIB_DIR -l$l"
983                             AC_TRY_LINK([
984                                 #include <stdlib.h>
985                                 #include <db.h>
986                             ],[
987                                 DB *db = NULL;
988                                 db->open(db,NULL,NULL,NULL,0,0,0);
989                             ],[
990                                 ac_cv_dbcreate=yes
991                                 BDB_LIB="$l"
992                                 break
993                             ])
994                         done
995                         test x$ac_cv_dbcreate = xyes && break 2
996                     done
997                 fi
998             done
999             test x$BDB_LIB != x && break
1000         done
1001         if test x$ac_cv_dbcreate = xyes
1002         then
1003             AC_MSG_RESULT(yes)
1004             CPPFLAGS="$OLDCPPFLAGS -I$BDB_INCLUDE_DIR"
1005             LIBS="$OLDLIBS -L$BDB_LIB_DIR -l$BDB_LIB"
1006             AC_DEFINE(HAVE_DB4, 1, [Berkeley DB4 Support])
1007             db_found=bdb
1008         else
1009             AC_MSG_RESULT(no)
1010         fi
1011     fi
1012
1013     if test $db_found = no
1014     then
1015         AC_MSG_ERROR([You need Tokyo Cabinet, QDBM, GDBM or Berkeley DB4 for hcache])
1016     fi
1017 fi
1018 dnl -- end cache --
1019
1020 if test "$need_md5" = "yes"
1021 then
1022   MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS md5.o"
1023   MUTT_MD5="mutt_md5"
1024 fi
1025 AC_SUBST(MUTT_MD5)
1026
1027 AC_SUBST(MUTTLIBS)
1028 AC_SUBST(MUTT_LIB_OBJECTS)
1029 AC_SUBST(LIBIMAP)
1030 AC_SUBST(LIBIMAPDEPS)
1031
1032 dnl -- iconv/gettext --
1033
1034 AC_ARG_ENABLE(iconv, AC_HELP_STRING([--disable-iconv], [Disable iconv support]),
1035         [if test x$enableval = xno ; then
1036                 am_cv_func_iconv=no
1037         fi
1038 ])
1039
1040 MUTT_AM_GNU_GETTEXT
1041
1042 if test "$am_cv_func_iconv" != "yes"
1043 then
1044   AC_MSG_WARN([Configuring without iconv support. See INSTALL for details])
1045 else
1046
1047 AC_CHECK_HEADERS(iconv.h,
1048         [AC_MSG_CHECKING(whether iconv.h defines iconv_t)
1049          AC_EGREP_HEADER([typedef.*iconv_t],iconv.h,
1050                 [AC_MSG_RESULT(yes)
1051                  AC_DEFINE(HAVE_ICONV_T_DEF, 1,
1052                         [Define if <iconv.h> defines iconv_t.])],
1053                  AC_MSG_RESULT(no))])
1054
1055 dnl (1) Some implementations of iconv won't convert from UTF-8 to UTF-8.
1056 dnl (2) In glibc-2.1.2 and earlier there is a bug that messes up ob and
1057 dnl     obl when args 2 and 3 are 0 (fixed in glibc-2.1.3).
1058 AC_CACHE_CHECK([whether this iconv is good enough], mutt_cv_iconv_good,
1059         mutt_save_LIBS="$LIBS"
1060         LIBS="$LIBS $LIBICONV"
1061         AC_TRY_RUN([
1062 #include <iconv.h>
1063 int main()
1064 {
1065   iconv_t cd;
1066 changequote(, )dnl
1067   char buf[4];
1068 changequote([, ])dnl
1069   char *ob;
1070   size_t obl;
1071   ob = buf, obl = sizeof(buf);
1072   return ((cd = iconv_open("UTF-8", "UTF-8")) != (iconv_t)(-1) &&
1073           (iconv(cd, 0, 0, &ob, &obl) ||
1074            !(ob == buf && obl == sizeof(buf)) ||
1075            iconv_close(cd)));
1076 }
1077                 ],
1078                 mutt_cv_iconv_good=yes,
1079                 mutt_cv_iconv_good=no,
1080                 mutt_cv_iconv_good=yes)
1081         LIBS="$mutt_save_LIBS")
1082 if test "$mutt_cv_iconv_good" = no; then
1083   AC_MSG_ERROR(Try using libiconv instead)
1084 fi
1085
1086 dnl This is to detect implementations such as the one in glibc-2.1,
1087 dnl which always convert exactly but return the number of characters
1088 dnl converted instead of the number converted inexactly.
1089 AC_CACHE_CHECK([whether iconv is non-transcribing], mutt_cv_iconv_nontrans,
1090         mutt_save_LIBS="$LIBS"
1091         LIBS="$LIBS $LIBICONV"
1092         AC_TRY_RUN([
1093 #include <iconv.h>
1094 #include <string.h>
1095 int main()
1096 {
1097   iconv_t cd;
1098   const char *ib;
1099   char *ob;
1100   size_t ibl, obl;
1101   const char *s = "\304\211";
1102 changequote(, )dnl
1103   char t[3];
1104 changequote([, ])dnl
1105   ib = s, ibl = 2, ob = t, obl = 3;
1106   return ((cd = iconv_open("UTF-8", "UTF-8")) == (iconv_t)(-1) ||
1107           iconv(cd, &ib, &ibl, &ob, &obl));
1108 }
1109                 ],
1110                 mutt_cv_iconv_nontrans=no,
1111                 mutt_cv_iconv_nontrans=yes,
1112                 mutt_cv_iconv_nontrans=no)
1113         LIBS="$mutt_save_LIBS")
1114 if test "$mutt_cv_iconv_nontrans" = yes; then
1115   AC_DEFINE(ICONV_NONTRANS, 1)
1116 else
1117   AC_DEFINE(ICONV_NONTRANS, 0)
1118 fi
1119
1120 CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/intl"
1121
1122 if test "$BUILD_INCLUDED_LIBINTL" = "yes"; then
1123   AC_DEFINE(HAVE_BIND_TEXTDOMAIN_CODESET,1,
1124           [ Define if your gettext has bind_textdomain_codeset. ])
1125 else
1126   mutt_save_LIBS="$LIBS"
1127   LIBS="$LIBS $INTLLIBS"
1128   AC_CHECK_FUNCS(bind_textdomain_codeset)
1129   LIBS="$mutt_save_LIBS"
1130 fi
1131
1132 fi # libiconv
1133
1134 dnl -- IDN depends on iconv
1135
1136 AC_ARG_WITH(idn, AC_HELP_STRING([--with-idn=@<:@PFX@:>@], [Use GNU libidn for domain names]),
1137                  [
1138                   if test "$with_idn" != "no" ; then
1139                         if test "$with_idn" != "yes" ; then
1140                            CPPFLAGS="$CPPFLAGS -I$with_idn/include"
1141                            LDFLAGS="$LDFLAGS -L$with_idn/lib"
1142                         fi
1143                   fi
1144                  ]
1145 )
1146
1147 if test "x$with_idn" != "xno"; then
1148   if test "$am_cv_func_iconv" != "yes"
1149   then
1150     if test "x$with_idn" != "x"
1151     then
1152       AC_MSG_ERROR([IDN requested but iconv is disabled or unavailable])
1153     fi
1154   else
1155     AC_SEARCH_LIBS([stringprep_check_version], [idn], [
1156       AC_DEFINE([HAVE_LIBIDN], 1, [Define to 1 if you have the `idn' library])
1157       MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_idna.o"
1158     ])
1159     AC_CHECK_FUNCS(idna_to_unicode_utf8_from_utf8 idna_to_unicode_8z8z)
1160     AC_CHECK_FUNCS(idna_to_ascii_from_utf8 idna_to_ascii_8z)
1161     AC_CHECK_FUNCS(idna_to_ascii_lz idna_to_ascii_from_locale)
1162   fi
1163 fi
1164
1165 dnl -- locales --
1166
1167 AC_CHECK_HEADERS(wchar.h)
1168
1169 AC_CACHE_CHECK([for wchar_t], mutt_cv_wchar_t,
1170         AC_TRY_COMPILE([
1171 #include <stddef.h>
1172 #include <stdlib.h>
1173 #ifdef HAVE_WCHAR_H
1174 #include <wchar.h>
1175 #endif
1176                 ],
1177                 [ wchar_t wc; return 0; ],
1178                 mutt_cv_wchar_t=yes,
1179                 mutt_cv_wchar_t=no))
1180
1181 if test "$mutt_cv_wchar_t" = no; then
1182         AC_DEFINE(wchar_t,int,[ Define to 'int' if system headers don't define. ])
1183 fi
1184
1185 AC_CACHE_CHECK([for wint_t], mutt_cv_wint_t,
1186         AC_TRY_COMPILE([
1187 #include <stddef.h>
1188 #include <stdlib.h>
1189 #ifdef HAVE_WCHAR_H
1190 #include <wchar.h>
1191 #endif
1192                 ],
1193                 [ wint_t wc; return 0; ],
1194                 mutt_cv_wint_t=yes,
1195                 mutt_cv_wint_t=no))
1196
1197 if test "$mutt_cv_wint_t" = no; then
1198         AC_DEFINE(wint_t,int,[ Define to 'int' if system headers don't define. ])
1199 fi
1200
1201 AC_CHECK_HEADERS(wctype.h)
1202 AC_CHECK_FUNCS(iswalnum iswalpha  iswcntrl iswdigit)
1203 AC_CHECK_FUNCS(iswgraph iswlower iswprint iswpunct iswspace iswupper)
1204 AC_CHECK_FUNCS(iswxdigit towupper towlower)
1205
1206 AC_CACHE_CHECK([for mbstate_t], mutt_cv_mbstate_t,
1207         AC_TRY_COMPILE([
1208 #include <stddef.h>
1209 #include <stdlib.h>
1210 #ifdef HAVE_WCHAR_H
1211 #include <wchar.h>
1212 #endif
1213                 ],
1214                 [ mbstate_t s; return 0; ],
1215                 mutt_cv_mbstate_t=yes,
1216                 mutt_cv_mbstate_t=no))
1217
1218 if test "$mutt_cv_mbstate_t" = no; then
1219         AC_DEFINE(mbstate_t,int,[ Define to 'int' if system headers don't define. ])
1220 fi
1221
1222 wc_funcs=maybe
1223 AC_ARG_WITH(wc-funcs, AC_HELP_STRING([--without-wc-funcs], [Do not use the system's wchar_t functions]),
1224         wc_funcs=$withval)
1225
1226 if test "$wc_funcs" != yes && test "$wc_funcs" != no; then
1227         AC_CACHE_CHECK([for wchar_t functions], mutt_cv_wc_funcs,
1228                 mutt_cv_wc_funcs=no
1229                 AC_TRY_LINK([
1230 #define _XOPEN_SOURCE 1
1231 #include <stddef.h>
1232 #include <stdlib.h>
1233 #ifdef HAVE_WCTYPE_H
1234 #include <wctype.h>
1235 #endif
1236 #ifdef HAVE_WCHAR_H
1237 #include <wchar.h>
1238 #endif],
1239                         [mbrtowc(0, 0, 0, 0); wctomb(0, 0); wcwidth(0);
1240         iswprint(0); iswspace(0); towlower(0); towupper(0); iswalnum(0)],
1241                         mutt_cv_wc_funcs=yes))
1242         wc_funcs=$mutt_cv_wc_funcs
1243 fi
1244
1245 if test $wc_funcs = yes; then
1246         AC_DEFINE(HAVE_WC_FUNCS,1,[ Define if you are using the system's wchar_t functions. ])
1247 else
1248         MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS utf8.o wcwidth.o"
1249 fi
1250
1251 AC_CACHE_CHECK([for nl_langinfo and CODESET], mutt_cv_langinfo_codeset,
1252   [AC_TRY_LINK([#include <langinfo.h>],
1253     [char* cs = nl_langinfo(CODESET);],
1254     mutt_cv_langinfo_codeset=yes,
1255     mutt_cv_langinfo_codeset=no)])
1256 if test $mutt_cv_langinfo_codeset = yes; then
1257   AC_DEFINE(HAVE_LANGINFO_CODESET,1,[ Define if you have <langinfo.h> and nl_langinfo(CODESET). ])
1258 fi
1259
1260 AC_CACHE_CHECK([for nl_langinfo and YESEXPR], mutt_cv_langinfo_yesexpr,
1261   [AC_TRY_LINK([#include <langinfo.h>],
1262     [char* cs = nl_langinfo(YESEXPR);],
1263     mutt_cv_langinfo_yesexpr=yes,
1264     mutt_cv_langinfo_yesexpr=no)])
1265 if test $mutt_cv_langinfo_yesexpr = yes; then
1266   AC_DEFINE(HAVE_LANGINFO_YESEXPR,1,[ Define if you have <langinfo.h> and nl_langinfo(YESEXPR). ])
1267 fi
1268
1269 dnl Documentation tools
1270 have_openjade="no"
1271 AC_PATH_PROG([OSPCAT], [ospcat], [none])
1272 if test "$OSPCAT" != "none"
1273 then
1274   AC_MSG_CHECKING([for openjade docbook stylesheets])
1275   dslosfile=`ospcat --public-id="-//Norman Walsh//DOCUMENT DocBook Print Stylesheet//EN"`
1276   DSLROOT=`echo $dslosfile | sed -n -e "s/.*SOIBASE='\(@<:@^'@:>@*\)\/catalog'.*/\1/p"`
1277   # ospcat may spit out an absolute path without an SOIBASE
1278   if test -z "$DSLROOT"
1279   then
1280     DSLROOT=`echo $dslosfile | sed -e 's|<OSFILE>\(.*\)/print/docbook.dsl|\1|'`
1281   fi
1282   if test -f $DSLROOT/print/docbook.dsl
1283   then
1284     AC_MSG_RESULT([in $DSLROOT])
1285     have_openjade="yes"
1286   else
1287     AC_MSG_RESULT([not found: PDF documentation will not be built.])
1288   fi
1289 fi
1290 AC_SUBST(DSLROOT)
1291
1292 AC_ARG_ENABLE(full_doc,
1293               AC_HELP_STRING([--disable-full-doc], [Omit disabled variables]),
1294 [       if test x$enableval = xno ; then
1295                 full_doc=no
1296         fi
1297 ])
1298 if test x$full_doc != xno ; then
1299   AC_DEFINE(MAKEDOC_FULL,1, [Define if you want complete documentation.])
1300 fi
1301
1302 AC_OUTPUT(Makefile contrib/Makefile doc/Makefile imap/Makefile
1303         intl/Makefile m4/Makefile po/Makefile.in
1304         hcachever.sh muttbug.sh doc/instdoc.sh)