This is release 3.78 (September 6, 1999) of the GNU make test
suite.  See the file NEWS for some of the changes since the last
release.

This release is made by psmith@gnu.org to correspond to GNU make 3.78.
It won't work correctly for versions before that.  In addition to some
infrastructure changes I've added a number of new tests.

Rob Tulloh has contributed changes to get the suite running on NT.

Eli Zaretskii and Esa A E Peuha <peuha@cc.helsinki.fi> have contributed
changes to get the suite running on DJGPP/DOS.

This package has a number of problems which preclude me from
distributing it with make as a default "make check" test suite.  The
most serious of these is that it's not parallelizable: it scribbles all
over its installation directory and so can only test one make at a
time.  I simply don't have time to do more with this than I am so far;
I'm very actively interested in finding someone willing to overhaul the
test suite infrastructure.  If you're interested, contact me (see below)!

The test suite thus far has been written by Steve McGee, Chris Arthur,
and Paul D. Smith.  It is covered by the GNU General Public License
(Version 2), described in the file COPYING.

The test suite requires Perl and is known to work with Perl 4.036 and
Perl 5.004 (available from ftp.gnu.org, and portable to many machines).
Earlier or later versions may work; I don't know.  It assumes that the
first "diff" it finds is GNU diff, but that only matters if a test
fails.

To run the test suite on a UNIX system, use "perl ./run_make_tests"
(or just "./run_make_tests" if you have a perl on your PATH).

To run the test suite on Windows NT or DOS systems, use
"perl.exe ./run_make-tests.pl".

By default, the test engine picks up the first executable called "make"
that it finds in your path.  You may use the -make_path option (ie,
"perl run_make_tests -make_path /usr/local/src/make-3.78/make") if
you want to run a particular copy.  This now works correctly with
relative paths and when make is called something other than "make" (like
"gmake").

Tests cannot end with a "~" character, as the test suite will ignore any
that do (I was tired of having it run my Emacs backup files as test :)

If you want to run the tests in parallel, you should use the mkshadow
script included here to create temporary "copies" (via symbolic links)
of the test suite, one for each parallel job.  This is a pain and one
day maybe the test suite will be rewritten so it's no longer
necessary--volunteers welcome!

Also, sometimes the tests may behave strangely on networked
filesystems.  You can use mkshadow to create a copy of the test suite in
/tmp or similar, and try again.  If the error disappears, it's an issue
with your network or file server, not GNU make (I believe).

The options/dash-l test will not really test anything if the copy of
make you are using can't obtain the system load.  Some systems require
make to be setgid sys or kmem for this; if you don't want to install
make just to test it, make it setgid to kmem or whatever group /dev/kmem
is (ie, "chgrp kmem make;chmod g+s make" as root).  In any case, the
options/dash-l test should no longer *fail* because make can't read
/dev/kmem.

A directory named "work" will be created when the tests are run which
will contain any makefiles and "diff" files of tests that fail so that
you may look at them afterward to see the output of make and the
expected result.

There is a -help option which will give you more information about the
other possible options for the test suite.

Any complaints/suggestions/bugs/etc. for the test suite itself (as
opposed to problems in make that the suite finds) should be sent to
psmith@gnu.org.  Enjoy!
                                                Paul D. Smith
						Chris Arthur
