		README for the modules building system

** Files in the modules directory:
 
 bin/ 		binary produced by modules
 lib/ 		libraries produced by modules
 include/ 	interfaces produced by modules
 Makefile	targets: all clean doc
 modules	list of modules needed by each target
 Doxyfile	doxygen configuration file
 src/ 		the modules sources

** Modules policy:

 ** building policy

 Each module must include in the makefile $(CONFIG) that defines:

 CC, LD, AR, STRIP, RANLIB, HCC, HLD, HAR, HSTRIP, HRANLIB,
 CFLAGS, HCFLAGS, LDFLAGS, HLDFLAGS, EXEEXTENSION, STATICEXTENSION, 
 SHAREDEXTENSION, OS.

 These variables must be used as the compiler, linker, etc.
 The modules makefile is also called defining PREFIX, CONFIG and TARGET.

 A module file may contain something like:
 
 #ifdef HAVE_CONFIG_H
 #	include "config.h"
 #endif
 
 to integrate the global #define for the projects, like 
 VERSION and PROGRAMNAME and other options for compilation not concerning 
 platform but only the software itself.

 Each module's Makefile must have these targets:

 all, clean.

 The first must compile and link lib$(TARGET)$(STATICEXTENSION) and
 copy it to $(PREFIX)/lib ; then copy all the .h needed to $(PREFIX)/include.
 The other targets are trivial.

 Each module must be subscribed in modules/src/subscribed, and the 
 right Makefile.template* will be used to build it. As a special case a module
 may have an ad-hoc Makefile, but you are encouraged to use default Makefiles.
 
 Makefile.template is a generic makefile that can be personalized by 
 adding these files to the module directory:  source, interface, shared.
 The first contains the .c files that must be compiled, while the second 
 defines the .h file that should be copied to $(PREFIX)/include. The third
 contains -l flags to link the shared library. The shared library is built only
 if this file is present.

 Contrib modules should be in the vanilla module-version.tar.gz format and 
 may be patched with a patch module-version.diff present in the same directory.
 Makefile.template-contrib must be used as a Makefile to do this. See the lua 
 module for a working example.

 Special packages can use their own Makefile. This is useful in some special
 modules, but weakens the build system, so be careful.

 ** name policy

 Lua bindings packages must be called packagename_lua, as with lua-only packages
 (containing .lua modules).

 ** documentation
 
 C modules must be documented with doxygen.
 
 A .lua file must be documented in the luadoc way.
 
 Example of a commented lua file. Note that . at the end of line are important.

 <begin>
 ---
 -- description of the file, required in pkg files

 ---
 -- function brief.
 -- function long
 -- @param name type description,remember name can't be n.
 -- @return type description
 function prototype or defined value
 <end>

 A handmade binding can't be documented via the .lua, so you have to add
 a .luadoc file. This file is a lua documented file containing only the
 functions prototypes and their documentation.

** COPYING

 All modules in the modules directory are copyrighted under the GNU/GPL license,
 except the ones containing a different license specification.
 
** eof
