This directory contains all bundled modules for GNU m4.

Dynamic modules are only available if the host operating system provides
one (or more!) of libltdl's required APIs.

Implementation details are in ../m4/module.c

A module is a compiled shared object, i.e., modules are written in C and
then compiled.  The compiled file can then be loaded into a running m4
process by calling m4 with the module name listed on the command line,
or by calling the builtin "include". This gives GNU m4 potential access
to any system feature with a C interface.

Modules are searched for in M4PATH, if set, else in a module directory
defined at configure time, $prefix/lib/m4/ by default.  Extra directories
can also be added to the search patch by specifying them on the command
line with the `-I' or `-B' options.

A module extends GNU m4 by defining new builtins, It can define builtins
with the same names as existing builtins, which will shadow the existing
builtins, making them temporarily unavailable.  A module cannot redefine
internal functions of GNU m4, such as the input parser or argument handling
(yet!).

Each module should include the installed header file,
`$prefix/include/m4module.h'.  This will define all the necessary macros,
type declarations and function prototypes required to implement a module.

The module system uses libtool's libltdl for dynamic module loading, and
that in turn requires that any non-static symbols in the module to be
be in their own namespace to avoid namespace clashes with symbols
exported from other modules (which may be loaded too!).  This is usually
done by `#define'ing these symbols to libltdl's naming scheme at the top
of the file.  The scheme is to prefix each symbol with the module name,
followed by `_LTX_' and then the original symbol name.  For example,
to export "m4_macro_table" in a source file which will become part of
a module, "mymod", we would add the following to the top of the source file:
`#define m4_macro_table mymod_LTX_m4_macro_table'.  See the included modules
for more examples.

Each module *must* define one or more entry points from the following:
"m4_builtin_table", "m4_macro_table" and "m4_init_module".  The symbol
"m4_builtin_table" is a pointer to a table of "m4_builtin" (defined in
m4module.h), listing each new builtin that it implements.  The symbol
"m4_macro_table", is a pointer to a table of "m4_macro", listing each
text macro initialised by the module.  These tables end with an
entry where name == NULL.

If a module defines the symbol "m4_init_module", it is supposed to be a
function with a prototype of "void m4_init_module (struct obstack *obs)",
and it will be called as soon as the module is loaded.  Any non-finished
object left on the obstack will be the expansion of the call of the
builtin "include".  The obstack pointer might be NULL (in the future).

If a module defines the symbol "m4_finish_module", it is supposed to be
a function with a prototype of "void m4_finish_module (void)", and it
will be called just before the module is unloaded or GNU m4 exits.  This
will allow a module to clean up before exit.  There is no way of
communicating information to the user, as GNU m4 exits immediately
afterwards.

No other symbols will be used by GNU m4.  All other symbols within the
module are private and should be declared `static' so that they will not
be accessible to GNU m4 or to other modules.

Modules are allowed to call external functions already defined within
the GNU m4module library.  These have prototypes in m4module.h.

Loading and unloading of modules, and symbol namespace resolution
strategies are illustrated by shadow.c and shadow.m4.

To try the demos, compile with `make' and run them with the commands as:

    tests/m4 doc/examples/time.m4

or in the case of time2.m4

    tests/m4 -I tests time -I doc/examples time2.m4

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

Copyright (C) 2000-2001, 2006, 2010, 2013 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.
