README for XFree86 3.3.2 on NetBSD : Building New X Clients
Previous: Building on other architectures
Next: Thanks

## 9. Building New X Clients

The easiest way to build a new client (X application) is to use `xmkmf` if an `Imakefile` is included in the sources. Type ```xmkmf -a`'' to create the Makefiles, check the configuration if necessary and type ```make`''. Whenever you install additional man pages you should update `whatis.db` by running ```makewhatis /usr/X11R6/man`''.

To avoid the ``Virtual memory exhausted'' message from cc while compiling, increase the data and stack size limits (in csh type ```limit datasize 32M`'' and ```limit stacksize 16M`'').

Note: Starting with XFree86 2.1 and NetBSD 0.9A, the symbol __386BSD__ no longer gets defined either by the compiler or via the X config files for *BSD systems. When porting clients to *BSD systems, make use of the symbol BSD for code which is truly BSD-specific. The value of the symbol can be used to distinguish different BSD releases. For example, code specific to the Net-2 and later releases can use:

> `#if (BSD >= 199103)`

To ensure that this symbol is correctly defined, include `<sys/param.h>` in the source that requires it. Note that the symbol CSRG_BASED is defined for *BSD systems in XFree86 3.1.1 and later. This should be used to protect the inclusion of `<sys/param.h>`.

For code that really is specific to a particular i386 BSD port, use __FreeBSD__ for FreeBSD, __NetBSD__ for NetBSD, __OpenBSD__ for OpenBSD, __386BSD__ for 386BSD, and __bsdi__ for BSD/386.

Another note: If you get the message:

> `ld.so: undefined symbol _XtCvtStringToFont`

at run-time, you've stumbled on a semantic weakness of the NetBSD dynamic linker. Applications that use libXmu also need libXt. If the client uses a standard `Imakefile`, this dependency will probably by included in the Makefile automagically -- you'll not see the problem. Otherwise, just add ```-lXt`'' to your library list in the Imakefile or Makefile and relink.

README for XFree86 3.3.2 on NetBSD : Building New X Clients
Previous: Building on other architectures
Next: Thanks