Provided by: xutils-dev_7.7+5ubuntu2_amd64 bug

NAME

       imake - C preprocessor interface to the make utility

SYNOPSIS

       imake  [ -Ddefine ] [ -Idir ] [ -Udefine ] [ -Ttemplate ] [ -f filename ] [ -C filename ] [ -s filename ]
       [ -e ] [ -v ]

DESCRIPTION

       Imake is used to generate Makefiles from a template, a set of cpp macro functions,  and  a  per-directory
       input  file  called  an Imakefile.  This allows machine dependencies (such as compiler options, alternate
       command names, and special make rules) to be kept separate from the descriptions of the various items  to
       be built.

OPTIONS

       The following command line options may be passed to imake:

       -Ddefine
               This option is passed directly to cpp.  It is typically used to set directory-specific variables.
               For example, the X Window System used this flag to set  TOPDIR  to  the  name  of  the  directory
               containing  the  top  of  the  core distribution and CURDIR to the name of the current directory,
               relative to the top.

       -Idirectory
               This option is passed directly to cpp.  It is typically used to indicate the directory  in  which
               the imake template and configuration files may be found.

       -Udefine
               This  option  is  passed directly to cpp.  It is typically used to unset variables when debugging
               imake configuration files.

       -Ttemplate
               This option specifies the name of the master template file  (which  is  usually  located  in  the
               directory specified with -I) used by cpp.  The default is Imake.tmpl.

       -f filename
               This option specifies the name of the per-directory input file.  The default is Imakefile.

       -C filename
               This  option specifies the name of the .c file that is constructed in the current directory.  The
               default is Imakefile.c.

       -s filename
               This option specifies the name of the make description file to be generated but make  should  not
               be  invoked.   If the filename is a dash (-), the output is written to stdout.  The default is to
               generate, but not execute, a Makefile.

       -e      This option indicates the imake should execute the generated Makefile.  The default is  to  leave
               this to the user.

       -v      This  option  indicates that imake should print the cpp command line that it is using to generate
               the Makefile.

HOW IT WORKS

       Imake invokes cpp with any -I or -D flags passed on the command line  and  passes  the  name  of  a  file
       containing the following 3 lines:

                 #define IMAKE_TEMPLATE "Imake.tmpl"
                 #define INCLUDE_IMAKEFILE <Imakefile>
                 #include IMAKE_TEMPLATE

       where Imake.tmpl and Imakefile may be overridden by the -T and -f command options, respectively.

       The  IMAKE_TEMPLATE  typically  reads in a file containing machine-dependent parameters (specified as cpp
       symbols), a site-specific parameters file, a  file  defining  variables,  a  file  containing  cpp  macro
       functions  for  generating  make rules, and finally the Imakefile (specified by INCLUDE_IMAKEFILE) in the
       current directory.  The Imakefile uses the macro functions to indicate  what  targets  should  be  built;
       imake takes care of generating the appropriate rules.

       Imake  configuration files contain two types of variables, imake variables and make variables.  The imake
       variables are interpreted by cpp when imake is run.   By  convention  they  are  mixed  case.   The  make
       variables  are  written into the Makefile for later interpretation by make.  By convention make variables
       are upper case.

       The rules file (usually named Imake.rules in the configuration directory) contains a variety of cpp macro
       functions  that  are configured according to the current platform.  Imake replaces any occurrences of the
       string ``@@'' with a newline to allow macros that generate  more  than  one  line  of  make  rules.   For
       example, the macro

        #define      program_target(program, objlist)        @@\
       program:        objlist         @@\
               $(CC)  -o  $@  objlist  $(LDFLAGS)

       when called with program_target(foo, foo1.o  foo2.o) will expand to

       foo:    foo1.o  foo2.o
               $(CC)  -o  $@  foo1.o  foo2.o  $(LDFLAGS)

       Imake  also  replaces  any  occurrences  of the word ``XCOMM'' with the character ``#'' to permit placing
       comments in the Makefile without causing ``invalid directive'' errors from the preprocessor.

       Some complex imake macros require generated make variables local to each invocation of the  macro,  often
       because their value depends on parameters passed to the macro.  Such variables can be created by using an
       imake variable of the form XVARdefn, where n  is  a  single  digit.   A  unique  make  variable  will  be
       substituted.   Later occurrences of the variable XVARusen will be replaced by the variable created by the
       corresponding XVARdefn.

       On systems whose cpp reduces multiple tabs and spaces to a single space, imake attempts to put  back  any
       necessary  tabs  (make  is  very  picky  about the difference between tabs and spaces).  For this reason,
       colons (:) in command lines must be preceded by a backslash (\).

USE WITH THE X WINDOW SYSTEM

       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.

       As  mentioned  above,  two  special variables, TOPDIR and CURDIR, are set to make referencing files using
       relative path names easier.  For example, the following command is generated automatically to  build  the
       Makefile in the directory lib/X/ (relative to the top of the sources):

            %  ../.././config/imake  -I../.././config  \
                 -DTOPDIR=../../.   -DCURDIR=./lib/X
       When building X programs outside the source tree, a special symbol UseInstalled is defined and TOPDIR and
       CURDIR are omitted.  If the configuration files have been properly installed, the script xmkmf(1) may  be
       used.

INPUT FILES

       Here is a summary of the files read by imake as used by X.  The indentation shows what files include what
       other files.
           Imake.tmpl  generic variables
               site.def        site-specific, BeforeVendorCF defined
               *.cf    machine-specific
                   *Lib.rules  shared library rules
               site.def        site-specific, AfterVendorCF defined
               Imake.rules     rules
               Project.tmpl    X-specific variables
                   *Lib.tmpl   shared library variables
               Imakefile
                   Library.tmpl        library rules
                   Server.tmpl server rules
                   Threads.tmpl        multi-threaded rules

       Note that site.def gets included twice, once before the *.cf file and once  after.   Although  most  site
       customizations  should be specified after the *.cf file, some, such as the choice of compiler, need to be
       specified before, because other variable settings may depend on them.

       The first time site.def is included, the variable BeforeVendorCF is defined, and  the  second  time,  the
       variable  AfterVendorCF  is  defined.   All  code in site.def should be inside an #ifdef for one of these
       symbols.

FILES

       Imakefile.c
              temporary input file for cpp

       /tmp/Imf.XXXXXX
              temporary Makefile for -s

       /tmp/IIf.XXXXXX
              temporary Imakefile if specified Imakefile uses # comments

       /usr/bin/cpp
              default C preprocessor

SEE ALSO

       make(1), xmkmf(1)

       Paul DuBois
              imake-Related Software and Documentation, http://www.snake.net/software/imake-stuff/

       Paul DuBois
              Software Portability with imake, Second Edition, O'Reilly & Associates, 1996.

       S. I. Feldman,
              Make — A Program for Maintaining Computer Programs

ENVIRONMENT VARIABLES

       The following environment variables may be set, however their use is not recommended  as  they  introduce
       dependencies that are not readily apparent when imake is run:

       IMAKEINCLUDE
            If  defined,  this  specifies  a  ``-I''  include  argument  to  pass  to the C preprocessor.  E.g.,
            ``-I/usr/X11/config''.

       IMAKECPP
            If defined, this should be a valid path to a preprocessor program.   E.g.,  ``/usr/local/cpp''.   By
            default, imake will use cc -E or /usr/bin/cpp, depending on the OS specific configuration.

       IMAKEMAKE
            If defined, this should be a valid path to a make program, such as ``/usr/local/make''.  By default,
            imake will use whatever make program is found using execvp(3).  This variable is only  used  if  the
            ``-e'' option is specified.

AUTHOR

       Todd Brunhoff, Tektronix and MIT Project Athena; Jim Fulton, MIT X Consortium