Provided by: xutils-dev_7.7~1_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