RCS and build areas

The CMU CL sources are maintained using RCS in a hierarchical directory structure which supports:

Since this organization maintains multiple copies of the source, it is somewhat space intensive. But it is easy to delete and later restore a copy of the source using RCS snapshots.

There are three major subtrees of the root /afs/cs/project/clisp:

rcs
holds the RCS source (suffix ,v) files.

src
holds ``checked out'' (but not locked) versions of the source files, and is subdivided by release. Each release directory in the source tree has a symbolic link named ``RCS'' which points to the RCS subdirectory of the corresponding directory in the ``rcs tree. At top-level in a source tree is the ``RCSconfig'' file for that area. All subdirectories also have a symbolic link to this RCSconfig file, allowing the configuration for an area to be easily changed.

build
compiled object files are placed in this tree, which is subdivided by machine type and version. The CMU CL search-list mechanism is used to allow the source files to be located in a different tree than the object files. C programs are compiled by using the tools/dupsrcs command to make symbolic links to the corresponding source tree.

On order to modify an file in RCS, it must be checked out with a lock to produce a writable working file. Each programmer checks out files into a personal ``play area'' subtree of clisp/hackers. These tree duplicate the structure of source trees, but are normally empty except for files actively being worked on.

See /afs/cs/project/clisp/pmax_mach/alpha/tools/ for various tools we use for RCS hacking:

rcs.lisp
Hemlock (editor) commands for RCS file manipulation

rcsupdate.c
Program to check out all files in a tree that have been modified since last checkout.

updates
Shell script to produce a single listing of all RCS log entries in a tree since a date.

snapshot-update.lisp
Lisp program to generate a shell script which generates a listing of updates since a particular RCS snapshot (RCSSNAP) file was created.

You can easily operate on all RCS files in a subtree using:

find . -follow -name '*,v' -exec <some command> {} \;



Subsections