This directory contains the %VERSION% release of GNU Make.
All bugs reported for previous releases have been fixed.
Some bugs surely remain.

For general building and installation instructions, see the file INSTALL.
If you need to build GNU Make and have no other `make' program to use,
you can use the shell script `build.sh' instead.  To do this, first run
`configure' as described in INSTALL.  Then, instead of typing `make' to
build the program, type `sh build.sh'.  This should compile the program
in the current directory.  Then you will have a Make program that you can
use for `make install', or whatever else.

Some systems' Make programs are broken and cannot process the Makefile for
GNU Make.  If you get errors from your system's Make when building GNU
Make, try using `build.sh' instead.

  - See README.customs for details on integrating GNU make with the
    Customs distributed build environment from the Pmake distribution.

  - See README.W32 for details about GNU Make on Windows NT or 95.

  - See README.Amiga for details about GNU Make on AmigaDOS.

  - See README.DOS for compilation instructions on MS-DOS and MS-Windows
    using DJGPP tools.

    A precompiled binary of the MSDOS port of GNU Make is available as part
    of DJGPP; see the WWW page http://www.delorie.com/djgpp/ for more
    information.

It has been reported that the XLC 1.2 compiler on AIX 3.2 is buggy such
that if you compile make with `cc -O' on AIX 3.2, it will not work correctly.
It is said that using `cc' without `-O' does work.

One area that is often a problem in configuration and porting is the code
to check the system's current load average.  To make it easier to test and
debug this code, you can do `make check-loadavg' to see if it works
properly on your system.  (You must run `configure' beforehand, but you
need not build Make itself to run this test.)

See the file NEWS for what has changed since previous releases.

GNU Make is fully documented in make.texinfo.  See the section entitled
`Problems and Bugs' for information on submitting bug reports.

GNU Make is free software.  See the file COPYING for copying conditions.
