GNU `m4' is an implementation of the traditional Unix macro
processor.  It is mostly SVR4 compatible, although it has some
extensions (for example, handling more than 9 positional parameters
to macros).  `m4' also has builtin functions for including files,
running shell commands, doing arithmetic, etc.  Autoconf needs GNU
`m4' for generating `configure' scripts, but not for running them.

GNU `m4' was originally written by Rene' Seindal, from Denmark.

GNU `m4' has a web site at http://www.gnu.org/software/m4/.

If GNU `m4' is meant to serve GNU `autoconf', beware that `m4'
should be fully installed *prior to* configuring `autoconf' itself.
Likewise, if you intend on hacking GNU `m4' from git, the bootstrap
process requires that you first install a released copy of GNU `m4'.

If you are just trying to build `m4' from a released tarball, you
should not normally need to run `./bootstrap' or `autoreconf'; just go
ahead and start with `./configure'.  If you are trying to build `m4'
from git, more information can be found in the version-control-only
file HACKING.

In the subdirectories `tests' and `doc/examples' you will find various
m4 files, ranging from trivial test files to rather advanced macros.  If
you intend to use m4 seriously, you might find useful material down
there.

See file `COPYING' for copying conditions.  Note that M4 is distributed
under the GNU Public License version 3 or later.  Some files in the
distribution are copied from the gnulib project, and hence bear the
designation version 2 or later because they are unmodified from gnulib;
however, if you modify these files using M4 rather than gnulib as the
source, you must update the license to be GPLv3 or later.
See file `INSTALL' for compilation and installation instructions.
See file `ABOUT-NLS' for how to customize this program to your language.
See file `NEWS' for a list of major changes in the current release.
See file `AUTHORS' for the names of maintainers.
See file `THANKS' for a list of contributors.

By using `./configure --with-gmp, you get multiple precision integral
and rational arithmetic using mpeval.  The implementation depends on the
GNU gmp v2 library.

By using `./configure --with-modules=`foo bar baz', you get an m4 with only
the named modules preloaded.  The default modules (preloaded if you do not
use this option) are sufficient to do the job of GNU m4-1.4.  Additional
modules may be desirable, or necessary if libltdl does not support your
host architecture.  The implementation uses libltdl interface, details of
which are in the libtool manual.  See file `modules/README' for a more
detailed description.

By default, the `syscmd' and `esyscmd' macros try to use the first
instance of `sh' found by `command -p getconf PATH' at configure time,
with a default of `/bin/sh'.  If that default is inappropriate, you
can use `./configure --with-syscmd-shell=location' to specify the
shell to use.

By using `./configure --with-dmalloc', GNU m4 is linked with Gray
Watson's dmalloc package.  It is a debugging option for finding memory
management problems.  Gray Watson's dmalloc package is available at
ftp://ftp.letters.com/src/dmalloc/dmalloc.tar.gz.

GNU M4 uses GNU Libtool in order to build shared libraries on a
variety of systems.  While this is very nice for making usable
binaries, it can be a pain when trying to debug a program. For that
reason, compilation of shared libraries can be turned off by
specifying the `--disable-shared' option to `configure'.  However,
without shared libraries, modules that are not preloaded will not be
available for use.

Send bug reports, comments or ideas to `bug-m4@gnu.org'.  A bug report
is an adequate description of the problem: your input, what you
expected, what you got, and why this is wrong.  Diffs are welcome, but
they only describe a solution, from which the problem might be uneasy to
infer.  Don't forget all relevant information about your operating
system, compiler, libraries, ...

The easiest way to remember this information is by using the
testsuite.  Any test failures are automatically logged, along with
lots of useful information about your setup; simply mailing
tests/testsuite.log to `bug-m4@gnu.org' is a good start.  If you want
to dive in and debug a failure, you may find it useful to fine-tune
the execution of the testsuite.  For example, running test 12 in
verbose mode can be done with:

make check TESTSUITEFLAGS='-v -d -x 12'

The testsuite understands --help to tell you more about the current
set of tests.

For any copyright year range specified as YYYY-ZZZZ in this package
note that the range specifies every single year in that closed interval.

========================================================================

Copyright (C) 2000, 2005-2011, 2013-2014, 2017 Free Software Foundation,
Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
Texts.  A copy of the license is included in the ``GNU Free
Documentation License'' file as part of this distribution.
