--- /dev/null
+
+ X Window System
+ Imake Configuration Guide
+
+ Release 4
+
+
+
+ Abstract
+
+This document describes the various parameters that are used to configure this
+release of the X Window System. It should be read by anyone who is porting X
+to a new platform or attempting to change the default installation.
+
+
+
+
+0. Overview
+
+Sources for a paper giving an overview of the build system may be found in
+./doc/config/usenixws/paper.ms.
+
+
+
+1. Introduction
+
+Because Makefiles are inherently unportable, this release uses a tool called
+Imake to generate platform-specific Makefiles from machine-independent
+descriptions called Imakefiles. It makes very heavy use of the C preprocessor
+both for constants and macro functions and can be somewhat tricky to master.
+However, it is invaluable for making the release easy to configure on a wide
+variety of machines.
+
+Imakefiles usually contain definitions of make variables plus one or more
+invocations of macro functions to build the desired parts of the Makefile.
+Imake reads a template file containing definitions that are common to all
+Makefiles, which includes a machine-specific file containing definitions for
+the various commonly used commands and flags for enabling certain build
+options. It then includes a rules file in which all of the various macro
+functions are defined followed by the Imakefile being processed. Finally,
+it appends a set of common rules to the bottom.
+
+
+
+
+2. The template file
+
+All of the common configuration parameters and make rules are located in
+the file Imake.tmpl. The top of the file defines some useful constants
+and then has a series of conditional blocks for setting the platform type.
+
+This requires that there be a unique preprocessor symbol that can be used to
+identify which configuration block to use. Systems whose cpp does not define
+such a symbol must add one to the cpp_argv table in config/imakemdep.h and
+build with BOOTSTRAPCFLAGS set to the appropriate name. Any additional flags
+(such as -DSYSV or -DUSG) that are needed to compile imake.c should be added
+to the file ccflags.c.
+
+Each block defines several symbol names representing the type of system
+being configured:
+
+ #define MacroIncludeFile "PLATFORM.cf"
+ #define MacroFile PLATFORM.cf
+ #define PLATFORMArchitecture
+
+where PLATFORM is the type of the system being configured. The redundant
+versions are needed because one is used by cpp to include the file and the
+other is used in generating filenames. The Architecture variable may be
+used in Imakefiles to obtain platform-specific rules or values. The unique
+symbols that were used to select the configuration block are then undefined
+to prevent Imakefiles from using system-dependent rules as opposed to
+platform-dependent (some platforms run on multiple systems).
+
+The rest of the template file should not be edited. Server-specific changes
+can be made in the appropriate .cf file and site-specific changes can be
+made in site.def. Any parameter that is not set will be given a default value
+in the appropriate .tmpl file. THESE DEFAULTS SHOULD NOT BE CHANGED.
+
+
+
+
+3. Server-specific .cf file
+
+Differences between operating systems are handled by setting various
+configuration parameters in the .cf files. The easiest way to create
+a new one is to:
+
+ o find a configuration similar to yours or start with generic.cf.
+ o set the SystemV variable if your OS is based on SVR2.
+ o set the OSName, OSMajorVersion, and OSMinorVersion variables.
+ o set BuildServer to NO if you are doing a client-only build.
+ o look at the other .cf files, Imake.tmpl, and Project.tmpl to see
+ if there are any variables you'd like to set; common ones include:
+
+ HasSockets, HasVFork, HasVoidSignalReturn, HasBsearch,
+ HasPutenv, NeedBerklibInXlib, ConnectionFlags, CcCmd, LnCmd,
+ setTtyGroup, UnalignedReferencesAllowed
+
+
+Imake.tmpl provides defaults for the following variables:
+
+ ArCmd command used to create libraries
+ AsCmd command used to run assembler
+ BootstrapCFlags missing cpp symbols needed to get started
+ BourneShell command used to run Bourne Shell
+ CURDIR current directory relative to top of sources
+ CcCmd command to run C compiler
+ CompatibilityFlags flags turn on backwards compatibility
+ CompressCmd command to run compress program
+ ConstructMFLAGS System V option to set MFLAGS make variable
+ CpCmd command to copy one file to another
+ CppCmd command to run C preprocessor
+ DebuggableCDebugFlags C compiler -I's and -D's to turn on debug info
+ DefaultCCOptions default special C compiler options
+ DefaultCDebugFlags debug/optimize flags for programs
+ DestDir prefix to root directory when installed
+ ExecableScripts boolean for systems that can exec() #!/bin/sh
+ ExtraLibraries system-specific libraries need to link
+ ExtraLoadFlags system-specific loader flags
+ FilesToClean files to delete in make clean
+ FortranCmd command to run Fortran compiler
+ FortranDebugFlags flags for Fortran debug info
+ FortranFlags Fortran compiler flags
+ HasBsearch boolean for libc has bsearch()
+ HasDESLibrary boolean for system has DES library
+ HasFortran boolean for system has Fortran compiler
+ HasGcc boolean for system has GNU C compiler
+ HasLargeTmp boolean for system has /tmp space
+ HasNdbm boolean for system has ndbm routines
+ HasPutenv boolean for libc has putenv()
+ HasSaberC boolean for system has Saber C
+ HasSharedLibraries boolean for system has shared libraries
+ HasSockets boolean for system has BSD sockets
+ HasSunOSSharedLibraries boolean for system has SunOS shared libs
+ HasVFork boolean for system has vfork()
+ HasVoidSignalReturn boolean for POSIX signal() procs
+ IncRoot parent of X11 include directory
+ InstDatFlags install flags for data files
+ InstIncFlags install flags for header files
+ InstKmemFlags install flags for xload to get at /dev/kmem
+ InstLibFlags install flags for libraries
+ InstManFlags install flags for manual pages
+ InstPgmFlags install flags for normal programs
+ InstUidFlags install flags for xterm to chown /dev/ptys
+ InstallCmd command to install files
+ LdCmd command to run loader
+ LdCombineFlags flags for incremental loading
+ LibraryCCOptions special C compiler options for libraries
+ LibraryCDebugFlags library debug/optimize flags to override defs
+ LibraryCcCmd command to run C compiler in libraries
+ LintCmd command to run lint
+ LintLibFlag flags to generate lint libraries
+ LintOpts lint options to control strictness
+ LnCmd command to link two files
+ LoaderLibPrefix loader flags before libraries
+ MacroFile name of machine-dependent config params file
+ MacroIncludeFile <MacroFile>
+ MakeCmd command to run make
+ MvCmd command to rename a file
+ NdbmDefines -D's to turn on use of ndbm routines
+ NeedFunctionPrototypes whether or not to force function prototypes
+ NeedWidePrototypes whether or not to widen function prototypes
+ NoOpCDebugFlags C compiler flags to not debug or optimize
+ OSMajorVersion major version number of operating system
+ OSMinorVersion minor version number of operating system
+ OptimizedCDebugFlags C compiler flags to turn on optimization
+ PexCDebugFlags special -D's for PEX
+ PreProcessCmd command to run /lib/cpp on scripts
+ RanlibCmd command to clean up libraries
+ RanlibInstFlags flags to ranlib after copying
+ RmCmd command to delete files
+ ServerCCOptions server C compiler options to override defaults
+ ServerCcCmd command to run C compiler in server
+ SharedCodeDef -D's to turn on sharable code in libraries
+ SharedLibraryDef -D's to turn on use of shared libraries
+ StandardCppDefines -D's for running cpp
+ StandardDefines -D's for running C compiler
+ StandardIncludes -I's for running C compiler
+ StripInstalledPrograms boolean for sites that want to install -s
+ SystemV boolean for systems that are at least SVR2
+ TOPDIR relative path to top of sources
+ TagsCmd command to run tags
+ UNCOMPRESSPATH command to run uncompress
+ UnalignedReferencesAllowed boolean for unaligned copies ok
+ UsrLibDir directory in which to install libraries
+
+
+Project.tmpl provides defaults for the following variables:
+
+ AdmDir directory containing system log files
+ AllocateLocalDefines -D's to turn on alloca()
+ AwmDir directory containing awm config files
+ BDFTOSNFFILT command to run bdftosnf
+ BandAidLibraryNeeded boolean for systems that need extra Xlib stuff
+ BandAidLibraryObjects Xlib object files to merge in
+ BandAidLibrarySources Xlib source files to merge in
+ BinDir directory in which to install programs
+ BuildExamples boolean controlling make of examples stuff
+ BuildIncRoot relative path to location of headers in build
+ BuildIncTop path from build includes directory to top
+ BuildServer boolean controlling make of server stuff
+ BuildXawBC boolean controlling R3 compatibility in Xaw
+ ConfigDir install directory for config files
+ ConnectionFlags -D's for supported transports
+ ContribDir location of user-contributed sources
+ DebugLibX boolean for compiling extra Xlib -g
+ DebugLibXArchive boolean for building extra libX11_g.a
+ DebugLibXaw boolean for compiling/building) libXaw_g
+ DebugLibXext boolean for compiling/building) libXext_g
+ DebugLibXmu boolean for compiling/building) libXmu_g
+ DebugLibXt boolean for compiling/building) libXt_g
+ DebugOldLibX boolean for compiling/building) liboldX_g
+ DefaultFontPath default server font path
+ DefaultRGBDatabase default server rgb color database
+ DefaultSystemPath default system xdm PATH environment variable
+ DefaultSystemShell default /bin/sh
+ DefaultUserPath default user xdm PATH environment variable
+ DependCmd command to run makedepend
+ DependDir build directory containing makedepend program
+ DoInstallExtensionsIntoXlib merge -lXext into -lX11
+ ExtensionDefines -D's for extensions
+ FontCompilerFlags flags for bdftosnf
+ FontDefines -D's to turn on font options
+ FontDir directory in which to install fonts
+ FontFilters -D's to specify font conversion filters
+ GwmDir directory in which to install gwm config stuff
+ HasInputExtension boolean for systems that want XInput extension
+ IncRoot parent directory of installed header files
+ InstallAppDefFiles boolean for installing new app defaults files
+ InstallOldHeaderFiles boolean for installing R3-compatible headers
+ InstallXdmConfig boolean for installing xdm config files
+ InstallXinitConfig boolean for installing xinit files
+ LibDir directory in which to install X11 data files
+ LibManSuffix man suffix for library pages
+ LibmanDir directory in which to install library man pages
+ LibraryDefines -D's for libraries
+ LintlibDir directory in which to install lint libs
+ ManDir directory in which to install program man pages
+ ManDirectoryRoot parent of man directories relative to root
+ ManPath full path of parent directory
+ ManSourcePath common prefix of man page directories
+ ManSuffix man suffix for programs
+ NeedBerklibInXlib boolean for systems that need BSD emulation
+ NeedDefaultDepLibs boolean for enabling default DEPLIBS
+ PrimaryScreenResolution resolution of default server screen
+ ProfileLibX boolean for compiling -p Xlib
+ ProfileLibXArchive boolean for building libX11_p
+ ProfileLibXaw boolean for compiling/building libXaw_p
+ ProfileLibXext boolean for compiling/building libXext_p
+ ProfileLibXmu boolean for compiling/building libXmu_p
+ ProfileLibXt boolean for compiling/building libXt_p
+ ProfileOldLibX boolean for compiling/building liboldX_p
+ ProjectX boolean indicating this is the X Window System
+ RemoveTargetProgramByMoving boolean for rm -f that doesn't
+ SHELLPATH -D for /bin/sh
+ ServerCDebugFlags server debug/opt compiler flags
+ ServerDefines -D's for server
+ SharedLibX boolean for making sharable libX11
+ SharedLibXaw boolean for making sharable libXaw
+ SharedLibXext boolean for making sharable libXext
+ SharedLibXmu boolean for making sharable libXmu
+ SharedLibXt boolean for making sharable libXt
+ SharedOldLibX boolean for making sharable liboldX
+ SharedOldXRev version number for shared libX11
+ SharedXawRev version number for shared libXaw
+ SharedXextRev version number for shared libXext
+ SharedXlibRev version number for shared libXmu
+ SharedXmuRev version number for shared libXt
+ SharedXtRev version number for shared liboldX
+ TwmDir directory in which to install twm config files
+ UNCOMPRESSFILT -D of command to run uncompress
+ UseCCMakeDepend boolean for using alternate makedepend script
+ XAppLoadDir directory in which to install app defaults
+ XawClientDepLibs DEPLIBS for clients that use Xaw
+ XawClientLibs LOCAL_LIBRARIES for clients that use Xaw
+ XdmConfigurationSubdirectory name of default xdm configuration
+ XdmDir directory in which to install xdm files
+ XinitDir directory in which to install xinit files
+ ZBDFTOSNFFILT -D to run uncompress and bdftosnf
+
+
+4. Site-specific site.def file
+
+The site.def file is used to set configuration parameters that apply to all all
+servers in a given site. It should use #ifndef so that servers may still
+override it. The second use for site.def is to define installation directories
+and flags. The following additional build parameters are defined:
+
+ HasXcuWidgets include Xcu make variables in Makefiles
+ HasXwWidgets include Xw make variables in Makefiles
+
+
+
+5. Imakefiles
+
+Individual Imakefiles may use any of the macros defined in Imake.rules. Many
+of these rules use auxillary make variables:
+
+ FILE used by lint1 phase
+ INSTALLFLAGS used by default installs
+ LINTLIBS used by NormalLintTarget
+ LOCAL_LIBRARIES used by ComplexProgramTarget
+ MAKEFILE_SUBDIR used by MakeMakeSubdirs
+ OBJS used by ComplexProgramTarget
+ OBJS1 used by ComplexProgramTarget_1
+ OBJS2 used by ComplexProgramTarget_2
+ OBJS3 used by ComplexProgramTarget_3
+ PROGRAM used by ComplexProgramTarget
+ PROGRAMS used by ComplexProgramTarget_1
+ SRCS used by DependTarget
+ SRCS1 used by DependTarget
+ SRCS2 used by DependTarget
+ SRCS3 used by DependTarget
+
+The easiest way to write an Imakefile is to find another one that does the
+same thing and modify it.
+
+The most important guidelines are that the X Libraries be refered to by their
+make variables names (e.g. $(XLIB)) rather than -llib, and should go in
+LOCAL_LIBRARIES rather than SYSTEM_LIBRARIES (which is only for things like
+-lm).
+