lmlibs
------

NOTE: As always this documentation is somewhat out of date.  See the
individual directories for current docs if available, or look at the
headers and code to see what's really going on.

This directory will contain sharable libraries for all future linux
magic software development projects.

This will be maintained separately from regular project source and
will be given specific branch and revision numbers so that there will
be fewer problems with versions mismatches on source releases.

The following projects are included in this directory:

lmdebug -	custom debug message logging and run-time/compiler
		assertions 

lmlogger   -	system/application message logging library 

lmalloc	-	debug malloc and memory allocation logger which can be
		compiled out for releases.

lmstring -	string class library which makes the functions of 
		string.h safe.
				
lmconfig	- configuration and settings library which can be
		configured to use either individual key text files,
		full config files containing keys, or from a database
		(other forms may appear in the future), as well as
		from command line options.

lmcontainer - 	container type class functions with user definable,
		transparent low level data structures (linked lists,
		hash tables, arrays, etc)

Generally, the whole lmlibs library should be checked out from cvs if
it is going to be used in a project.  Individual modules can be
checked out if required as long as projects they depend on are also
included in the project.

Each project will have a config.h file which will include compile time
options which can be set for individual projects.  See the README
files for individual projects or just look at comments in config.h for
details.  Most options will be configurable from the compiler command
line as well, by specifying a -D_CONFIG_OPTION, where CONFIG_OPTION
can be found in the specific config.h for the project.   

The root directory of the project will include a header file called
liblm.h, which will include any necessary headers to use the
individual libraries.  You will be able specify which libraries to
include by passing variables to build process.

To build correctly, the project will have to include -Ilmlibs in the
CFLAGS of the source project Makefile and #include <liblm.h> in each
source file that requires the libraries, or #include
<lmlibs/liblm.h>. Also, it must include the following (or something
similar if you know what you're doing) in it's Makefile.

LMLIBDIR=./liblm
LMLIBSINCLUDE=$(LMLIBDIR)
CFLAGS=$(CFLAGS) -I$(LMLIBDIR)
LDFLAGS=$(LDFLAGS) -llmlib

all: $(PROJECTNAME) liblm

liblm:
	$(MAKE) $(MAKEFLAGS) -C$(LMLIBDIR)

The library supports two main options, debug and release and profile.
Debug is enabled by default.  To build for release, add the following
line to your makefile release build command:

CFLAGS=-D_LMRELEASE

Before doing a make clean and make release. 

Each directory will contain a README file as well as specific
documentation in man page format describing the specific use of each
library.

Each project will have an install rule to install the library on the
system.  The install prefix will be specified by passing the variable
PREFIX to make during a 'make install'.  All install directories will
also be configurable this way (DOCDIR,MANDIR,LIBDIR,BINDIR,CONFDIR,SHARDIR,etc).

Each library will have the following directory layout:

libname/
libname/src
libname/include
libname/doc
libname/examples
libname/test

Each library will contain simple example programs and a test suite in
the example and test directories respectively.



*TODO* Building shared libraries for system wide use.

*TODO* See if it can be done this way	
include $(LMLIBDIR)/Makefile

*TODO* Project dependencies

