Welcome to the revamped OMF version 2.

Actually, this is more like version 3 or 4 if you start considering
all the previous versions going back to Umbrello 2 that have been
scrapped and rewritten. Alas... while I may never find this to be
perfect, this version is significantly better than the last. It's
cleaner, smaller, faster and cooler - the last is only opinion :)

Errata
------

I can't seem to find any noticable bugs - and I've even got a heap
of regression tests being run on the OMF core and the MOF implementation.
There's still a lot to write, but so far so good.

If you find bugs in either the build, the tests of any personal
usage, let me know.

Cross-Document References
-------------------------

This version of the OMF actually contains a pretty solid implementation
of cross-document model referencing built into the XMI implementation.
If you reference an element in a different model, you might end up with
XMI like this (pretend it references std::string):

<...>
	<type href="std.xmi#23"/>
</...>

When the XMI reader finds this, it will try to find the file "std.xmi"
in the model path. When found it will recursively invoke itself to
read and cache that model in memory. Any other cross-document references
to that model will be resolved against the cached document.

I mentioned the model path... The model path is essentially a search
path consisting of various configured directories. The OMF is currently
configured to automatically search "/usr/share/OMF" and "~/.OMF" for
models. However, the model path can be modified from the shell by
setting the OMF_MODEL_PATH. The previous paths are automatically
prepended (added before) the OMF_MODEL_PATH as they are considered
system directories and should be searched before user directories.

In the test directory, there are two files that illustrate the concept
of cross-document references: Iter and Xmi. Running the Iter program
will generate two files: bar.xml and baz.xml. The bar.xml file contains
a type reference to the bax.xml file. Running the Xmi program and
passing bar.xml will print the contents of that file. Note that
you must set the OMF_MODEL_PATH to "." to ensure the file is actually
found and the reference resolved. Otherwise, it will segfault (I
forgot to add a pointer check).

Quick note: you should never, ever build cycles into your model
dependencies. It will probably result in infinite recursion into
the Xmi parser.

Directory Layout
----------------

OMF
	The OMF core (go figure). This implements the basic type
	system and supporting classes used by clients and metamodel
	implementations. An implementation of XMI 2 serialization is
	also in this directory.

Model
	A hand-built implementation of the MOF v1.4. It's pretty
	complete as far as main classes go.

Python
	Python bindings built using the Boost.Python library. You'll
	need this and Python 2.3 if you want to build this library.

test
	A bunch of regression tests using the boost.test unit test
	framework. Build and run for fun.

doc
	Random ranting and raving and design discussion. If you
	run Doxygen, documentation should be generated here.

templates
	One file: lgpl - the header for all source files in this
	distribution.

lib
	Output files for the libraries.
