mirror of
git://git.code.sf.net/p/sbcl/sbcl
synced 2026-09-10 07:26:40 -04:00
110 lines
4.4 KiB
Plaintext
110 lines
4.4 KiB
Plaintext
Proposed contrib standard
|
|
|
|
The SBCL contrib mechanism provides a mechanism to
|
|
manage code which does not form part of SBCL itself, but which is
|
|
sufficiently closely associated with it that it would not be sensible
|
|
to run it as a completely separate project. For example, alternative
|
|
top-levels, foreign-function glue for calling out to libraries, editor
|
|
support, etc. Portable ANSI code would not usually be considered for
|
|
the contrib mechanism, unless it does something that is only useful in
|
|
the context of SBCL.
|
|
|
|
* Responsibilities
|
|
|
|
The contrib directory is offered for code which is aimed primarily at
|
|
SBCL users, and which has release cycles attuned with those of SBCL
|
|
itself, but which the SBCL maintainers do not consider to be part of
|
|
the core system. This being so, the primary responsibility for
|
|
maintaining it remains with the provider of the system; the only
|
|
commitment that SBCL maintainers make with respect to contrib code is
|
|
to not install stale contrib code: a contrib that fails its test suite
|
|
against a given version of SBCL will not be installed in that release.
|
|
|
|
Note that despite leaving you the contrib maintainer with the
|
|
responsibility of maintenance, it doesn't follow that we'd
|
|
_necessarily_ offer you CVS access to the SBCL tree: each application
|
|
is considered individually. We often do, though.
|
|
|
|
** Release cycle
|
|
|
|
During the development cycle, changes to the core system may break
|
|
contrib modules. This may indicate bugs in SBCL (which we will
|
|
probably want to fix before release anyway) or that the contrib uses
|
|
deprecated features or internal symbols.
|
|
|
|
During the end-of-month freeze, core developers should avoid
|
|
committing anything that breaks a previously working contrib module.
|
|
Contrib maintainers should checkout the frozen SBCL version and
|
|
submit patches where their contribs are broken.
|
|
|
|
Contrib modules that still don't work at release time will not be
|
|
installed.
|
|
|
|
* Packaging
|
|
|
|
Each contrib package lives in $ROOT/contrib/packagename, and will
|
|
install into $(SBCL_HOME)/packagename
|
|
|
|
A contrib package must contain a Makefile. This is to have three targets
|
|
|
|
all: # do whatever compilation is necessary
|
|
test: # run the package tests
|
|
install: # copy all necessary files into $(BUILD_ROOT)$(INSTALL_DIR)
|
|
|
|
You are encouraged to use ASDF to build it and load it. A version of
|
|
ASDF is bundled as an SBCL contrib, which knows to look in
|
|
$SBCL_HOME/systems/ for asd files - your install target should create
|
|
an appropriate symlink there to the installed location of the system
|
|
file. Look in sb-bsd-sockets/Makefile for an example of an ASDF-using
|
|
contrib.
|
|
|
|
$(BUILD_ROOT)$(INSTALL_DIR) will have been created by the system
|
|
before your install target is called. You do not need to make it
|
|
yourself.
|
|
|
|
* Tests
|
|
|
|
You must provide a 'test' target in your package Makefile. This will
|
|
be called to test whether your package is OK for installation, so if
|
|
you have used SBCL internal interfaces or similar, this would be a
|
|
good place to test that they still exist, etc.
|
|
|
|
* Documentation
|
|
|
|
Each package should provide documentation in Texinfo format. For the
|
|
documentation to be included in the sbcl manual, the following must
|
|
hold:
|
|
|
|
- Each Texinfo file must have the extension `.texinfo' so the
|
|
automatic manual builder will find it.
|
|
|
|
- It must contain one @node - @section pair at the top and only
|
|
@subsection (or lower) sectioning commands within, e.g.
|
|
|
|
@node Sample Contrib
|
|
@section Sample Contrib
|
|
...
|
|
|
|
so that the contrib menu can be created automatically.
|
|
|
|
Take care to choose unique node names.
|
|
|
|
[ make install should copy the documentation somewhere that the user
|
|
can find it ]
|
|
|
|
* Lisp-level requirements
|
|
|
|
An sbcl contrib should attempt to avoid stamping on sbcl internals or
|
|
redefining symbols in CL, CL-USER. Sometimes this is the only way to do
|
|
something, though: individual cases will be considered on their
|
|
merits. A package that hacks undocumented(sic) interfaces may be
|
|
accepted for contrib, but it does not follow from that that the
|
|
interface is now published or will be preserved in future SBCL
|
|
versions - contrib authors are encouraged instead to submit patches to
|
|
SBCL that provide clean documented APIs which reasonably can be
|
|
preserved. If in doubt, seek consensus on the sbcl-devel list
|
|
|
|
A contrib must load into its own Lisp package(s) instead of polluting
|
|
CL-USER or one of the system packages. The Lisp package names should
|
|
begin with "SB-". Ask the sbcl-devel list for a suitable name.
|