These files are used by a program called aclocal (part of the GNU automake
package).  aclocal uses these files to create aclocal.m4 which is in turn
used by autoconf to create the configure script at the the top level in
this distribution.
