Initial commit
Expand the README
Import "testing" package and create build structure.

This package comes first, so other packages can use it as
a testing infrastructure as they are constructed.
Build Tools: "quietmake"

This script wraps GNU Make, providing output pruning
services that reduce the size of the logs, to make it easier
to find and notice interesting things within the logs.

Lines ending with backslash are joined with the next line.

Messages about entering and leaving a directory with nothing
between them are discarded.

Commented-out example lines are included showing how to
add filters to the script to discard selected additional
output lines if you find them to be bulking up the size
of your build logs.

The goal is a build log where any real issues can be clearly
seen reading the log, with just enough other text to allow
monitoring progress during live builds and to identify the
build context for messages in saved log files.
Fix #1: build/quietmake on MacOS

This change makes build/quietmake run correctly
on MacOS by shifting how stdout and stderr are
combined from make into awk.
Fix #2: ask make to report directories (for MacOS)

This commit adds the “-w” flag, by default, when running a quietbuild
so that make will indicate when it is changing directories.
Document additional tools

Had to install markdown and doxygen on my iMac.
Merge pull request #3 from Farsyte/ic-build-macos

Ic build macos
Fix #4: add "fastmake" to build tools.

This does a "quietmake" with parameters added that usually
reduce the wall-clock time for the build.

Directory printing is turned off, as parallel builds with
jobs in different directories (which happens inside this
project when make -j is used) can cause some messages to be
associated with the wrong directory.
Merge pull request #5 from Farsyte/development

Fix #4: add "fastmake" to build tools.
Update to latest.
Fix #8: proper handling of PHONY targets

Tell the build system which targets are organizational
and should be run even if someone happens to create a
file with a matching name.
Fix #7: Genearlize the Recursive Build

Generalize the parallel recursive build mechanism so that the
implementation is a single block (not a single block for each
recursive target), driven by a list of targets that are recursive
and a list of subdirectories.

Exposes internal targets of the form "dir/target" so that the
build rules in any specific directory can indicate dependencies
between builds; for instance,

    test/cycle: lib/cycle

would indicate that the cycle target should not start building
in the test subdirectory until it finishes in lib. This is mainly
intended to support a dependency between two directories in the
directory list and a target they both implement. Using this to
do other clever things may result in undefined behavior of the
build system (it might work, but it might STOP working).

Also includes some additional build debug support added while
checking that this facility works.
Fix #6: Directory context in log messages

Modifies $P printed messages to include ${dir.rel} to identify
where they are coming from.

Modifies directory location varialbes for sources and targets
to use absolute path names.

Modifies the list of printf statements in debug targets.

Modifes "test coverage" facility to work with absolute paths.

Extra stuff: untabify tabs in makefiles that are not required to be tabs
Merge pull request #9 from Farsyte/development

Fix up parallel builds
Update to latest.
Expand Documentation.

  - Set up README.md as a Doxygen Mainpage
  - Add doxygen comments to testing.h

Also noted in passing while doing this:

  - when printing an Oops in the destructor,
    need to add "<< endl" to assure the message ends
    with a newline and is flushed to the output.
Fix #15: massive build rules rewrite

Rather than using "make -C ..." to iterate down the tree,
just include "**/*.mak" from the top level GNUmakefile.

This allows much more flexible presentation and resolution
of dependencies.
Merge pull request #16 from Farsyte/development

Build Rules Rewrite
Fix #13: Start a utility library

  - discarding a lot of extra baggage, rather than
    building more baggage for the new library.

  - start small. Utility will get bigger soon.

  - limit risk. Not using Utility in Testing yet.