If you are building from GIT, run the script

./autogen.sh

first, to make sure that you have all the necessary maintainer tools
are installed and to build the actual configuration files.  If you
have just checked out from GIT, you should add the option "--force" to
autogen.sh so that meta data is noticed by autom4te.cache.  Then run

./configure --enable-maintainer-mode

followed by the usual make.

If autogen.sh complains about insufficient versions of the required
tools, or the tools are not installed, you may use environment
variables to override the default tool names:

 AUTOMAKE_SUFFIX  is used as a suffix for all tools from the automake
                  package.  For example
                     AUTOMAKE_SUFFIX="-1.7" ./autogen.sh
                  uses "automake-1.7" and "aclocal-1.7.
 AUTOMAKE_PREFIX  is used as a prefix for all tools from the automake
                  page and may be combined with AUTOMAKE_SUFFIX. e.g.:
                    AUTOMAKE_PREFIX=/usr/foo/bin ./autogen.sh
                  uses "automake" and "aclocal" in the /usr/foo/bin
                  directory.
 AUTOCONF_SUFFIX  is used as a suffix for all tools from the automake
                  package
 AUTOCONF_PREFIX  is used as a prefix for all tools from the automake
                  package
 GETTEXT_SUFFIX   is used as a suffix for all tools from the gettext
                  package
 GETTEXT_PREFIX   is used as a prefix for all tools from the gettext
                  package

It is also possible to use the variable name AUTOMAKE, AUTOCONF,
ACLOCAL, AUTOHEADER, GETTEXT and MSGMERGE to directly specify the name
of the programs to run.  It is however better to use the suffix and
prefix forms as described above because that does not require
knowledge about the actual tools used by autogen.sh.


Please don't use autopoint, libtoolize or autoreconf unless you are
the current maintainer and want to update the standard configuration
files.  All those files should be in GIT and only updated manually
if the maintainer decides that newer versions are required.  The
maintainer should also make sure that the required version of automake
et al. are properly indicated at the top of configure.ac and take care
to copy the files and not merely use symlinks.
