============================ WARNING! =====================================
==                                                                       ==
==   This is *not* mainstream Automake, but rather "Automake-NG": an     ==
==   experimental, non-hostile fork of it.  Automake-NG mostly differs   ==
==   from mainstream Automake in that its generated makefiles only       ==
==   target GNU make rather than portable make.                          ==
==                                                                       ==
===========================================================================

Reference to the thread kicking off this project:

 "Could automake-generated Makefiles required GNU make?"
 <http://lists.gnu.org/archive/html/automake/2011-11/msg00017.html>

with partial consensus reached here:

 <http://lists.gnu.org/archive/html/automake/2011-11/msg00088.htm>

The discussion continued also in a thread on the gnu-prog-discuss list,
which unfortunately is a private list dedicated to GNU maintainers, and
thus for which no public archive is available.  The title of the thread
was "Automire: a non-hostile forking of GNU automake", and it was started
by me (Stefano Lattarini) on 2011-12-01.

-*-*-

The name "Automake-NG" for this automake variant has two reasons, which
are motivated by two apparently incompatible (but in fact only orthogonal)
concerns:

  1. Paolo Bonzini pointed out that a backward-incompatible (even if only
     partly so) "Automake 2" might propagate the past bad reputation of
     the autotools w.r.t. backward-incompatibility.  So the new project
     should be a fork of automake, with a name of its own.  I proposed
     "Automire" as the name, to give credit to the Quagmire attempt,
     while retaining the `am' namespace.  But then ...

  2. Stefan Monnier noted (on the non-public gnu-prog-discuss list):

     ``From where I stand, if you want the product to be successful,
       you'll want its heritage to be very clear from the name.  To me
       "automire" doesn't remind of "automake" at all.  To someone aware
       of Quagmire, it may sound like "automatically mired in Quagmire's
       problems".   I understand that if Automake is still live on, yours
       can't just be "Automake 3.0", but it can be "automake-ng"''

    to which I (Stefano Lattarini) replied:

    ``You might be right about this, especially considering that the new
      project is planned to have two phases, in the first one of which it
      will remain very similar to automake in APIs and features (and,
      sadly, limitations).  And `automake-ng' sounds like a good name
      -- "ng" as in "New Generation", or more modestly, as in "Needs
      GNUmake" ;-)''

-*-*-

From a private discussion with Karl Berry (slightly edited, and private as
in "it hasn't taken place on any list, neither public nor non-public"):

  Karl Berry wrote:
  > Regardless of how it is developed (multiple git repos or whatever,
  > that's a completely independent question), I continue to believe that
  > the best outcome would be an "automake-2" that targets GNU make and is
  > "mostly" compatible, for whatever definition of "mostly" makes sense.
  >
  OK ... [SNIP] ... I mostly agree with you about this (but for the name
  of the project, that is), at least as a first step.  Let me state my
  plan in more precise terms (and sorry for not having done it before):

   1. First, we start refactoring the automake codebase to transform
      it into "Automake-NG": a mostly Automake-compatible software, with
      only marginal or minor changes in APIs, that shares a lot of code
      and design with Automake, but whose generated Makefiles require GNU
      make.  See also point [3] at:
        <http://lists.gnu.org/archive/html/automake/2011-01/msg00077.html>
      Automake-NG will, where feasible, take advantage of GNU make features
      to simplify its internals and implementation, but this will hardly
      offer a better user experience for Makefile.am writers.  See also
      sensible Ralf's observations at:
        <http://lists.gnu.org/archive/html/automake/2011-01/msg00053.html>

   2. If Automake-NG has been successful, we might proceed to develop
      "Automire": a more aggressive rewrite, with profound APIs, design
      and code changes, in the hope of making automire easier to use and
      to extend (lack of extensibility on part of the user is probably
      one of the greatest shortcoming of the current automake).

  And even if we fail to finally develop Automire, I believe that
  Automake-NG will still be by itself a worth and useful step forward.

  > Presumably it will have plenty of user-level benefits, too, and not
  > just a cleaner implementation.

===========================================================================

This is Automake-NG, a Makefile generator.  It targets GNU make, and aims
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-NG.

Automake-NG 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-NG requires certain things to be done in your
configure.ac.

Automake-NG 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-NG manual.

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

Automake-NG still doesn't have a page on the web.  But it has one
mailing list, <automake-ng@gnu.org>, that can be used for general
discussions and to send bug reports, feature requests, and patches.
To obtain more information about this list, or to subscribe to it,
refer to <http://lists.gnu.org/mailman/listinfo/automake-ng/>

New releases are announced to autotools-announce@gnu.org.  If you want to
be informed, subscribe to that list by following the instructions at
<http://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 <http://www.gnu.org/licenses/>.
