From 3ec00676e45f080f9f0555aeaaf7fa2f78261dda Mon Sep 17 00:00:00 2001 From: curt Date: Thu, 25 May 2000 16:45:19 +0000 Subject: [PATCH] Initial revision. --- README.metakit | 243 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 README.metakit diff --git a/README.metakit b/README.metakit new file mode 100644 index 00000000..e4db1c62 --- /dev/null +++ b/README.metakit @@ -0,0 +1,243 @@ +With the author's permission, SimGear now bundles MetaKit. MetaKit is + explained + +The MetaKit Library 2.01 March 2000 +============================================================================== + + +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) multi-user/-threading, 2) scalable to + gigabytes, 3) proprietary software, 4) full of bugs, 5) just 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 "Mk4py". 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 - MetaKit 2.01 is distributed as open source software (the + X/MIT-style license is at the end of this document). Commercial support + is available through an Enterprise License, see the URL mentioned below. + +DOCUMENTATION - All documentation uses HTML. The main page is "MetaKit.html", + which leads to the rest of the documentation in the "doc/" directory. + +WEBSITE URLS - The main pages on the world wide web, for news and downloads: + Homepage: http://www.equi4.com/metakit/ + Python news: http://www.equi4.com/metakit/python.html + Tcl/Tk news: http://www.equi4.com/metakit/tcl.html + License info: http://www.equi4.com/metakit/license.html + Contact info: http://www.equi4.com/contact.html + + +INSTALLATION +============ + +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: + % 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. + + Nastiness: if you build Mk4tcl, please do a "make Mk4tcl.so" as well. + And if you intend to create the Python extension, do a "make Mk4py.so". + The "libmk4tcl.so.0.0.0" and "libMk4py.so.0.0.0" targets are bogus ones. + + You will probably have to make changes in the makefile to locate the + proper includes and libs for Python (Tcl has been fixed, see "--with-tcl). + You probably only need to adjust "CXX_SWITCHES_PY" to find the headers. + + To build with STL containers and strings, you can do the following: + make CXXFLAGS='-Dq4_STD' test # add -O3 etc, as needed + This passes the test suite on Linux RedHat 5.2 with gcc 2.95-2. + + 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/". + + To build with STL containers and strings under MSVC, define "q4_STD". + To build with MFC containers and strings under MSVC, define "q4_MFC". + + 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", demos / tests are built + with "cw5apps.mcp", Tcl is "cw5tcl.mcp", and Python is "cw5python.mcp". + + The Borland C++ Builder projects have not yet been incorporated in this + release, but the "KitViewer" application is an example of how to use BCB. + + The Cygwin build (B20.1 / gcc 2.95.2) 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. + + Rob Bloodgood adds that the following GCC options are for maximum code + efficiency on x86 hardware: "-O2 -m486 -malign-loops=2 -malign-jumps=2". + I have not yet tried this myself, but am passing on the tip. + +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. + + Static 68K builds appear to work fine, the 68K CFM variants will need + some more work (I couldn't get the libraries to export their symbols). + + +PLATFORM-SPECIFIC NOTES +======================= + +* Linux RH 5.2 / gcc 2.95.2 + + Builds with gcc 2.95.2 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/libMk4py.so.0.0.0" is in fact the Python + extension, and *must* be renamed to "Mk4py.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). + This problems appears to be resolved with gcc 2.95. + - 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 further notes, though many systems will build fine out of the box. + +* 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.2 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/Mk4py 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, "Mk4py.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, please report your findings with any other platform builds. + + +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 + - mention TclKit, scripted docs (WiKit/Tequila?), VFS? + - I forgot... please tell me :) + + +LICENSE AND COPYRIGHT STATEMENT +=============================== + +Copyright (c) 1996-2000 Jean-Claude Wippler + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + +============================================================================== +-- Jean-Claude Wippler