This directory contains the 3.73.1 test release of GNU Make.
All bugs reported for previous test 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.

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.
