This is Automake, a Makefile generator.  It aims to be portable and
to conform to the GNU Coding Standards for Makefile variables and
targets.

See the INSTALL file for detailed information about how to configure
and install Automake.

Automake is a Perl script.  The input files are called Makefile.am.
The output files are called Makefile.in; they are intended for use
with Autoconf.  Automake requires certain things to be done in your
configure.ac.

Automake comes with extensive documentation; please refer to it for
more details about its purpose, features, and usage patterns.

This package also includes the "aclocal" program, whose purpose is
to generate an 'aclocal.m4' based on the contents of 'configure.ac'.
It is useful as an extensible, maintainable mechanism for augmenting
autoconf.  It is intended that other package authors will write m4
macros which can be automatically used by aclocal.  The documentation
for aclocal is currently found in the Automake manual.

Automake has a test suite.  Use "make check" to run it.  For more
information, see the file t/README.

Automake has a page on the web.  See:

	https://www.gnu.org/software/automake/

Automake also has three mailing lists:

  * automake@gnu.org
    For general discussions of Automake and its interactions with other
    configuration/portability tools like Autoconf or Libtool.

  * bug-automake@gnu.org
    Where to send bug reports and feature requests.

  * automake-patches@gnu.org
    Where to send patches, and discuss the automake development process
    and the design of new features.

To obtain more information about these list, or to subscribe to them,
refer to <https://www.gnu.org/software/automake/#mailinglists>

New releases are announced to autotools-announce@gnu.org.  If you want to
be informed, subscribe to that list by following the instructions at
<https://lists.gnu.org/mailman/listinfo/autotools-announce>.

For any copyright year range specified as YYYY-ZZZZ in this package,
that the range specifies every single year in that closed interval.

-----

Copyright (C) 1994-2012 Free Software Foundation, Inc.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
