Here's an excerpt from the OpenBSD docs, pertaining to my earlier post:
X uses a different build process than the rest of the OpenBSD tree, as it is based on imake, rather than the standard make(1) process. One consequence of this is there is no "obj" directory, generated binaries end up being intermixed with the source code, which can cause problems (or at least, excessive output) with cvs(1). A solution to this problem is to use lndir(1) to make a "shadow directory" consisting of symbolic links to the actual source directory for the XF4 tree.
i386 only: XF86Setup, used to configure XF3 servers on the i386 platform (and ONLY the i386 platform) requires the "tcl" and "tk" packages be installed before building X (found in the ports tree at /usr/ports/lang/tcl/8.4/ and /usr/ports/x11/tk/8.4/. Installing the "tk" package will install "tcl" as a dependency). As usual, installing a package is much faster than installing these applications from source. Failing to install these packages before building X is somewhat frustrating, as the system will work for some time before erroring out.
To compile X using the "shadow directory" of /usr/Xbld, use the following steps, compiling and installing new binaries into the proper directories, follow these steps:
# rm -rf /usr/Xbld
# mkdir -p /usr/Xbld
# cd /usr/Xbld
# lndir ../XF4
[...lots of output...]
# make build
[...lots of output...]"