2001-04-18 19:59:47 +08:00
|
|
|
With the author's permission, SimGear now bundles MetaKit.
|
|
|
|
|
|
|
|
Important build note:
|
|
|
|
|
|
|
|
Later on when you are linking programs with -lmk4 (i.e. FlightGear or one
|
|
|
|
of it's associated programs) if you come across an error similar to the
|
|
|
|
following:
|
|
|
|
|
|
|
|
c++ -Wall -O2 -L/usr/local/lib -o gensimple gensimple.o libAirports.a
|
|
|
|
-lsgdebug -lsgmisc -lmk4 -lz -lm
|
|
|
|
/usr/local/lib/libmk4.a(view.o)(.text+0x1c8):view.cpp: multiple definition
|
|
|
|
of `c4_View::~c4_View(void)'
|
|
|
|
libAirports.a(simple.o)(.text$_$_7c4_View+0x0):simple.cxx: first defined
|
|
|
|
here
|
|
|
|
collect2: ld returned 1 exit status
|
|
|
|
make[2]: *** [gensimple] Error 1
|
|
|
|
make[2]: Leaving directory `/home/curt/FlightGear-0.7.7/src/Airports'
|
|
|
|
make[1]: *** [all-recursive] Error 1
|
|
|
|
make[1]: Leaving directory `/home/curt/FlightGear-0.7.7/src'
|
|
|
|
make: *** [all-recursive] Error 1
|
|
|
|
|
|
|
|
Then you need to come back and rebuild Metakit with the -DNDEBUG flag.
|
|
|
|
For unix/cygwin systems, modify the unix/Makefile file and add -DNDEBUG
|
|
|
|
to the CFLAGS line.
|
|
|
|
|
|
|
|
Now we return you to the official metakit readme ... :-)
|
|
|
|
|
2000-05-26 00:45:19 +08:00
|
|
|
|
|
|
|
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 <jcw@equi4.com>
|