configure.in 23.1 KB
Newer Older
Thomas Roessler's avatar
Thomas Roessler committed
1
dnl Process this file with autoconf to produce a configure script.
2

3 4 5
dnl !!! WHEN ADDING NEW CONFIGURE TESTS, PLEASE ADD CODE TO MAIN.C !!!
dnl !!! TO DUMP THEIR RESULTS WHEN MUTT -V IS CALLED               !!!

6
AC_PREREQ(2.12)
Thomas Roessler's avatar
Thomas Roessler committed
7
AC_INIT(mutt.h)
8
AM_CONFIG_HEADER(config.h)
9 10 11 12

mutt_cv_version=`cat $srcdir/VERSION`

AM_INIT_AUTOMAKE(mutt, $mutt_cv_version)
13

14
ALL_LINGUAS="de ru it es uk fr pl nl cs id sk ko el zh_TW.Big5 zh_CN.GB2312 pt_BR eo gl sv da"
Thomas Roessler's avatar
Thomas Roessler committed
15

Thomas Roessler's avatar
Thomas Roessler committed
16 17
AC_CANONICAL_HOST

Thomas Roessler's avatar
Thomas Roessler committed
18 19 20 21 22 23 24 25 26
AC_MSG_CHECKING(for prefix)
if test x$prefix = xNONE; then
	mutt_cv_prefix=$ac_default_prefix
else
	mutt_cv_prefix=$prefix
fi
AC_MSG_RESULT($mutt_cv_prefix)

AC_PROG_CC
27 28 29 30 31
AC_ISC_POSIX
AM_C_PROTOTYPES
if test "x$U" != "x"; then
  AC_MSG_ERROR(Compiler not ANSI compliant)
fi
32
AC_PROG_CPP
Thomas Roessler's avatar
Thomas Roessler committed
33 34
AC_PROG_MAKE_SET
AC_PROG_INSTALL
35
AC_PROG_RANLIB
36
AC_CHECK_TOOL(AR, ar, ar)
Thomas Roessler's avatar
Thomas Roessler committed
37

38
AC_C_INLINE
39
AC_C_CONST
Thomas Roessler's avatar
Thomas Roessler committed
40

41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
AC_PATH_PROG(DBX, dbx, no)
AC_PATH_PROG(GDB, gdb, no)
AC_PATH_PROG(SDB, sdb, no)

if test $GDB != no ; then
	DEBUGGER=$GDB
elif test $DBX != no ; then
	DEBUGGER=$DBX 
elif test $SDB != no ; then
	DEBUGGER=$SDB
else
	DEBUGGER=no
fi

AC_SUBST(DEBUGGER)

57 58 59
ac_aux_path_sendmail=/usr/sbin:/usr/lib   
AC_PATH_PROG(SENDMAIL, sendmail, no, $PATH:$ac_aux_path_sendmail)

Thomas Roessler's avatar
Thomas Roessler committed
60 61 62
AC_DEFINE_UNQUOTED(SENDMAIL, "$ac_cv_path_SENDMAIL")

OPS='$(srcdir)/OPS'
63 64 65 66 67
if test -f $srcdir/EXPORTABLE ; then
	SUBVERSION="us"
else
	SUBVERSION="i"

68
	AC_ARG_ENABLE(pgp, [  --disable-pgp              Disable PGP support],
69 70 71 72
	[	if test x$enableval = xno ; then
			HAVE_PGP=no
		fi
	])
Thomas Roessler's avatar
Thomas Roessler committed
73

74 75
	if test x$HAVE_PGP != xno ; then
		AC_DEFINE(HAVE_PGP)
Thomas Roessler's avatar
Thomas Roessler committed
76 77
		PGPAUX_TARGET=pgpring
		AM_CONDITIONAL(NEEDS_PGPEWRAP, true)
78
		MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pgp.o pgpinvoke.o pgpkey.o pgplib.o gnupgparse.o"
Thomas Roessler's avatar
Thomas Roessler committed
79 80
		OPS="$OPS \$(srcdir)/OPS.PGP"
	fi
81

82
	AC_ARG_WITH(mixmaster, [  --with-mixmaster[=PATH]    Include Mixmaster support],
83 84 85 86 87 88 89 90 91 92
		[if test -x "$withval" ; then
			MIXMASTER="$withval"
		 else
		 	MIXMASTER="mixmaster"
		 fi
		 OPS="$OPS \$(srcdir)/OPS.MIX"
		 MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS remailer.o"
		 AC_DEFINE_UNQUOTED(MIXMASTER, "$MIXMASTER")
                ])
		
Thomas Roessler's avatar
Thomas Roessler committed
93 94 95
fi
AC_SUBST(OPS)

96 97
AC_SUBST(PGPAUX_TARGET)

98 99
AC_DEFINE_UNQUOTED(SUBVERSION, "$SUBVERSION")
AC_SUBST(SUBVERSION)
Thomas Roessler's avatar
Thomas Roessler committed
100 101 102 103 104 105

AC_PATH_PROG(ISPELL, ispell, no)
if test $ISPELL != no; then
	AC_DEFINE_UNQUOTED(ISPELL, "$ISPELL")
fi

106
AC_ARG_WITH(slang, [  --with-slang[=DIR]         Use S-Lang instead of ncurses],
107
	[AC_CACHE_CHECK([if this is a BSD system], mutt_cv_bsdish,
108
		[AC_TRY_RUN([#include <sys/param.h>
Thomas Roessler's avatar
Thomas Roessler committed
109 110 111 112 113 114 115 116 117

main ()
{
#ifdef BSD
	exit (0);
#else
	exit (1);
#endif
}],
118 119 120
			mutt_cv_bsdish=yes,
			mutt_cv_bsdish=no,
			mutt_cv_bsdish=no)])
Thomas Roessler's avatar
Thomas Roessler committed
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
	
	AC_MSG_CHECKING(for S-Lang)
	if test $withval = yes; then
		if test -d $srcdir/../slang; then
			mutt_cv_slang=$srcdir/../slang/src
			CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}"
			LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs"
		else
			if test -d $mutt_cv_prefix/include/slang; then
				CPPFLAGS="$CPPFLAGS -I$mutt_cv_prefix/include/slang"
			elif test -d /usr/include/slang; then
				CPPFLAGS="$CPPFLAGS -I/usr/include/slang"
			fi
			mutt_cv_slang=yes
		fi
	else
		dnl ---Check to see if $withval is a source directory
		if test -f $withval/src/slang.h; then
			mutt_cv_slang=$withval/src
			CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}"
			LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs"
		else
			dnl ---Must be installed somewhere
			mutt_cv_slang=$withval
			if test -d $withval/include/slang; then
				CPPFLAGS="$CPPFLAGS -I${withval}/include/slang"
			elif test -d $withval/include; then
				CPPFLAGS="$CPPFLAGS -I${withval}/include"
			fi
			LDFLAGS="$LDFLAGS -L${withval}/lib"
		fi
	fi
	AC_MSG_RESULT($mutt_cv_slang)
	if test $mutt_cv_bsdish = yes; then
155
		AC_CHECK_LIB(termlib, main)
Thomas Roessler's avatar
Thomas Roessler committed
156 157 158
	fi
	AC_DEFINE(USE_SLANG_CURSES)
	AC_DEFINE(HAVE_COLOR)
159
	MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o"
Thomas Roessler's avatar
Thomas Roessler committed
160
	
161
	dnl --- now that we've found it, check the link
Thomas Roessler's avatar
Thomas Roessler committed
162
	
163 164 165
	AC_CHECK_LIB(slang, SLtt_get_terminfo,
		[MUTTLIBS="$MUTTLIBS -lslang -lm"],
		[AC_MSG_ERROR(unable to compile.  check config.log)], -lm)
Thomas Roessler's avatar
Thomas Roessler committed
166 167 168 169

	],

	[mutt_cv_curses=/usr
170
	AC_ARG_WITH(curses, [  --with-curses=DIR          Where ncurses is installed ],
Thomas Roessler's avatar
Thomas Roessler committed
171 172 173 174 175 176 177 178 179 180
		[if test $withval != yes; then
			mutt_cv_curses=$withval
		fi
		if test x$mutt_cv_curses != x/usr; then
			LDFLAGS="-L${mutt_cv_curses}/lib $LDFLAGS"
			CPPFLAGS="$CPPFLAGS -I${mutt_cv_curses}/include"
		fi])

	AC_CHECK_LIB(ncurses, initscr,

181
		[MUTTLIBS="$MUTTLIBS -lncurses"
Thomas Roessler's avatar
Thomas Roessler committed
182 183 184 185 186
		if test x$mutt_cv_curses = x/usr -a -d /usr/include/ncurses; then
			CPPFLAGS="$CPPFLAGS -I/usr/include/ncurses"
		fi
		AC_CHECK_HEADERS(ncurses.h)],

187
		[CF_CURSES_LIBS])
Thomas Roessler's avatar
Thomas Roessler committed
188

189 190
	old_LIBS="$LIBS"
	LIBS="$LIBS $MUTTLIBS"
191 192 193 194 195 196 197
	CF_CHECK_FUNCDECLS([#include <curses.h>], start_color typeahead bkgdset curs_set meta use_default_colors resizeterm)
	if test "$ac_cv_func_decl_start_color" = yes; then
		AC_DEFINE(HAVE_COLOR)
	fi
	if test "$ac_cv_func_decl_resizeterm" = yes; then
		MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o"
	fi
198
	LIBS="$old_LIBS"
Thomas Roessler's avatar
Thomas Roessler committed
199 200 201 202
	])

AC_HEADER_STDC

203
AC_CHECK_HEADERS(stdarg.h sys/ioctl.h ioctl.h sysexits.h)
204
AC_CHECK_HEADERS(sys/time.h sys/resource.h)
205
AC_CHECK_HEADERS(unix.h)
206

207
AC_CHECK_FUNCS(setrlimit getsid)
Thomas Roessler's avatar
Thomas Roessler committed
208 209 210

AC_TYPE_SIGNAL

211 212
AC_MSG_CHECKING(for sig_atomic_t in signal.h)
AC_EGREP_HEADER(sig_atomic_t,signal.h,dnl
213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
  [
    ac_cv_type_sig_atomic_t=yes;
    AC_EGREP_HEADER(volatile.*sig_atomic_t,
                    signal.h,
                    [
                        is_sig_atomic_t_volatile=yes;
                        AC_MSG_RESULT([yes, volatile])
                    ],
                    [
                        is_sig_atomic_t_volatile=no;
                        AC_MSG_RESULT([yes, non volatile])
                    ])
  ],
  [
    AC_MSG_RESULT(no)
    AC_CHECK_TYPE(sig_atomic_t, int)
    is_sig_atomic_t_volatile=no
  ])
if test $is_sig_atomic_t_volatile = 'yes'
then
    AC_DEFINE(SIG_ATOMIC_VOLATILE_T, sig_atomic_t)
else
    AC_DEFINE(SIG_ATOMIC_VOLATILE_T, [volatile sig_atomic_t])
fi
237

Thomas Roessler's avatar
Thomas Roessler committed
238 239 240 241 242 243 244
AC_DECL_SYS_SIGLIST

dnl need this for DEC alpha
AC_CHECK_SIZEOF(long)

AC_TYPE_PID_T

245
AC_CHECK_FUNCS(fgetpos memmove setegid srand48 strerror)
Thomas Roessler's avatar
Thomas Roessler committed
246

Thomas Roessler's avatar
Thomas Roessler committed
247
AC_REPLACE_FUNCS(strcasecmp strdup)
Thomas Roessler's avatar
Thomas Roessler committed
248

249 250 251 252 253
AC_CHECK_FUNC(getopt)
if test $ac_cv_func_getopt = yes; then
	AC_CHECK_HEADERS(getopt.h)
fi

Thomas Roessler's avatar
Thomas Roessler committed
254
mutt_cv_snprintf=no
Thomas Roessler's avatar
Thomas Roessler committed
255
SNPRINTFOBJS=""
Thomas Roessler's avatar
Thomas Roessler committed
256 257 258
AC_CHECK_FUNC(snprintf, [AC_DEFINE(HAVE_SNPRINTF)], [mutt_cv_snprintf=yes])
AC_CHECK_FUNC(vsnprintf, [AC_DEFINE(HAVE_VSNPRINTF)], [mutt_cv_snprintf=yes])
if test $mutt_cv_snprintf = yes; then
259
	LIBOBJS="$LIBOBJS snprintf.o"
Thomas Roessler's avatar
Thomas Roessler committed
260 261 262 263 264 265 266 267
fi

dnl SCO uses chsize() instead of ftruncate()
AC_CHECK_FUNCS(ftruncate, break, [AC_CHECK_LIB(x, chsize)])

dnl SCO has strftime() in libintl
AC_CHECK_FUNCS(strftime, break, [AC_CHECK_LIB(intl, strftime)])

Thomas Roessler's avatar
Thomas Roessler committed
268 269 270
dnl AIX may not have fchdir()
AC_CHECK_FUNCS(fchdir, [AC_DEFINE(HAVE_FCHDIR)], [mutt_cv_fchdir=no])

271
AC_ARG_WITH(regex, [  --with-regex               Use the GNU regex library ],
272 273
	[mutt_cv_regex=yes],
	[AC_CHECK_FUNCS(regcomp, mutt_cv_regex=no, mutt_cv_regex=yes)])
274

275
if test $mutt_cv_regex = no ; then
276 277
AC_CACHE_CHECK([whether your system's regexp library is completely broken], 
	[mutt_cv_regex_broken],
278 279 280
	AC_TRY_RUN([
#include <unistd.h>
#include <regex.h>
281
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); }],
282
	mutt_cv_regex_broken=no, mutt_cv_regex_broken=yes, mutt_cv_regex_broken=yes))
283 284
	AC_MSG_RESULT([$mutt_cv_regex_broken])
	if test $mutt_cv_regex_broken = yes ; then
285
		echo "Using the included GNU regex instead." >&AC_FD_MSG
286 287 288 289
		mutt_cv_regex=yes
	fi
fi

Thomas Roessler's avatar
Thomas Roessler committed
290
if test $mutt_cv_regex = yes; then
291
	AC_DEFINE(USE_GNU_REGEX)
292
	LIBOBJS="$LIBOBJS regex.o"
Thomas Roessler's avatar
Thomas Roessler committed
293 294
fi

295

296
AC_ARG_WITH(homespool, [  --with-homespool[=FILE]    File in user's directory where new mail is spooled], with_homespool=${withval})
Thomas Roessler's avatar
Thomas Roessler committed
297 298 299 300 301 302 303 304 305
if test x$with_homespool != x; then
	if test $with_homespool = yes; then
		with_homespool=mailbox
	fi
	AC_DEFINE_UNQUOTED(MAILPATH, "$with_homespool")
	AC_DEFINE(HOMESPOOL)
	AC_DEFINE(USE_DOTLOCK)
	mutt_cv_setgid=no
else
306
	AC_ARG_WITH(mailpath, [  --with-mailpath=DIR        Directory where spool mailboxes are located],
Thomas Roessler's avatar
Thomas Roessler committed
307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324
		[mutt_cv_mailpath=$withval],
		[ AC_CACHE_CHECK(where new mail is stored, mutt_cv_mailpath,
			[mutt_cv_mailpath=no
			if test -d /var/mail; then
				mutt_cv_mailpath=/var/mail
			elif test -d /var/spool/mail; then
				mutt_cv_mailpath=/var/spool/mail
			elif test -d /usr/spool/mail; then
				mutt_cv_mailpath=/usr/spool/mail
			elif test -d /usr/mail; then
				mutt_cv_mailpath=/usr/mail
			fi])
		])
	if test $mutt_cv_mailpath = no; then
		AC_MSG_ERROR("Could not determine where new mail is stored.")
	fi
	AC_DEFINE_UNQUOTED(MAILPATH, "$mutt_cv_mailpath")

325
	AC_CACHE_CHECK(if $mutt_cv_mailpath is world writable, mutt_cv_worldwrite, [AC_TRY_RUN([#include <sys/types.h>
Thomas Roessler's avatar
Thomas Roessler committed
326 327 328 329 330 331 332 333 334
#include <sys/stat.h>

int main (int argc, char **argv)
{
	struct stat s;

	stat ("$mutt_cv_mailpath", &s);
	if (s.st_mode & S_IWOTH) exit (0);
	exit (1);
335
}], mutt_cv_worldwrite=yes, mutt_cv_worldwrite=no, mutt_cv_worldwrite=no)])
Thomas Roessler's avatar
Thomas Roessler committed
336 337 338 339 340 341

	mutt_cv_setgid=no
	if test $mutt_cv_worldwrite = yes; then
		AC_DEFINE(USE_DOTLOCK)
	else

342
		AC_CACHE_CHECK(if $mutt_cv_mailpath is group writable, mutt_cv_groupwrite, [AC_TRY_RUN([#include <sys/types.h>
Thomas Roessler's avatar
Thomas Roessler committed
343 344 345 346 347 348 349 350 351
#include <sys/stat.h>

int main (int argc, char **argv)
{
	struct stat s;

	stat ("$mutt_cv_mailpath", &s);
	if (s.st_mode & S_IWGRP) exit (0);
	exit (1);
352
}], mutt_cv_groupwrite=yes, mutt_cv_groupwrite=no, mutt_cv_groupwrite=no)])
Thomas Roessler's avatar
Thomas Roessler committed
353 354 355 356 357 358 359 360 361

		if test $mutt_cv_groupwrite = yes; then
			AC_DEFINE(USE_DOTLOCK)
			AC_DEFINE(USE_SETGID)
			mutt_cv_setgid=yes
		fi
	fi
fi

362
AC_ARG_ENABLE(external_dotlock, [  --enable-external-dotlock  Force use of an external dotlock program],
363
	[mutt_cv_external_dotlock="$enableval"])
364 365 366

if test "x$mutt_cv_setgid" = "xyes" || test "x$mutt_cv_fchdir" = "xno" \
	|| test "x$mutt_cv_external_dotlock" = "xyes"
Thomas Roessler's avatar
Thomas Roessler committed
367
then
368
	AC_DEFINE(DL_STANDALONE)
369
	DOTLOCK_TARGET="mutt_dotlock"
Thomas Roessler's avatar
Thomas Roessler committed
370
else
371
	MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS dotlock.o"
Thomas Roessler's avatar
Thomas Roessler committed
372 373 374 375 376
fi

AC_SUBST(DOTLOCK_TARGET)


377
AC_ARG_WITH(libdir, [  --with-libdir=PATH         Specify where to put arch dependent files],
Thomas Roessler's avatar
Thomas Roessler committed
378 379 380
	[mutt_cv_libdir=$withval],
	[ AC_CACHE_CHECK(where to put architecture-dependent files,
		       mutt_cv_libdir,
381
		[      mutt_cv_libdir="${mutt_cv_prefix}/lib/mutt" ])
Thomas Roessler's avatar
Thomas Roessler committed
382 383 384 385 386
	])

libdir=$mutt_cv_libdir
AC_SUBST(libdir)

387
AC_ARG_WITH(sharedir, [  --with-sharedir=PATH       Specify where to put arch independent files],
Thomas Roessler's avatar
Thomas Roessler committed
388 389 390
	[mutt_cv_sharedir=$withval],
	[ AC_CACHE_CHECK(where to put architecture-independent data files,
		       mutt_cv_sharedir,
Thomas Roessler's avatar
Thomas Roessler committed
391
		[if test -d ${mutt_cv_prefix}/share; then
392
			mutt_cv_sharedir="${mutt_cv_prefix}/share/mutt"
Thomas Roessler's avatar
Thomas Roessler committed
393
		else
Thomas Roessler's avatar
Thomas Roessler committed
394
			mutt_cv_sharedir="$libdir"
Thomas Roessler's avatar
Thomas Roessler committed
395 396 397 398 399
		fi])
	])

sharedir=$mutt_cv_sharedir
AC_SUBST(sharedir)
Thomas Roessler's avatar
Thomas Roessler committed
400

401
AC_ARG_WITH(iconv, [  --with-iconv=DIR           Where libiconv is installed ],
Thomas Roessler's avatar
Thomas Roessler committed
402 403 404 405
       [mutt_cv_iconv=$withval
       if test "$mutt_cv_iconv" != yes -a \
		"$mutt_cv_iconv" != no -a \
		"$mutt_cv_iconv" != /usr; then
406
               CPPFLAGS="-I${mutt_cv_iconv}/include $CPPFLAGS"
407 408 409
               LDFLAGS="-L${mutt_cv_iconv}/lib $LDFLAGS"
       fi])

410
LIBICONV=
Thomas Roessler's avatar
Thomas Roessler committed
411
if test "$mutt_cv_iconv" != no; then
412
AC_CACHE_CHECK(for iconv, mutt_cv_func_iconv,
413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429
    [ mutt_cv_func_iconv=no
      mutt_cv_lib_iconv=no
      AC_TRY_LINK([#include <stdlib.h>
#include <iconv.h>],
	[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);],
	mutt_cv_func_iconv=yes)
      if test "$mutt_cv_func_iconv" = no; then
	mutt_save_LIBS="$LIBS"
	LIBS="$LIBS -liconv"
	AC_TRY_LINK([#include <stdlib.h>
#include <iconv.h>],
	  [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);],
	  mutt_cv_lib_iconv=yes
	  mutt_cv_func_iconv=yes)
	LIBS="$mutt_save_LIBS"
      fi
    ])
430 431 432 433 434
if test "$mutt_cv_func_iconv" = no; then
  AC_MSG_ERROR(Unable to find iconv library)
fi
if test "$mutt_cv_lib_iconv" = yes; then
  LIBICONV="-liconv"
435
fi
Thomas Roessler's avatar
Thomas Roessler committed
436 437
AC_DEFINE(HAVE_ICONV)
fi
438

439 440
AC_SUBST(LIBICONV)

441 442 443 444
dnl (1) Some implementations of iconv won't convert from UTF-8 to UTF-8.
dnl (2) In glibc-2.1.2 and earlier there is a bug that messes up ob and
dnl     obl when args 2 and 3 are 0 (fixed in glibc-2.1.3).
AC_CACHE_CHECK([whether this iconv is good enough], mutt_cv_iconv_good,
445 446 447 448 449 450 451 452
	mutt_save_LIBS="$LIBS"
	LIBS="$LIBS $LIBICONV"
	AC_TRY_RUN([
#include <iconv.h>
int main()
{
  iconv_t cd;
changequote(, )dnl
453
  char buf[4];
454
changequote([, ])dnl
455 456 457
  char *ob;
  size_t obl;
  ob = buf, obl = sizeof(buf);
Thomas Roessler's avatar
Thomas Roessler committed
458 459 460 461
  return ((cd = iconv_open("UTF-8", "UTF-8")) != (iconv_t)(-1) &&
	  (iconv(cd, 0, 0, &ob, &obl) ||
	   !(ob == buf && obl == sizeof(buf)) ||
	   iconv_close(cd)));
462 463
}
		],
464 465 466
		mutt_cv_iconv_good=yes,
		mutt_cv_iconv_good=no,
		mutt_cv_iconv_good=yes)
467
	LIBS="$mutt_save_LIBS")
468
if test "$mutt_cv_iconv_good" = no; then
469 470
  AC_MSG_ERROR(Try using libiconv instead)
fi
471

472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501
dnl This is to detect implementations such as the one in glibc-2.1,
dnl which always convert exactly but return the number of characters
dnl converted instead of the number converted inexactly.
AC_CACHE_CHECK([whether iconv is non-transcribing], mutt_cv_iconv_nontrans,
	mutt_save_LIBS="$LIBS"
	LIBS="$LIBS $LIBICONV"
	AC_TRY_RUN([
#include <iconv.h>
#include <string.h>
int main()
{
  iconv_t cd;
  const char *ib;
  char *ob;
  size_t ibl, obl;
  const char *s = "\304\211";
changequote(, )dnl
  char t[3];
changequote([, ])dnl
  ib = s, ibl = 2, ob = t, obl = 3;
  return ((cd = iconv_open("UTF-8", "UTF-8")) == (iconv_t)(-1) ||
	  iconv(cd, &ib, &ibl, &ob, &obl));
}
		],
		mutt_cv_iconv_nontrans=no,
		mutt_cv_iconv_nontrans=yes,
		mutt_cv_iconv_nontrans=no)
	LIBS="$mutt_save_LIBS")
if test "$mutt_cv_iconv_nontrans" = yes; then
  AC_DEFINE(ICONV_NONTRANS, 1)
502
else
503
  AC_DEFINE(ICONV_NONTRANS, 0)
504 505
fi

506
AC_ARG_WITH(docdir, [  --with-docdir=PATH         Specify where to put the documentation],
507 508 509 510 511 512 513 514 515 516 517 518 519 520
	[mutt_cv_docdir=$withval],
	[ AC_CACHE_CHECK(where to put the documentation,
		       mutt_cv_docdir,
		[if test x$prefix = xNONE; then
			mutt_cv_prefix=$ac_default_prefix
		else
			mutt_cv_prefix=$prefix
		fi
		mutt_cv_docdir=$mutt_cv_prefix/doc/mutt])
	])

docdir=$mutt_cv_docdir
AC_SUBST(docdir)

Thomas Roessler's avatar
Thomas Roessler committed
521
if test x$mutt_cv_setgid = xyes; then
522
	DOTLOCK_GROUP='mail'
Thomas Roessler's avatar
Thomas Roessler committed
523
	DOTLOCK_PERMISSION=2755
Thomas Roessler's avatar
Thomas Roessler committed
524
else
Thomas Roessler's avatar
Thomas Roessler committed
525 526
	DOTLOCK_GROUP=''
	DOTLOCK_PERMISSION=755
Thomas Roessler's avatar
Thomas Roessler committed
527
fi
Thomas Roessler's avatar
Thomas Roessler committed
528 529
AC_SUBST(DOTLOCK_GROUP)
AC_SUBST(DOTLOCK_PERMISSION)
Thomas Roessler's avatar
Thomas Roessler committed
530 531 532 533 534 535

AC_ARG_WITH(domain, [  --with-domain=DOMAIN       Specify your DNS domain name ],
	[if test $withval != yes; then
		AC_DEFINE_UNQUOTED(DOMAIN, "$withval")
	fi])

536 537 538 539
need_socket="no"

dnl -- socket dependencies --

540
AC_ARG_ENABLE(pop,  [  --enable-pop               Enable POP3 support],
541 542 543
[	if test x$enableval = xyes ; then
		AC_DEFINE(USE_POP)
		MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pop.o"
544
		need_socket="yes"
545
		need_md5="yes"
546
	fi
Thomas Roessler's avatar
Thomas Roessler committed
547
])
548

Thomas Roessler's avatar
Thomas Roessler committed
549
AC_ARG_ENABLE(imap, [  --enable-imap              Enable IMAP support],
550 551 552 553 554
[	if test x$enableval = xyes ; then
		AC_DEFINE(USE_IMAP)
		LIBIMAP="-Limap -limap"
		LIBIMAPDEPS="\$(top_srcdir)/imap/imap.h imap/libimap.a"
		need_imap="yes"
555
		need_socket="yes"
556
		need_md5="yes"
557
	fi
Thomas Roessler's avatar
Thomas Roessler committed
558
])
559
AM_CONDITIONAL(BUILD_IMAP, test x$need_imap = xyes)
Thomas Roessler's avatar
Thomas Roessler committed
560

561 562 563 564 565 566 567 568 569 570 571 572
dnl -- end socket dependencies --

if test "$need_socket" = "yes"
then
	AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))
	AC_CHECK_FUNC(gethostent, , AC_CHECK_LIB(nsl, gethostent))
	AC_DEFINE(USE_SOCKET)
	MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS account.o mutt_socket.o"
fi

dnl -- imap dependencies --

573
AC_ARG_WITH(gss,    [    --with-gss[=DIR]         Compile in GSSAPI authentication for IMAP],
574
	[
575 576 577 578 579
	if test "$need_imap" != "yes"
        then
          AC_MSG_ERROR([GSS support is only for IMAP, but IMAP is not enabled])
        fi

580 581 582 583 584 585 586 587
	if test "$with_gss" != "no"
	then
	  if test "$with_gss" != "yes"
	  then
	    CPPFLAGS="$CPPFLAGS -I$with_gss/include"
	    LDFLAGS="$LDFLAGS -L$with_gss/lib"
	  fi

588 589 590
  	  saved_LIBS="$LIBS"
          gss_type="none"

591
          dnl New MIT kerberos V support
592 593 594 595 596 597 598 599 600 601 602 603 604
          AC_CHECK_LIB(gssapi_krb5, gss_init_sec_context, [
            gss_type="MIT",
            MUTTLIBS="$MUTTLIBS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err"
            ],, -lkrb5 -lk5crypto -lcom_err)

          dnl Heimdal kerberos V support
          if test x$gss_type = xnone
          then
            AC_CHECK_LIB(gssapi, gss_init_sec_context, [
              gss_type="Heimdal",
              MUTTLIBS="$MUTTLIBS -lgssapi -lkrb5 -ldes -lasn1 -lroken"
              MUTTLIBS="$MUTTLIBS -lcrypt -lcom_err"
              AC_DEFINE(HAVE_HEIMDAL)
605 606 607 608 609 610 611 612 613 614 615 616 617 618 619
              ],, -lkrb5 -ldes -lasn1 -lroken -lcrypt -lcom_err)
          fi

	  dnl Old MIT Kerberos V
	  dnl Note: older krb5 distributions use -lcrypto instead of
	  dnl -lk5crypto, which collides with OpenSSL.  One way of dealing
	  dnl with that is to extract all objects from krb5's libcrypto
	  dnl and from openssl's libcrypto into the same directory, then
	  dnl to create a new libcrypto from these.
          if test x$gss_type = xnone
          then
            AC_CHECK_LIB(gssapi_krb5, g_order_init, [
              gss_type="OldMIT",
              MUTTLIBS="$MUTTLIBS -lgssapi_krb5 -lkrb5 -lcrypto -lcom_err"
              ],, -lkrb5 -lcrypto -lcom_err)
620 621 622 623 624 625 626 627 628 629 630 631 632
          fi

          if test x$gss_type = xnone
          then
            AC_CACHE_SAVE
            AC_MSG_ERROR([GSSAPI support not found])
          fi

  	  LIBS="$saved_LIBS"
  	  AC_DEFINE(USE_GSS)
            need_gss="yes"
  	fi

633
])
634
AM_CONDITIONAL(USE_GSS, test x$need_gss = xyes)
635

636
AC_ARG_WITH(ssl, [    --with-ssl[=PFX]         Compile in SSL socket support for POP/IMAP],
637
[	if test "$with_ssl" != "no"
638
	then
639 640
	  if test "$need_socket" != "yes"; then
	   AC_MSG_ERROR([SSL support is only useful with POP or IMAP support])
641 642
	  fi

643 644
	  if test "$with_ssl" != "yes"
	  then
645 646
	   LDFLAGS="$LDFLAGS -L$withval/lib"
	   CPPFLAGS="$CPPFLAGS -I$withval/include"
647 648 649 650 651
	  fi	
	  saved_LIBS="$LIBS"

	  AC_CHECK_LIB(crypto, X509_new,, AC_MSG_ERROR([Unable to find SSL library]))
	  AC_CHECK_LIB(ssl, SSL_new,, AC_MSG_ERROR([Unable to find SSL library]), -lcrypto)
652 653 654

	  AC_CHECK_FUNCS(RAND_status RAND_egd)

655 656 657
	  AC_DEFINE(USE_SSL)
	  LIBS="$saved_LIBS"
	  MUTTLIBS="$MUTTLIBS -lssl -lcrypto"
658
	  MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_ssl.o"
659
	  need_ssl=yes
660 661 662 663 664

          dnl Some systems avoid certain patent-encumbered SSL routines
          AC_CHECK_HEADER(openssl/rc5.h,,AC_DEFINE(NO_RC5))
          AC_CHECK_HEADER(openssl/idea.h,,AC_DEFINE(NO_IDEA))
          AC_CHECK_HEADER(openssl/rsa.h,,AC_DEFINE(NO_RSA))
665
	fi
666 667 668
])
AM_CONDITIONAL(USE_SSL, test x$need_ssl = xyes)

669 670
dnl -- end imap dependencies --

671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695
AC_ARG_WITH(sasl, [  --with-sasl[=DIR]          Use Cyrus SASL library for POP/IMAP authentication],
	[
	if test "$need_socket" != "yes"
	then
	  AC_MSG_ERROR([SASL support is only useful with POP or IMAP support])
	fi

	if test "$with_sasl" != "no"
	then
	  if test "$with_sasl" != "yes"
	  then
	    CPPFLAGS="$CPPFLAGS -I$with_sasl/include"
	    LDFLAGS="$LDFLAGS -L$with_sasl/lib"
	  fi

	  saved_LIBS="$LIBS"

	  AC_CHECK_LIB(sasl, sasl_client_init,,
	    AC_MSG_ERROR([could not find libsasl]),)

	  MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_sasl.o"
	  MUTTLIBS="$MUTTLIBS -lsasl"
	  LIBS="$saved_LIBS"
	  AC_DEFINE(USE_SASL)
	  need_sasl=yes
696
	  need_md5=no
697 698 699 700
	fi
	])
AM_CONDITIONAL(USE_SASL, test x$need_sasl = xyes)

701 702 703 704 705
if test "$need_md5" = "yes"
then
	MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS md5c.o"
fi

706 707
dnl -- end socket --

708
AC_ARG_ENABLE(debug, [  --enable-debug             Enable debugging support],
709 710 711 712
	[ if test x$enableval = xyes ; then
		AC_DEFINE(DEBUG)
	  fi
	 ])
713

Thomas Roessler's avatar
Thomas Roessler committed
714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732
AC_ARG_ENABLE(flock, [  --enable-flock             Use flock() to lock files],
	[if test $enableval = yes; then
		AC_DEFINE(USE_FLOCK)
	fi])

mutt_cv_fcntl=yes
AC_ARG_ENABLE(fcntl, [  --disable-fcntl            Do NOT use fcntl() to lock files ],
	[if test $enableval = no; then mutt_cv_fcntl=no; fi])

if test $mutt_cv_fcntl = yes; then
	AC_DEFINE(USE_FCNTL)
fi

mutt_cv_warnings=yes
AC_ARG_ENABLE(warnings, [  --disable-warnings         turn off compiler warnings (not recommended)],
[if test $enableval = no; then
	mutt_cv_warnings=no
fi])

733
if test x$GCC = xyes -a $mutt_cv_warnings = yes; then
Thomas Roessler's avatar
Thomas Roessler committed
734 735 736 737 738 739 740 741 742 743 744 745 746
	CFLAGS="-Wall -pedantic $CFLAGS"
fi

AC_ARG_ENABLE(nfs-fix, [  --enable-nfs-fix           Work around an NFS with broken attributes caching ],
	[if test x$enableval = xyes; then
                AC_DEFINE(NFS_ATTRIBUTE_HACK)
        fi])

AC_ARG_ENABLE(buffy-size, [  --enable-buffy-size        Use file size attribute instead of access time ],
	[if test x$enableval = xyes; then
                AC_DEFINE(BUFFY_SIZE)
        fi])

747
AC_ARG_ENABLE(mailtool, [  --enable-mailtool          Enable Sun mailtool attachments support ],
748 749 750 751
	[if test x$enableval = xyes; then
                AC_DEFINE(SUN_ATTACHMENT)
        fi])

Thomas Roessler's avatar
Thomas Roessler committed
752 753 754 755 756 757 758 759 760 761
AC_ARG_ENABLE(locales-fix, [  --enable-locales-fix       The result of isprint() is unreliable ],
	[if test x$enableval = xyes; then
                AC_DEFINE(LOCALES_HACK)
        fi])

AC_ARG_WITH(exec-shell, [  --with-exec-shell=SHELL    Specify alternate shell (ONLY if /bin/sh is broken)],
	[if test $withval != yes; then
		AC_DEFINE_UNQUOTED(EXECSHELL, "$withval")
	fi])

762
AC_ARG_ENABLE(exact-address, [  --enable-exact-address     Enable regeneration of email addresses],
Thomas Roessler's avatar
Thomas Roessler committed
763 764 765 766
	[if test $enableval = yes; then
		AC_DEFINE(EXACT_ADDRESS)
	fi])

767
AC_SUBST(MUTTLIBS)
768
AC_SUBST(MUTT_LIB_OBJECTS)
769
AC_SUBST(LIBIMAP)
770
AC_SUBST(LIBIMAPDEPS)
771

772
MUTT_AM_GNU_GETTEXT
773
CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/intl"
774

775
MUTTLOCALEDIR=$mutt_cv_prefix/$DATADIRNAME/locale
776 777 778
AC_SUBST(MUTTLOCALEDIR)
AC_DEFINE_UNQUOTED(MUTTLOCALEDIR, "$MUTTLOCALEDIR")

779 780 781 782 783 784 785 786 787
AC_CHECK_HEADERS(wchar.h)

AC_CACHE_CHECK([for wchar_t], mutt_cv_wchar_t,
	AC_TRY_COMPILE([
#include <stddef.h>
#include <stdlib.h>
#ifdef HAVE_WCHAR_H
#include <wchar.h>
#endif
788 789 790 791
		],
		[ wchar_t wc; return 0; ],
		mutt_cv_wchar_t=yes,
		mutt_cv_wchar_t=no))
792 793 794 795 796

if test "$mutt_cv_wchar_t" = no; then
	AC_DEFINE(wchar_t, int)
fi

797 798 799 800 801 802 803
AC_CACHE_CHECK([for wint_t], mutt_cv_wint_t,
	AC_TRY_COMPILE([
#include <stddef.h>
#include <stdlib.h>
#ifdef HAVE_WCHAR_H
#include <wchar.h>
#endif
804 805 806 807
		],
		[ wint_t wc; return 0; ],
		mutt_cv_wint_t=yes,
		mutt_cv_wint_t=no))
808 809 810 811 812

if test "$mutt_cv_wint_t" = no; then
	AC_DEFINE(wint_t, int)
fi

813 814 815 816 817 818 819
AC_CACHE_CHECK([for mbstate_t], mutt_cv_mbstate_t,
	AC_TRY_COMPILE([
#include <stddef.h>
#include <stdlib.h>
#ifdef HAVE_WCHAR_H
#include <wchar.h>
#endif
820 821 822 823
		],
		[ mbstate_t s; return 0; ],
		mutt_cv_mbstate_t=yes,
		mutt_cv_mbstate_t=no))
824 825 826 827 828 829 830 831 832 833

if test "$mutt_cv_mbstate_t" = no; then
	AC_DEFINE(mbstate_t, int)
fi

wc_funcs=maybe
AC_ARG_WITH(wc-funcs, [  --without-wc-funcs         Do not use the system's wchar_t functions],
	wc_funcs=$withval)

if test "$wc_funcs" != yes -a "$wc_funcs" != no; then
834 835 836 837
	AC_CACHE_CHECK([for wchar_t functions], mutt_cv_wc_funcs,
		mutt_cv_wc_funcs=no
		AC_TRY_LINK([
#define _XOPEN_SOURCE 1
838 839 840 841
#include <stddef.h>
#include <stdlib.h>
#ifdef HAVE_WCHAR_H
#include <wchar.h>
842 843
#endif],
			[mbrtowc(0, 0, 0, 0); wctomb(0, 0); wcwidth(0);],
844 845 846 847 848 849 850 851
			mutt_cv_wc_funcs=yes))
	wc_funcs=$mutt_cv_wc_funcs
fi

if test $wc_funcs = yes; then
	AC_DEFINE(HAVE_WC_FUNCS)
fi

852 853 854 855 856 857 858 859 860
AC_CACHE_CHECK([for nl_langinfo and CODESET], mutt_cv_langinfo_codeset,
  [AC_TRY_LINK([#include <langinfo.h>],
    [char* cs = nl_langinfo(CODESET);],
    mutt_cv_langinfo_codeset=yes,
    mutt_cv_langinfo_codeset=no)])
if test $mutt_cv_langinfo_codeset = yes; then
  AC_DEFINE(HAVE_LANGINFO_CODESET)
fi

861 862 863 864 865 866 867 868 869
AC_CACHE_CHECK([for nl_langinfo and YESEXPR], mutt_cv_langinfo_yesexpr,
  [AC_TRY_LINK([#include <langinfo.h>],
    [char* cs = nl_langinfo(YESEXPR);],
    mutt_cv_langinfo_yesexpr=yes,
    mutt_cv_langinfo_yesexpr=no)])
if test $mutt_cv_langinfo_yesexpr = yes; then
  AC_DEFINE(HAVE_LANGINFO_YESEXPR)
fi

870 871
AC_OUTPUT(Makefile intl/Makefile m4/Makefile dnl
	po/Makefile.in doc/Makefile contrib/Makefile dnl
872
	muttbug.sh dnl
873
	imap/Makefile dnl
874
	Muttrc.head)