The Perforce RCS implementation
-------------------------------
An overview of the implementation is in rcstest.cc.
This README discusses the ifdefs and system dependencies herein.
ifdefs
------
USE_CRLF - used to control whether LF or CRLF separate lines
in RCS files. Normally set by Jamrules for NT.
USE_MMAP - if set, uses the mmap() system call for read access
to RCS files. Otherwise, uses stdio. By an large, you
want this set if mmap is available. Normally set by
Jamrules.
HAVE_FSYNC - if set, calls fsync() before closing the RCS file
(after writing it), so that it is sure to hit the disk.
Set by stdhdrs.h based on what OS you're on.
OS_NT - used to control some NT specific filesystem operations,
like the different call to access() and setting O_NOINHERIT
to keep file handles private across subprocess creation.
(RCS formerly used an external diff but now does everything
inprocess, and so O_NOINHERIT is unneeded. )
OS_BEOS - BeOS specific interface changes.
OS_MAC - Macintosh MPW specific interface changes.
External Code Dependencies.
support/error.h - for the Error class, a layered error reporting
mechanism. It's used throughout, but is the only component
of 'support' that is needed for RCS.
sys/stdhdrs.h - included standard system headers needed by everything,
plus special headers as controlled by #define NEED_XXX flags.
The headers used are:
NEED_ACCESS
NEED_FCNTL
NEED_FILE
NEED_FSYNC
NEED_MKDIR
NEED_MMAP
NEED_OPENDIR
NEED_TIME
NEED_TYPES
See stdhdrs.h for what these control.