OpenMCL uses a set of Berkeley DB v1 database files which contain foreign type, record, constant, and function definitions derived from the Linux (or Darwin) header files. An archive containing these database files (and the shell scripts that were used in their creation) is available.

Not surprisingly, Linux and Darwin use different interface files.

For LinuxPPC:

For DarwinPPC:

This archive (like OpenMCL binary and source distributions) should be extracted in the parent directory of the CCL directory. The LinuxPPC archive will create or overwrite the contents of the "ccl:headers;" directory; the DarwinPPC archive will create or populate "ccl:darwin-headers;".


Note that prior to version 0.9, OpenMCL used the GDBM database engine (vice Berkeley DB) and the "ccl:headers;" directory was laid out differently. When upgrading from the old-style database to the new, it may be necessary to remove or rename the "ccl:headers;" directory before extracting the archive.


OpenMCL defines reader macros that consult these databases:

In both cases, the symbol FOO is interned in the "OS" package, for which "LINUX" or "DARWIN" is a nickname. The #$ reader macro has the side-effect of defining FOO as a constant (as if via DEFCONSTANT); the #_ reader macro has the side effect of defining FOO as a macro which will expand into an (EXTERNAL-CALL form.)

It's important to remember that the side-effect happens when the form containing the reader macro is read. Macroexpansion functions that expand into forms which contain instances of those reader macros don't do what one might think that they do, unless the macros are expanded in the same lisp session as the reader macro was read in.

In addition, references to foreign type, structure/union, and field names (when used in the RREF/PREF and RLET macros) will cause these database files to be consulted.

Since the OpenMCL sources now contain instances of these reader macros (and references to foreign record types and fields), it's now necessary to install the interface database before compiling OpenMCL.

Other issues:

For information about building the database files, see here.