The current version (3.9.1) was released on January 21, 2023, and is available in Quicklisp.
Documentation
Are there any documents for mk-defsystem out there? How does one add a path to its search path?
- Chapter 4 of Portable Utilities for Common Lisp—User Guide & Implementation Notes
- Archive from the CMU AI Repository has the above in PS and text format: mkantdoc.tgz
- Henrik Motakef's Fight the System explains how to use and load libraries with mk-defsystem.
The CLOCC version of mk-defsystem has some TeX/DVI/PS documentation. As to the specific question, the magical variable you're looking to push things onto is mk:*central-registry*.
Just to clarify: the CLOCC documentation is limited and needs to be updated. As per the specific question, both MK3 and MK4 now have a new function
which does the PUSH in a more meaningful way.
Portability notes
The y-or-n-p-wait function (which is also provided by text-query) uses a technique of busy-waiting on listen (or read-char-no-hang) that doesn't work everywhere. For example, it works in the LispWorks IDE for Windows, but doesn't work in the Windows Terminal. To disable the use of timeouts, you can do this:
ACL warns because some export forms are non-top-level. This is one of those things that changed when CLtL2 came around. Things like export (and proclaim, shadow, etc.) are supposed to be wrapped in an eval-when, or find another way to suppress the warnings. The variable *cltl1-compile-file-toplevel-compatibility-p* controls this behavior:
MK-DEFSYSTEM has its own (conditionalized) implementation of provide and require, because those functions were at risk of being deleted from ANSI Common Lisp, but they got deprecated instead. The definitions of these functions within defsystem.lisp caused MKCL to crash upon loading the FASL. So it's essential that the read-time conditionalization prevents that code from being read at all.
Foreign files
Did you know? You can also load foreign files with defsystem. For example, to define that C components are compiled by calling out to "make" and loaded using the foreign loader, try something like this example (originally from db-sockets):
then you define the relevant component like this:
Older versions
- defsystem-3.x (3.6 Interim) is available in the CLOCC archive.
- defsystem-4 was an experimental CLOS-based MK:DEFSYSTEM.
build