The common case

	./autogen.sh && ./configure && make

	If something fails read the last lines. Typical reason to
	fail is a missing dependency, such as libtool or gettext.

Autotools

	`./autogen.sh' generates all files needed to compile
	and install the code (run it after checkout from git)

	`make distclean' removes all unnecessary files, but the
	code can still be recompiled with "./configure; make"

	`make dist-gzip' (or -bzip2) creates a tarball that can
	be configured and compiled without running `./autogen.sh'

Compiling

	Use SUID_CFLAGS and SUID_LDFLAGS when you want to define
	special compiler options for typical suid programs, for
	example:

	./configure SUID_CFLAGS="-fpie" SUID_LDFLAGS="-pie"

	The SUID_* feature is currently supported for chfn, chsh,
	newgrp, su, write, mount, and umount.

	Use DAEMON_CFLAGS and DAEMON_LDFLAGS when you want to define
	special compiler options for daemons; supported for uuidd.

	Use SOLIB_CFLAGS and SOLIB_LDFLAGS when you want to define
	special compiler options for shared libraries; supported for
	libmount, libblkid and libuuid.

	FIXME: add notes about klib and uClib.

Static linking

	Use --enable-static-programs[=LIST] configure option when
	you want to use statically linked programs.

	Note, mount(8) uses get{pw,gr}nam() and getpwuid()
	functions for translation from username and groupname to
	UID and GID. These functions could be implemented by
	dynamically loaded independent modules (NSS) in your libc
	(e.g. glibc). These modules are not statically linked to
	mount(8) and mount.static is still using dlopen() like
	dynamically linked version.

	The translation won't work in environment where NSS
	modules are not installed.

	For example normal system (NSS modules are available):

		# ./mount.static -v -f -n -ouid=kzak /mnt/foo
		LABEL=/mnt/foo on /mnt/foo type vfat (rw,uid=500)
							 ^^^^^^^
	and without NSS modules:

		# chroot . ./mount.static -v -f -n -ouid=kzak /mnt/win
		LABEL=/mnt/win on /mnt/win type vfat (rw,uid=kzak)
							 ^^^^^^^^
