The xorg-cf-files package contains the data files for the imake utility, defining the known settings for a wide variety of platforms (many of which have not been verified or tested in over a decade), and for many of the libraries formerly delivered in the X.Org monolithic releases. The X Window System used imake extensively up through the X11R6.9 release, for both full builds within the source tree and external software. X has since moved to GNU autoconf and automake for its build system in X11R7.0 and later releases, but still maintains imake for building existing external software programs that have not yet converted. More information about Imake and its usage may be found in the resources at: http://www.snake.net/software/imake-stuff/ http://www.kitebird.com/imake-book/ All questions regarding this software should be directed at the Xorg mailing list: http://lists.freedesktop.org/mailman/listinfo/xorg Please submit bug reports to the Xorg bugzilla: https://bugs.freedesktop.org/enter_bug.cgi?product=xorg The master development code repository can be found at: git://anongit.freedesktop.org/git/xorg/util/cf http://cgit.freedesktop.org/xorg/util/cf For patch submission instructions, see: http://www.x.org/wiki/Development/Documentation/SubmittingPatches For more information on the git code manager, see: http://wiki.x.org/wiki/GitPage ------------------------------------------------------------------------------ $Xorg: README,v 1.4 2000/08/18 04:03:58 coskrey Exp $ $XFree86: xc/config/cf/README,v 1.20 2003/04/14 20:35:50 herrb Exp $ The easiest way to write an Imakefile is to find another one that does something similar and copy/modify it! To change any of these variables, edit the site.def file. Imake.tmpl provides defaults for the following variables: AlternateIncRoot compiler needs -I to find project includes AlternateUsrLibDir linker needs -L to find project libraries ArCmd command used to create libraries ArCmdBase program name part of ArCmd ArAddCmd flags to have ArCmdBase add files to a library ArExtCmd flags to have ArCmdBase extract files AsCmd command used to run assembler BootstrapCFlags missing cpp symbols needed to get started BourneShell command used to run Bourne Shell CCsuf suffix that C++ source files have CURDIR current directory relative to top of sources CcCmd command to run C compiler CompressCmd command to run compress program ConstructMFLAGS System V option to set MFLAGS make variable CpCmd command to copy one file to another CplusplusCmd command to run C++ compiler CplusplusFilt command to run C++ name demangler CplusplusYaccCmd command to produce C++ source from yacc source CppCmd command to run C preprocessor CrossCompiling cross compiling? (not fully supported) 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 DefaultUsrBin program directory used even if PATH not set DependFlags extra makedepend flags DoRanlibCmd boolean for system uses ranlib EqnCmd command used for eqn ExecableScripts boolean for systems that can exec() #!/bin/sh ExpandManNames boolean to expand man pages names to long form ExtraFilesToClean extra files to remove on make clean ExtraLibraries system-specific libraries need to link ExtraLoadFlags system-specific loader flags FileManSuffix man suffix for file format pages FilesToClean files to delete in make clean FortranCmd command to run Fortran compiler FortranDebugFlags flags for Fortran debug info FortranFlags Fortran compiler flags GzipCmd command to run gzip program HasBSD44Sockets boolean for system has BSD4.4 sockets HasBsdMake use the 4.4BSD variant of the make program? HasBsearch boolean for libc has bsearch() HasBrokenCCForLink boolean for brain damaged cc driver HasCenterLineC boolean for system has CenterLine C compiler HasCenterLineCplusplus boolean for system has CenterLine C++ compiler HasClearmake use Clearcase's clearmake make program? HasCodeCenter boolean for system has CodeCenter HasCookieMaker boolean for system has xauth cookie generator HasCplusplus system has a C++ compiler? HasDECnet system has DECnet? HasFortran boolean for system has Fortran compiler HasGcc boolean for system has GNU gcc compiler HasGcc2 boolean for system has GNU gcc 2.x compiler HasGcc2ForCplusplus use gcc 2 for C++ programs? HasGnuMake use the GNU make program? HasGhostPCL boolean for system has GhostPCL HasGhostScript boolean for system has GhostScript HasKrbIV system has Kerberos version IV support? HasKrb5 system has Kerberos version 5 support? HasLargeTmp boolean for system has /tmp space HasLatex system has LaTeX document preparation software HasLibCrypt boolean for system has libcrypt HasMotif boolean for system has Motif HasMotif2 boolean for system has Motif2 or OpenMotif HasNdbm boolean for system has ndbm routines HasPoll use poll() syscall? HasPurify boolean for system has Purify HasPutenv boolean for libc has putenv() HasSecureRPC boolean for Sun Secure RPC HasSetProcTitle boolean for setproctitle() HasSetUserContext boolean for setusercontext() HasSentinel boolean for system has Sentinel available HasSharedLibraries boolean for system has shared libraries HasShm boolean for System V shared memory HasSockets boolean for system has BSD sockets HasStrcasecmp boolean for system implements str[n]casecmp HasStreams use STREAMS I/O interface? HasSymLinks boolean for system has symbolic links HasTestCenter boolean for system has TestCenter HasVarDirectory boolean for system has /var HasVFork boolean for system has vfork() HasVoidSignalReturn boolean for POSIX signal() procs HasZlib boolean for system has libz IncludeSharedObjectInNormalLib define for static libs to include -fPIC objects on relevant archs IncRoot parent of X11 include directory InstBinFlags install flags for binaries 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 KrbIVIncludes where to include KerberosIV header files from KrbIVLibraries where to load KerberosIV libraries from Krb5Includes where to include Kerberos header files from Krb5Libraries where to load Kerberos libraries from LdCmd command to run loader LdCombineFlags flags for incremental loading LexCmd command to run lex LexLib library for programs using lex output 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 LocalRulesFile site-specific file with additional imake rules LocalTmplFile file with additional imake variables MacroFile name of machine-dependent config params file MacroIncludeFile MakeCmd command to run make Malloc0ReturnsNull boolean for malloc(0) == NULL Malloc0ReturnsNullDefines -D's to build libX11/libXt MathLibrary library for programs using C math functions MkCookieCmd command to generate an xauth cookie MsMacros macro flag for TroffCmd, normally "-ms" MvCmd command to rename a file NdbmDefines -D's to turn on use of ndbm routines NeedConstPrototoypes whether const is supported NeedFunctionPrototypes whether or not to force function prototypes NeedNestedPrototypes whether nested prototypes are supported NeedVarargsPrototypes whether varargs prototypes are supported NeedWidePrototypes whether or not to widen function prototypes NoOpCDebugFlags C compiler flags to not debug or optimize NoRConst YES if const for structs of funcs is bad OSMajorVersion major version number of operating system OSMinorVersion minor version number of operating system OSName operating system name OSTeenyVersion maintenance version number of operating system OptimizedCDebugFlags C compiler flags to turn on optimization XtPopdownConformance XtPopdown conformans to the specification PreProcessCmd command to run /lib/cpp on scripts RanlibCmd command to clean up libraries RanlibInstFlags flags to ranlib after copying ResourceConfigurationManagement boolean for Xt's Resource Configuration Management RmCmd command to delete files ShLibDir directory in which to install 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 SystemV4 boolean for SVR4 systems TOPDIR relative path to top of sources TagsCmd command to run tags TblCmd command to run tbl TroffCmd command to run troff to get PostScript UNCOMPRESSPATH command to run uncompress (obsolete) UnalignedReferencesAllowed boolean for unaligned copies ok UsrLibDir directory in which to install libraries YaccCmd command to run yacc X11.tmpl provides defaults for the following variables: AdmDir directory containing system log files AllocateLocalDefines -D's to turn on alloca() (should be in Imake.tmpl) BDFTOSNFFILT command to run bdftosnf BaseExtensionDefines universal extensions to use BinDir directory in which to install programs BuildAppgroup build AppGroup extension in server BuildCup build Colormap Utilization extension in server BuildDBE build DOUBLE-BUFFER extension BuildDmx build Distributed Multihead X server and extension BuildDPMS build Display Power Management Signaling extension BuildFontServer build font server BuildFonts build pcf fonts BuildIncRoot relative path to location of headers in build BuildIncTop path from build includes directory to top BuildEVI build EVI server extension BuildLBX build LBX (aka X.fast) server extension BuildMultibuffer build Multibuffer extension (obsolete) BuildPlugin build xrx plug-in for web browsers BuildRECORD Build RECORD extension BuildServer build X server BuildXAudio build Audio BuildXAServer build Audio server BuildXCSecurity Build Security Extension BuildXInputExt build X Input extension (requires ddx support, which exists only in Xhp and XFree86) BuildXInputLib build X Input library BuildXKB build X Keyboard Extension? BuildXKBlib build X Keyboard Extension into Xlib? UseXKBInClients Use XKB functions in normal clients? ConfigDir install directory for config files ConnectionFlags -D's for supported transports ContribDir location of user-contributed sources DebugLibFS build libFS_d.a DebugLibICE build libICE_d.a DebugLibSM build libSM_d.a DebugLibX11 build libX11_d.a DebugLibXau build libXau_d.a DebugLibXaw build libXaw_d.a DebugLibXdmcp build libXdmcp_d.a DebugLibXext build libXext_d.a DebugLibXi build libXi_d.a DebugLibXmu build libXmu_d.a DebugLibXt build libXt_d.a DebugLibXtst build libXtst_d.a DebugLibXag build libXag_d.a DebugOldX build liboldX_d.a DefaultCursorTheme name of default cursor theme DefaultFSConfigFile default font server config file 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 DriverManDir directory in which to install driver man pages DriverManSuffix man suffix for driver pages ExtensionDefines -D's for universal extensions ExtensionOSDefines -D's for additional 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 FontOSDefines -D's for which fonts to support ForceNormalLib force building of .a in addition to shared lib GzipFontCompression boolean for using gzip instead of compress HasXdmAuth boolean for using XDM-AUTHORIZATION-1; needs Wraphelp.c, see Release Notes InstallAppDefFiles install new app defaults files over old? InstallFSConfig install fs config file over old? InstallLibManPages boolean for installing library man pages InstallSecurityConfig install server security policy file over old? InstallXdmConfig install xdm config files over old? InstallXinitConfig install xinit config files over old? KrbIVDefines defines for use with KerberosIV LibDir directory in which to install X11 support files LibManSuffix man suffix for library pages LibmanDir directory in which to install library man pages 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 MiscManSuffix man suffix for miscellaneous pages MiscManDir directory in which to install misc man pages NeedDefaultDepLibs boolean for enabling default DEPLIBS NlsDir directory in which to install nls files NormalLibFS build libFS.a NormalLibICE build libICE.a NormalLibSM build libSM.a NormalLibX11 build libX11.a NormalLibXau build libXau.a NormalLibXaw build libXaw.a NormalLibXdmcp build libXdmcp.a NormalLibXext build libXext.a NormalLibXi build libXi.a NormalLibXmu build libXmu.a NormalLibXt build libXt.a NormalLibXtst build libXtst.a NormalLibXag build libXag.a NormalOldX build liboldX.a OsNameDefines If uname(2) unavailable, set to -DOS_NAME=OSName PrimaryScreenResolution resolution of default server screen ProfileLibFS build libFS_p.a ProfileLibICE build libICE_p.a ProfileLibSM build libSM_p.a ProfileLibX11 build libX11_p.a ProfileLibXau build libXau_p.a ProfileLibXaw build libXaw_p.a ProfileLibXdmcp build libXdmcp_p.a ProfileLibXext build libXext_p.a ProfileLibXi build libXi_p.a ProfileLibXmu build libXmu_p.a ProfileLibXt build libXt_p.a ProfileLibXtst build libXtst_p.a ProfileLibXag build libXag_p.a ProfileOldX build liboldX_p.a ProjectX version indicating this is the X Window System RemoveTargetProgramByMoving boolean for rm -f that doesn't SHELLPATH -D for /bin/sh ServerConfigDir directory for server security config files ServerDefines complete -D's for server ServerExtraDefines special -D's for server ServerOSDefines OS -D's for server ServerAssertDefines -DNDEBUG for no assertions, /**/ for assertions SharedLibFS boolean for making sharable libFS.so SharedLibICE boolean for making sharable libICE.so SharedLibSM boolean for making sharable libSM.so SharedLibX11 boolean for making sharable libX11.so SharedLibXau boolean for making sharable libXau.so SharedLibXaw boolean for making sharable libXaw.so SharedLibXdmcp boolean for making sharable libXdmcp.so SharedLibXext boolean for making sharable libXext.so SharedLibXi boolean for making sharable libXi.so SharedLibXmu boolean for making sharable libXmu.so SharedLibXt boolean for making sharable libXt.so SharedLibXtst boolean for making sharable libXtst.so SharedLibXag boolean for making sharable libXag.so SharedOldX boolean for making sharable liboldX.so ShmDefines MIT-SHM define TwmDir directory in which to install twm config files UseCCMakeDepend boolean for using alternate makedepend script UseRgbTxt use rgb.txt file as is instead of DBM-compiled VarDirectory directory in /var for logs, etc., and config VendorHasX11R6_3libXext don't need Security & AppGroup in xrx plug-in XAppLoadDir directory in which to install app defaults XFileSearchPathBase base file search path XFileSearchPathDefault default path to search for app defaults files XInputDefines XINPUT define XMalloc0ReturnsNullDefines -D's specifically for libX11 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 XdmServersType type of xdm Xservers file to install XinitDir directory in which to install xinit files XPrintDir parent of X Print server config directory XprtServer build the X Print server XpRasterDDX include the raster print ddx driver XpColorPclDDX include the color PCL print ddx driver XpMonoPclDDX include the monochrome PCL print ddx driver XpPostScriptDDX include the PostScript print ddx driver XpPdfDDX include the PDF print ddx driver XpSvgDDX include the SVG print ddx driver XmanLocalSearchPath non-standard path for man pages XtErrorPrefix leading text in XtError() msg; eg. 'X Toolkit ' XtWarningPrefix leading text in XtWarning()msg, same as above XtMalloc0ReturnsNullDefines -D's specifically for libXt ZBDFTOSNFFILT -D to run uncompress and bdftosnf (obsolete) Library.tmpl provides defaults for the following variables: AvoidNullMakeCommand for makes that spout about $(_NULLCMD_) LibraryCCOptions special C compiler options for libraries LibraryCDebugFlags library debug/optimize flags to override defs LibraryCcCmd command to run C compiler in libraries LibraryCplusplusOptions special C++ options for libraries LibraryCplusplusDebugFlags library debug/optimize flags for C++ LibraryCplusplusCmd command to run C++ compiler in libraries LibraryDefines -D's for libraries SeparateSharedCompile shared and unshared libs use same binaries? Server.tmpl provides defaults for the following variables: ServerCCOptions server C compiler options to override defaults ServerCcCmd command to run C compiler in server ServerCDebugFlags server debug/opt compiler flags ServerDefines server standard -D's InstallServerSetUID does this system need X server suid to root? Threads.tmpl provides defaults for the following variables: LocalThreads whether to enable multi-threading support LocalThreadsDefines -D flags needed in this directory An Lib.rules file provides defaults for the following variables: HasSharedLibraries boolean for using shared libraries SharedDataSeparation boolean indicating separate data/code SharedCodeDef -D's for compiling shared library files SharedLibraryDef -D's for defining which kind of shared lib ShLibIncludeFile location of the Lib.tmpl file SharedLibraryLoadFlags loader flags when making the library UseExportLists boolean for using an export list PositionIndependentCFlags PIC compiler flags for C PositionIndependentCplusplusFlags PIC compiler flags for C++ Note: PositionIndependentCplusplusFlags is only required if the C and C++ compilers use different flags to build PIC code. The default configuration will try to use PositionIndependentCFlags for both C and C++ compiles. An Lib.tmpl file provides defaults for the following variables: SharedFSReqs required libs for libFS.so SharedFSRev version number for libFS.so SharedICEReqs required libs for libICE.so SharedICERev version number for libICE.so SharedOldXReqs required libs for liboldX.so SharedOldXRev version number for liboldX.so SharedSMReqs required libs for libSM.so SharedSMRev version number for libSM.so SharedX11Reqs required libs for libX11.so SharedX11Rev version number for libX11.so SharedXauReqs required libs for libXau.so SharedXauRev version number for libXau.so SharedXawReqs required libs for libXaw.so SharedXawRev version number for libXaw.so SharedXdmcpReqs required libs for libXdmcp.so SharedXdmcpRev version number for libXdmcp.so SharedXextReqs required libs for libXext.so SharedXextRev version number for libXext.so SharedXiReqs required libs for libXi.so SharedXiRev version number for libXi.so SharedXmuReqs required libs for libXmu.so SharedXmuRev version number for libXmu.so SharedXtReqs required libs for libXt.so SharedXtRev version number for libXt.so SharedXtstReqs required libs for libXtst.so SharedXtstRev version number for libXtst.so SharedXmReqs required libs for libXm.so SharedXmRev version number for libXm.so SharedMrmReqs required libs for libMrm.so SharedMrmRev version number for libMrm.so SharedUilReqs required libs for libUil.so SharedUilRev version number for libUil.so SharedTtReqs required libs for libtt.so SharedTtRev version number for libtt.so SharedPamReqs required libs for libpam.so SharedPamRev version number for libpam.so SharedDtSvcReqs required libs for libDtSvc.so SharedDtSvcRev version number for libDtSvc.so SharedDtSearchReqs required libs for libDtSearch.so SharedDtSearchRev version number for libDtSearch.so SharedDtWidgetReqs required libs for libDtWidget.so SharedDtWidgetRev version number for libDtWidget.so SharedDtHelpReqs required libs for libDtHelp.so SharedDtHelpRev version number for libDtHelp.so SharedDtPrintReqs required libs for libDtPrint.so SharedDtPrintRev version number for libDtPrint.so SharedDtTermReqs required libs for libDtTerm.so SharedDtTermRev version number for libDtTerm.so SharedDtMrmReqs required libs for libDtMrm.so SharedDtMrmRev version number for libDtMrm.so Vendor.cf files and/or site/host specific .def files may define the following variables: ProjectRoot The directory under which the installation will operate. This value will be hard coded into some programs. As a result do not use it to specify the installation directory for a cross compiled system, use DESTDIR to accomplish that task. The following variables are used by some part of the tree: AckToolset programs/Xserver/hw/xfree86 BuildChooser build the xdm chooser program? SharedLibXdmGreet use xdm shared dynamic greeter library? LatexCmd command to run LaTeX on a document DvipsCmd command to turn .dvi file into PostScript MotifBC using Motif 1.1.1, 1.1.2, or 1.1.3? GetValuesBC compat GetValues behavior for broken apps? NeedBerklib application needs libXbsd? SvgaConfig default SVGA configuration HasGetReturnAddress util/memleak HasShadowPasswd system has getspnam() function XnestServer build X server with Xlib-based ddx XVirtualFramebufferServer build X server with virtual memory framebuffer WebServer host:port of your Web server (see programs/xrx) HtmlDir path used by Web server for HTML and RX docs CgiBinDir path used by Web server for CGI programs ProxyManager ICE network ID to contact a running proxymngr XdmxServer build Distributed Multihead X server Make Variables The following make variables are used by imake rules and may be set in an individual Imakefile. DEFINES program-specific -D flags and other arguments to pass to the C compiler, lint, and makedepend. DEPEND_DEFINES program-specific flags in addition to $(DEFINES) to pass to lint and makedepend. This is usually used when there are special compilation rules for individual files, and the defines passed to those files affect makedepend results. If they can be passed to all files during the makedepend step without affecting the results for other files, DEPEND_DEFINES is used to do that. Example is the Xlib Imakefile. INCLUDES program-specific -I flags. HEADERS .h files to install with "make includes" and "make install". If this Imakefile includes Library.tmpl there are no headers, include this line instead of a HEADERS definition: #define LibHeaders NO REQUIREDLIBS when building a shared library, other libraries used by this library that should be referenced at link time. LINTLIBS program-specific libraries for lint. LOCAL_LDFLAGS program-specific flags for the linker. LOCAL_LIBRARIES project libraries (usually specified as -lname) needed by this program. For example, "-lXt -lXext -lX11". Used by SimpleProgramTarget and ComplexProgramTarget* rules. Do not include any system-specific libraries here. SYS_LIBRARIES system libraries (usually specified as -lname) needed by this program. For example "MathLibrary". Do not include any system-specific libraries such as "-lnsl" here; they are automatically added to the link command by the vendor-specific .cf file. SUBDIRS for an Imakefile in a directory containing subdirectories, this names the subdirectories. Such an Imakefile also needs to #define IHaveSubdirs and call MakeSubdirs() and DependSubdirs(). MANSUFFIX suffix used by InstallManPage* rules. May be set to $(LIBMANSUFFIX), $(FILEMANSUFFIX), or $(MISCMANSUFFIX) in directories for libraries or data files. Rule-specific variables that may be set in an individual Imakefile. If you aren't using these rules, you may need variables with a similar function, but you need not use these names. However, following these conventions may make your Imakefile easier to read and maintain. DEPLIBS library dependencies for ComplexProgramTarget SRCS source files used by ComplexProgramTarget and DependTarget. OBJS object files used by ComplexProgramTarget PROGRAMS default target used with ComplexProgramTarget_(n) SRCS1 source files used by ComplexProgramTarget_1 OBJS1 object files used by ComplexProgramTarget_1 DEPLIBS1 library dependencies for ComplexProgramTarget_1 SRCS2 source files used by ComplexProgramTarget_2 OBJS2 object files used by ComplexProgramTarget_2 DEPLIBS2 library dependencies for ComplexProgramTarget_2 SRCS3 source files used by ComplexProgramTarget_3 OBJS3 object files used by ComplexProgramTarget_3 DEPLIBS3 library dependencies for ComplexProgramTarget_3 Variables that can be set on the make command line: DESTDIR directory under which "make install" should install instead of "/"; used only for testing "make install" rules, binary package building, and specifying alternative installation directories for cross compiles. FILE file for "lint1" target to run lint on. CDEBUGFLAGS -g and/or -O flag to control C compiler optimization. CXXDEBUGFLAGS -g and/or -O flag to control C++ optimization. LDSTRIPFLAGS flag to have linker strip objects (typically -x). Typically set to the empty string to prevent the linker from stripping objects; use this way when setting CDEBUGFLAGS to "-g". These variables are set in project-specific files such as X11.tmpl. They should NOT be set in an Imakefile. These variables are sometimes misused; they are included here to remind Imakefile writers NOT to use them: EXTRA_DEFINES project-specific -D flags EXTRA_INCLUDES project-specific -I flags EXTRA_ICONFIGFILES Additional project-specific imake config files to add to ICONFIGFILES. This is a list of files that define variables that might affect compilation of some files. Many other make variables are set up by the imake config files and can be used in an Imakefile. The easiest way to discover them is to look at the Makefile generated by an empty Imakefile. Comments Use C comment syntax in an Imakefile for comments that should not appear in the resulting Makefile. Use "XCOMM" at the start of each line to produce a comment that will appear in the Makefile. (The "XCOMM" will be translated into the Makefile comment character "#" by imake.) Do NOT use "#" as a comment character in Imakefiles; it confuses the C preprocessor used by imake on some systems. Imake variables Don't abuse the variables in X11.tmpl that describe particular pieces of X by using them to describe your own subsystems. Instead, create new variables that are defaulted using Imake.tmpl variables. Examples Since the easiest way to write an Imakefile is to start with one that works, here are some short, easy-to-read Imakefile examples in the X distribution: with subdirs: config/Imakefile library: lib/Xau/Imakefile simple program: programs/xdpyinfo/Imakefile complex progs: programs/xclipboard/Imakefile complex prog: programs/xmodmap/Imakefile Common Rules Here are some of the common rules for building programs. How to use them is described in Imake.rules and in the O'Reilly book "Software Portability with imake." Basic program-building rules All of these except NormalProgramTarget also generate rules to install the program and its manual page, and to generate dependencies. SimpleProgramTarget Use if there is only one program to be made and it has only one source file. ComplexProgramTarget Use if there is only one program to be made and it has multiple source files. Set SRCS to the names of the source files, set OBJS to the names of the object files, and set DEPLIBS to the libraries that this program depends on. ComplexProgramTarget_1 Like ComplexProgramTarget, but uses SRCS1, OBJS1, and DEPLIBS1 and can be used with ComplexProgramTarget_2 and ComplexProgramTarget_3 to build up to three programs in the same directory. Set PROGRAMS to the programs built by all of these rules. For more than 3 programs, use NormalProgramTarget for each. ComplexProgramTarget_2 Use after ComplexProgramTarget_1 for the second program in a directory. Uses SRCS2, OBJS2, and DEPLIBS2. ComplexProgramTarget_3 Use after ComplexProgramTarget_2 for the third program in a directory. Uses SRCS3, OBJS3, and DEPLIBS3. NormalProgramTarget Build a program. Can be used multiple times with different arguments in the same Imakefile. Lower level rules, often used with NormalProgramTarget InstallProgram install a program. InstallManPage install a manual page. InstallDirectory install a directory. DependTarget() include once at end of Imakefile with NormalProgramTarget rules or that uses Library.tmpl. Generates dependencies for files named in SRCS. Manual page rules, commonly used only in special documentation directories: InstallManPage InstallManPageLong InstallManPageAliases Other rules: SpecialCObjectRule Compile a C file with special flags. AllTarget Declare additional targets to build. InstallAppDefaults Install X application defaults file. Imakefile for directory with subdirectories XCOMM this is a sample Imakefile for a directory containing subdirectories #define IHaveSubdirs #define PassCDebugFlags CDEBUGFLAGS="$(CDEBUGFLAGS)" SUBDIRS = list of subdirs ... MakeSubdirs($(SUBDIRS)) DependSubdirs($(SUBDIRS)) Common Targets These targets are typically NOT defined explicitly by the Imakefile writer; rather they are generated automatically by imake rules. They are listed here for the convenience of people using the resulting Makefile, not people writing the original Imakefile. all Default rule; builds whatever is in this directory. Makefile Remake the Makefile (use after changing Imakefile). Run "make depend" after. Makefiles Remake all Makefiles in subdirectories. (Does nothing if no subdirectories.) Run "make depend" after. includes Generate and install in the tree any necessary header files. depend Update dependencies in the Makefile calculated by examining the source files. install Install what "make all" built on the system. install.man Install manual pages. clean Remove built objects and other derived files. lint Run lint. tags Create a tags file.