Supported platforms
===================

Mutt has been reported to compile and run under the following Unix operating
systems:

	AIX
	BSDI
	Convex
	Data General Unix (DG/UX)
	Digital Unix (OSF/1)
	DYNIX/ptx
	FreeBSD
	HP-UX
	IRIX
	Linux
	Mac OS X
	Atari MiNT
	MkLinux
	NetBSD
	OpenBSD
	QNX
	SCO Unix 3.2v4/5
	Solaris
	SunOS
	Ultrix
	UnixWare

- If you are building from Git, or if you are changing parts of mutt,
  particularly the build system, do read doc/devel-notes.txt.

- A C99 compiler (such as GCC) is required.

- A C99 compliant libc is also required, starting with Mutt 2.1.0.
  This means very old systems will likely not compile or work correctly.

- You must also have a SysV compatible curses library, or you must
  install either

	GNU ncurses, ftp://prep.ai.mit.edu/pub/gnu/
  or
	S-Lang, ftp://space.mit.edu/pub/davis/slang/

- Mutt needs an implementation of the iconv API for character set
  conversions.  A free one can be found under the following URL:

	http://www.gnu.org/software/libiconv/

- For building the manual, mutt needs the DocBook XSL stylesheets
  as well as the DocBook DTD as of version 4.2 installed locally.
  For details, please see the section "Generating Mutt Documentation
  From Source" in doc/devel-notes.txt.


Installation
============

Installing Mutt is rather painless through the use of the GNU
autoconf package.  Simply untar the Mutt distribution, and run the
``configure'' script.  If you have obtained the distribution from
the Git repository, run the ``prepare'' script with the same command
line parameters you would pass to configure.  It will set up mutt's
build environment and add the files which are present in the tar
balls, but not in the Git repository.

In most cases, configure will automatically determine everything it
needs to know in order to compile.  However, there are a few options
to ``configure'' to help it out, or change the default behavior.
To view them all, type ``configure --help''.  Some of the important
options are:

--prefix=DIR
	install Mutt in DIR instead of /usr/local

--enable-autocrypt
        enable autocrypt 1.1 <https://autocrypt.org/> support.
        Requires sqlite3 (via the --with-sqlite3 option).

--enable-gpgme
        enable GPGME crypt backend support.

--enable-sidebar
	Build with sidebar functionality. The sidebar can show a list of all
	your mailboxes at... *drums roll* ...the side. Visibility of the
	sidebar can be turned on and off as desired.

--enable-compressed
        enable compressed folders support.

--enable-pop
	enable POP3 support

--enable-imap
	enable IMAP support

--enable-smtp
	enable built in SMTP client support

--enable-debug
        enable debug flag '-d' support.

--enable-flock
	use flock() to lock files.

--disable-fcntl
	by default, Mutt uses fcntl() to lock files.  Over NFS this can
	result in poor performance on read/write.  Note that using this
	option could be dangerous if dotlocking is also disabled.

--disable-filemonitor
        disables inotify support for faster local mailbox monitoring.
        The filemonitor option is only available on Linux.

--enable-nfs-fix
	some implementations of NFS do not always write the
	atime/mtime of small files.  This means that Mutt's ``mailboxes''
	feature does not always work properly, as it uses these
	attributes to work out whether the file has new mail.  This
	option enables a workaround to this bug.

--enable-locales-fix
	on some systems, the result of isprint() can't be used reliably
	to decide which characters are printable, even if you set the
	LANG environment variable.  If you set this option, Mutt will
	assume all characters in the ISO-8859-* range are printable.  If
	you leave it unset, Mutt will attempt to use isprint() if either
	of the environment variables LANG, LC_ALL or LC_CTYPE is set,
	and will revert to the ISO-8859-* range if they aren't.
	If you need --enable-locales-fix then you will probably need
	--without-wc-funcs too. However, on a correctly configured
	modern system you shouldn't need either (try setting LANG,
	LC_ALL or LC_CTYPE instead).

--enable-exact-address
	By default, Mutt will rewrite all addresses in the form
		Personal Name <user@host.domain>
	regardless of the input.  By enabling this option, Mutt will write
	addresses in the same form they are parsed.  NOTE: this requires
	significantly more memory.

--enable-hcache
        Enable header caching support.  If no backend library is
        specified via a --with option (e.g. --with-kyotocabinet), Mutt
        will scan in the order: kyotocabinet, tokyocabinet, lmdb,
        qdbm, gdbm, bdb.  To skip scanning one or more of these
        libraries, use the corresponding --without option.

--disable-nls
	This switch disables mutt's native language support.

--disable-doc
        Turns off building the Mutt manual.  This can be helpful if you
        don't have all the DocBook dependencies installed.

--with-curses=DIR
	use the curses lib in DIR/lib.  If you have ncurses, ``configure''
	will automatically look in /usr/include/ncurses for the include
	files.

--with-slang[=DIR]
	use the S-Lang library instead of ncurses.  This library seems to
	work better for some people because it is less picky about proper
	termcap entries than ncurses.  It is recommended that you use at
	*least* version 0.99-38 with Mutt.

--with-sqlite3[=DIR]
	use the sqlite3 lib in DIR/lib.  This is currently only needed
	by the --enable-autocrypt option.

--with-mailpath=DIR
	specify where the spool mailboxes are located on your system

--with-homespool[=FILE]
	treat file in the user's home directory as the spool mailbox.  Note
	that this is *not* the full pathname, but relative to the user's
	home directory.  Defaults to "mailbox" if FILE is not specified.

--with-gss[=PFX]
	Enable GSSAPI authentication to IMAP servers. This should work with
	both MIT and Heimdal GSSAPI implementations - others haven't been
	tested. Note that the Cyrus SASL library also supports GSSAPI,
	and may be able to encrypt your session with it - you should use
	SASL instead if you can.

--with-ssl[=PFX]
	enable SSL support with IMAP and POP. SSL support requires you to
	have OpenSSL headers and libraries properly installed before
	compiling.  If the OpenSSL headers and libraries are not in the
	default system pats you can use the optional PFX argument to
	define the root directory of your installation.  The libraries
	are then expected to be found in PFX/lib and headers in
	PFX/include/openssl.

--with-sasl[=PFX]
	Use the Cyrus SASL library for IMAP or POP authentication. This
	library provides generic support for several authentication methods,
	and more may be added by the system administrator without recompiling
	mutt. SASL may also be able to encrypt your mail session even if
	SSL is not available.

--with-bundled-regex
	use bundled GNU regex instead of local regexp routines.  Many systems
	don't have the POSIX compliant regcomp/regexec/regfree
	routines, so this provides a way to support them.

--without-wc-funcs
	by default Mutt uses the functions mbrtowc(), wctomb() and
	wcwidth() provided by the system, when they are available.
	With this option Mutt will use its own version of those
	functions, which should work with 8-bit display charsets, UTF-8,
	euc-jp or shift_jis, even if the system doesn't normally support
	those multibyte charsets.

	If you find Mutt is displaying non-ascii characters as octal
	escape sequences (e.g. \243), even though you have set LANG and
	LC_CTYPE correctly, then you might find you can solve the problem
	with either or both of --enable-locales-fix and --without-wc-funcs.

--with-exec-shell=SHELL
	on some versions of unix, /bin/sh has a bug that makes using emacs
	with mutt very difficult.  If you have the problem that whenever
	you press control-G in emacs, mutt and emacs become very confused,
	you may want to try using a Bourne-derived shell other than
	/bin/sh here.  Some shells that may work are bash, zsh, and ksh.
	C shells such as csh and tcsh will almost certainly not work right.
	Note that this option is unrelated to what shell mutt gives you
	when you press '!'.  Only use this option to solve the above problem,
	and only specify one of the above shells as its argument.

	(If you encounter this problem with your platform's native
	Bourne shell, please send a short report to mutt-dev@mutt.org,
	so a short note on this topic can be added to the Platform notes
	section below.)

Once ``configure'' has completed, simply type ``make install.''

Mutt should compile cleanly (without errors) and you should end up with a
binary called ``mutt.''  If you get errors about undefined symbols like
A_NORMAL or KEY_MIN, then you probably don't have a SysV compliant curses
library.  You should install either ncurses or S-Lang (see above), and then
run the ``configure'' script again.

Please note that "VPATH" builds currently only work with GNU make (gmake).



Character set support
=====================

Mutt no longer contains functions for doing character set conversion.
Instead, it expects the iconv functions (iconv_open, iconv,
iconv_close) to be provided. Most up-to-date systems provide these
functions, often as part of the C library. If you are installing Mutt
on a system which does not have them, it is recommended that you
install Bruno Haible's portable libiconv library, which you can obtain
from:

	       ftp://ftp.ilog.fr/pub/Users/haible/gnu/

Even if your system does provide the iconv functions, you might want
to install libiconv, as some systems provide only a very limited
version of iconv.


If you decide to use your system's iconv implementation, you may
need to tell mutt about implementation-defined names for some
character sets.  Sample configuration files for various systems can
be found in the directory contrib/iconv/ in this source
distribution, and will be installed in the samples/iconv directory
as part of mutt's documentation.

In order to use these sample configuration files, just put a line
like

     source /usr/local/doc/mutt/samples/iconv/iconv.osf1-4.0d.rc

into your system's global Muttrc, which normally resides in /etc or
/usr/local/etc.


If you really want to, you can configure Mutt --disable-iconv, but
there will then be no character set conversion.


Platform Notes
==============

All platforms

	There is a bug in most (if not all) S-Lang versions which
	prevents the Meta key from working with mutt.  A patch can
	be found in the file contrib/patch.slang-1.2.2.keypad.1 in
	this mutt distribution.


Solaris 2.4

	The system regcomp() and regexec() routines are very badly
	broken.  This should be automatically detected by the
	configure script.  If not, use the --with-regex switch when
	configuring mutt.

	We are also hearing reports that Solaris 2.4's NLS libraries
	dump core with mutt when using a locale different from "C".
	Use the --with-included-gettext configuration switch if you
	experience this problem.

	Color does not work right with Solaris curses.  You will
	have to compile with either ncurses or slang to get working
	color support.

Solaris 2.6

	There are reports that mutt behaves strangely when linked with
	the system regexp library.  Please use the --with-regex switch
	when configuring on this platform.

 	For the real fix, applying Sun patches # 105490-05 (linker
	patch) and # 105210-17 (libc and malloc patch) from
	sunsolve.sun.com has been reported to stop these problems
	from occurring.

Linux

	On recent Linux systems, flock() and fcntl() locks don't mix.  If
	you use the --enable-flock switch on such systems, be sure to
	give the --disable-fcntl argument as well.

Sparc Linux

	Redhat 4.2 Sparc users reported problems with some system
	include files when building mutt.  Configuring mutt with the
	--disable-warnings switch is said to help against this problem.


Digital Unix (OSF/1)

	The system curses library is said to be badly broken.  Use GNU
	ncurses or SLang instead.
