Metakit 1.9

Form the README:

 WHAT IT IS - Metakit is an embeddable database which runs on Unix, Windows,
    Macintosh, and other platforms.  It lets you build applications which
    store their data efficiently, in a portable way, and which will not need a
    complex runtime installation.  In terms of the data model, Metakit takes
    the middle ground between RDBMS, OODBMS, and flat-file databases - yet it
    is quite different from each of them.
 WHAT IT ISN'T - Metakit is not: 1) an SQL database, 2) multi-user,
    3) scalable to gigabytes, 4) free for commercial use, 5) a toy.
 TECHNOLOGY - Everything is stored variable-sized yet with efficient positional
    row access.  Changing an existing datafile structure is as simple as re-
    opening it with that new structure.  All changes are transacted.  You can
    mix and match software written in C++, Python, and Tcl.  Things can't get
    much more flexible...
 CORE - The Metakit core library is written in C++.  It has a code footprint of
    just over 100 Kb on Windows.  It can be used as DLL, or linked statically.
    Debug builds include extensive assertion checks to catch problems early.
 PYTHON - The binding for Python is called "MkWrap".  It uses SCXX by Gordon
    McMillan as C++ glue interface.  The source is in directory "python/".
 TCL/TK - The MK extension for Tcl is called "Mk4tcl".  It is being used in a
    number of commercial projects, for in-house use as well as in commercially
    distributed products.  The source is in directory "tcl/".
 LICENSE AND SUPPORT - The Metakit core library source is available separately.
    Personal / non-commercial use does not require a license.  Commercial use
    requires a license "per developer seat".  In return, you get full source
    code and a year of revisions.  Everyone gets support, because software
    defects will be my problem.  Always.
 DOCUMENTATION - All documentation uses HTML.  The main page is "Metakit.html",
    which leads to the rest of the documentation in the "docs/" directory.
 WEBSITE URLS - The main pages on the world wide web, for news and downloads:
    Homepage:       https://www.equi4.com/metakit/
License info
https://www.equi4.com/metakit/license.html
    Python news:    https://www.equi4.com/metakit/python.html
    Tcl/Tk news:    https://www.equi4.com/metakit/tcl.html
Contact info
https://www.equi4.com/contact.html

INSTALLATION

The instructions below assume that you have a complete source code release, i.e. that the "src/" directory is present. If not, then you can still build language bindings such as MkWrap and Mk4tcl, but you will need to tweak the makefiles and project files to use a binary library version of the MK core.

You should at least be able to build all demos (in "demos/") and build the core regression test (in "tests/"). These are intended to be used with the binary library versions of the MK core (static and dynamic should all work).

Starting with this release, all platform builds and language bindings are now designed to work from a single common "builds/" directory. It turns out to be impossible to keep build side-effects limited to *just* this directory (CodeWarrior can't be told where to place its temp data, and Visual C++ still alters a few files next to the project ".dsw" file, to name two offenders).

UNIX

    It is no longer advised to build the Unix code in the "unix/" directory.
    Instead, you should perform the following steps (which require a VPATH-
    aware version of make):
        % cd builds
        % ../unix/configure
        % make
        % make test
    And optionally (this only installs the core lib, not script extensions):
        % make install
    By switching to the "builds/" directory, you will keep the distribution
    directory tree 100% unaltered.  All changes are made in this subdir, and
    all final build results are left behind in this same subdir.
    See below for some platform-specific build notes.

WINDOWS

    There is a "win/" directory which contains subdirectories for a number of
    compiler systems.  Metakit has been built with many different compilers
    in the past (Microsoft, Borland, Watcom, Symantec, Metrowerks, Optima),
    but to preserve my sanity (there are 12 configurations for MSVC6 alone!),
    I am limiting myself to MSVC6, MWCW5, Borland C++ Builder 4, and Cygwin.
    The MS Visual C++ 6.0 project is "win/msvc60/mksrc.dsw", with subprojects
    for the C++ demo (mkdemo), building dll's (mkdll), static libs (mklib),
    regression tests (mktest), as well as Tcl (mktcl) and Python (mkpython).
    It has been set up to place all intermediate files and final results in
    the "builds/" subdirectory, even though you'll launch it from "win/".
    The Metrowerks Codewarrior project is in the "mac/" directory, and can be
    used to build both Mac and Windows versions (on either Mac *or* Windows).
    The core libraries are built with "mac/cw5.mcp", demo projects are set up
    in "cw5 Apps.mcp", Tcl is "cw5 Tcl.mcp", and Python is "cw5 Python.mcp".
    The Borland C++ Builder 4 projects have not yet been incorporated in this
    release, contact me to obtain a copy.
    The Cygwin build (B20.1 / gcc 2.95.1) is different, because it uses the
    unix autoconf system, and must be launched as described above for UNIX.
    I have upgraded to the latest development of libtool to be able to build
    DLL's with Cygwin.  You can build the "-mno-cygwin" version by editing
    the Makefile by hand and adding that option to CXXFLAGS.

MACINTOSH

    The Mac version requires Metrowerks CodeWarrior 5.  See the info above
    in the Windows section (MWCW is multi-platform).  The projects are all
    located in the "mac/" folder, which is also where MWCW will place its own
    "... Data" folders with intermediate results.  As with all other setups,\
    final results are made to end up in the "builds/" directory.

PLATFORM-SPECIFIC NOTES

* Linux RH 5.2 / gcc 2.95.1

    Builds with gcc 2.95.1 work out of the box.  The Tcl extension ends up as
    ".libs/libmk4tcl.so.0.0.0" (to please libtool), and should be renamed to
    "Mk4tcl.so".  Similarly, ".libs/libmkwrap.so.0.0.0" is in fact the Python
    extension, and *must* be renamed to "MkWrap.so" to call it from Python.
    The core MK libs end up as ".libs/libmk4.a" and ".libs/libmk4.so.0.0.0".

* Solaris 2.6 / gcc 2.8.1

    The Solaris builds are nasty for several reasons:
    - I do not own such a machine, and often have to make arrangements
      (or fight limited space on one of the machines I can telnet to).
    - The gcc 2.8.1 optimizer appears to be buggy, I have had to turn off
      the default "-O3" flag to prevent compiler crashes (several files).
    - Locking on Solaris (especially w.r.t NFS) remains a mystery to me.
      The Tcl and Python extensions both use locking (the core not yet).
      See tcl/Mk4tcl.cpp around line 520, and python/PyStorage.cpp around
      line 80 for details.  It's all pretty messy, and not 100% correct.
    Despite this, I'm doing my best to resolve these issues.  Having a solid
    build of the core *and* of Tcl / Python extensions is quite important.

* Other Unix systems

    No notes yet, more details expected when the new release is tried on
    other Unix systems.

* Windows

    MSVC 6 builds MK as static lib and as DLL (universal config, I have not
    yet created build versions with MFC or STL, mainly because MK can now be
    used in all contexts regardless of how it was built).  The Python and Tcl
    extensions build as dynamic extensions (a static build is easy to add).
    MWCW 5 builds MK as static lib and as DLL (interestingly enough, the DLL
    is slightly smaller than MSVC 6 - 102 vs 108 Kb - when their runtimes are
    linked in dynamically as well).  I have not added Win builds for Tcl or
    Python, since MSVC 6 has those already.
    Cygwin B20.1, with gcc 2.95.1 ugrade, also builds MK as static lib and as
    DLL.  Both "pure" Cygwin (i.e. requiring cygwin1.dll) and mingw32 (using
    the -mno-cygwin flag) build, but there are some hairy include issues when
    it comes to choosing the right locking model for Tcl and Python.  These
    issues have not been resolved fully.

* Macintosh

    MWCW 5 builds PPC shared libs, PPC static libs, and 68K static libraries.
    Building 68K CFM libraries leads to a "Metakit 68K.shlb" which comes out
    of the linker without errors, but the result does not seem to have any
    export symbols defined (despite the fact that the library is over 200 K).
    Because of that, I've been unable to build apps or Mk4tcl/Mkwrap so far.
    The other three configurations build, but for some reason MK's regression
    test stops at L03 (everything up to that point looks ok, i.e. over 90%).
    The Mk4tcl PPC extension appears to work (quick manual test), and so does
    the Python extension, "MkWrap.PPC.slb".  I have not yet given these two
    a serious workout, hoping to have a basic test harness in place soon.

* VMS, BeOS, ...

    No news yet, since this release has not yet been built on any of them.

WHAT'S MISSING HERE

    - a section on basic concepts (or maybe it doesn't belong here?)
    - a section on getting started (C++, Python, Tcl all differ - point to
      the respective intro pages)
    - maybe a small sample for each of C++ / Tcl / Python, to give an idea
    - progress on soon-to-come features, i.e. what is planned for 1.9 final
    - pointers to FAQ's and other info (such as the new Perceps docs)
    - known problems and bugs (there ought to be a bug database one day)
    - mention Tclkit, scripted docs (Wikit/Tequila?), VFS?
    - I forgot...