Annotation of researchv9/X11/src/X.V11R1/util/imake/imake.1, revision 1.1

1.1     ! root        1: .TH IMAKE 1 "Jan 6, 1987"
        !             2: .UC 4
        !             3: .SH NAME
        !             4: imake \- C preprocessor interface to the make utility
        !             5: .SH SYNOPSIS
        !             6: .B imake
        !             7: [
        !             8: .B \-Ddefine
        !             9: ] [
        !            10: .B \-Idirectory
        !            11: ] [
        !            12: .B \-T
        !            13: ] [
        !            14: .B \-f
        !            15: .I imakefile
        !            16: ] [
        !            17: .B \-s
        !            18: [
        !            19: .I makefile
        !            20: ]] [
        !            21: .B \-v
        !            22: ] [ make options or arguments ]
        !            23: .SH DESCRIPTION
        !            24: .I Imake
        !            25: takes a template and an Imakefile and runs the C preprocessor on it producing a
        !            26: temporary makefile in /usr/tmp.  It then runs
        !            27: .I make
        !            28: on this pre-processed makefile.
        !            29: See IMPLEMENTATION DETAIL below.
        !            30: .PP
        !            31: By default,
        !            32: .I Imake
        !            33: looks first for the file named
        !            34: .I Imakefile
        !            35: and if that fails, looks for the file named
        !            36: .I imakefile,
        !            37: both in the current working directory.
        !            38: .SH OPTIONS
        !            39: .TP 5
        !            40: .B \-Ddefine
        !            41: Define.
        !            42: This argument is passed on to the preprocessor, cpp.
        !            43: This can also be accomplished with the environment variable,
        !            44: IMAKEINCLUDE.
        !            45: .TP 5
        !            46: .B \-Idirectory
        !            47: Include directory.
        !            48: This argument is passed on to the preprocessor, cpp.
        !            49: This can also be accomplished with the environment variable,
        !            50: IMAKEINCLUDE.
        !            51: .TP 5
        !            52: .B \-T template
        !            53: Template file.
        !            54: Specifies the template file to be initially included by cpp,
        !            55: instead of the default file
        !            56: .I Imake.template.
        !            57: .TP 5
        !            58: .B \-f imakefile
        !            59: File.
        !            60: Specifies an alternate imakefile for
        !            61: .I imake to use.
        !            62: .TP 5
        !            63: .B \-s [ filename ]
        !            64: Show.
        !            65: .I Imake
        !            66: will preprocess the imakefile,
        !            67: and direct it to the standard output.
        !            68: The
        !            69: .I make
        !            70: program will not be invoked.
        !            71: If the filename argument is present
        !            72: the output will be directed instead to the named file.
        !            73: Typically, this is
        !            74: .I \-s Makefile.
        !            75: .TP 5
        !            76: .B \-v
        !            77: Verbose.
        !            78: .I Imake
        !            79: will display the command line it uses to invoke the C preprocessor before
        !            80: actually doing so.
        !            81: .SH "ENVIRONMENT VARIABLES"
        !            82: Imake consults its environment for three variables:
        !            83: .TP 5
        !            84: .B IMAKEINCLUDE
        !            85: If defined, this should be a valid include argument for the
        !            86: C preprocessor.  E.g. ``-I/usr/include/local''.
        !            87: Actually, any valid
        !            88: .I cpp
        !            89: argument will work here.
        !            90: .TP 5
        !            91: .B IMAKECPP
        !            92: If defined, this should be a valid path to a preprocessor program.
        !            93: E.g. ``/usr/local/cpp''.
        !            94: By default,
        !            95: .I imake
        !            96: will use /lib/cpp.
        !            97: .TP 5
        !            98: .B IMAKEMAKE
        !            99: If defined, this should be a valid path to a make program.
        !           100: E.g. ``/usr/local/make''.
        !           101: By default,
        !           102: .I imake
        !           103: will use whatever
        !           104: .I make
        !           105: program is found using
        !           106: .I execvp(3).
        !           107: .SH IMPLEMENTATION DETAIL
        !           108: .I Imake
        !           109: first determins the name of the imakefile from the command line \-f
        !           110: flag or from the content of the current directory, depending
        !           111: on whether Imakefile or imakefile exist.
        !           112: We shall call this \fI<imakefile>\fP.
        !           113: It also determines the name of the template
        !           114: from the command line \-T flag or the default, Imake.template.
        !           115: Call this \fI<template>\fP.
        !           116: .PP
        !           117: The program then examines the imakefile looking for any lines
        !           118: that begin with a '#' character.  If it finds one,
        !           119: it checks to see if it is a valid C preprocessor directive
        !           120: from the set
        !           121: .I #include,
        !           122: .I #define,
        !           123: .I #undef,
        !           124: .I #ifdef,
        !           125: .I #else,
        !           126: .I #endif
        !           127: or
        !           128: .I #if.
        !           129: If it is,
        !           130: .I imake
        !           131: leaves it unchanged.
        !           132: If not,
        !           133: it pads the beginning of the line with a null C comment ``/**/''
        !           134: so that the line will by untouched by the preprocessor.
        !           135: This is usefull for preserving the use of
        !           136: .I make
        !           137: style ``#'' comments.
        !           138: If any lines needed to be changed,
        !           139: a temporary file named /tmp/tmp-imake.* will receive the "padded"
        !           140: imakefile.
        !           141: Call this file, whether it needed to be changed or not,
        !           142: \fI<input-imakefile>\fP.
        !           143: .PP
        !           144: Then the program
        !           145: starts up the C preprocessor with the command line
        !           146: .RS 5
        !           147: .sp 1
        !           148: /lib/cpp -I. -I/usr/lib/local/imake.includes -Uunix
        !           149: .sp 1
        !           150: .RE
        !           151: perhaps prepending the argument list with the IMAKEINCLUDE
        !           152: environment variable,
        !           153: the \fI\-I\fP, and the \fI\-D\fP command line arguments;
        !           154: or changing the preprocessor program to the IMAKECPP environment variable.
        !           155: Standard input is from the
        !           156: .I imake
        !           157: program and standard output is directed to a temporary file in
        !           158: /usr/tmp/tmp-make.*;
        !           159: unless there was an argument to the \-s flag, in which case
        !           160: output is directed there.
        !           161: Call this file \fI<makefile>\fP.
        !           162: The first three lines provided as input to the preprocessor
        !           163: will be
        !           164: .RS 5
        !           165: .sp 1
        !           166: #define IMAKE_TEMPLATE          "\fI<template>\fP"
        !           167: .br
        !           168: #define INCLUDE_IMAKEFILE       "\fI<input-imakefile>\fP"
        !           169: .br
        !           170: #include IMAKE_TEMPLATE
        !           171: .sp 1
        !           172: .RE
        !           173: .PP
        !           174: Note that this implies that the template must have, at a bare minimum,
        !           175: the line
        !           176: .RS 5
        !           177: .sp 1
        !           178: #include INCLUDE_IMAKEFILE
        !           179: .sp 1
        !           180: .RE
        !           181: .PP
        !           182: Next,
        !           183: .I imake
        !           184: reads the entire output of the preprocessor into memory,
        !           185: stripping off any double '@' signs encountered in the input.
        !           186: This is very useful for writing cpp multi-line macros that
        !           187: won't be coalesced into a single line the way
        !           188: .I cpp
        !           189: normally does.
        !           190: In addition, trailing white space on any line is thrown away to keep
        !           191: .I make
        !           192: from getting upset;
        !           193: and most blank lines are thrown
        !           194: away.
        !           195: For example, the macro
        !           196: .ta .8i 1.6i 5i
        !           197: .nf
        !           198: 
        !           199: #define        program_target(program, objlist)        @@\e
        !           200: program:       objlist         @@\e
        !           201:        $(CC) -o $@ objlist $(LDFLAGS)
        !           202: 
        !           203: .fi
        !           204: when called with
        !           205: .I "program_target(foo, foo1.o foo2.o)"
        !           206: will expand to
        !           207: .nf
        !           208: 
        !           209: foo:   foo1.o foo2.o
        !           210:        $(CC) -o $@ foo1.o foo2.o $(LDFLAGS)
        !           211: 
        !           212: .fi
        !           213: .DT
        !           214: .PP
        !           215: Finally,
        !           216: if the
        !           217: .B -s
        !           218: option has not been specified,
        !           219: .I imake
        !           220: calls the program
        !           221: .RS 5
        !           222: .sp 1
        !           223:        make MAKE=\fI<program>\fP MAKEFILE=\fI<imakefile>\fP -f \fI<makefile>\fP makeargs
        !           224: .sp 1
        !           225: .RE
        !           226: where ``makeargs'' is replaced with any arguments found on the command line.
        !           227: .SH FILES
        !           228: .ta 3i
        !           229: /usr/tmp/tmp-imake.\fInnnnnn\fP        temporary input file for cpp
        !           230: .br
        !           231: /usr/tmp/tmp-make.\fInnnnnn\fP temporary input file for make
        !           232: .br
        !           233: /lib/cpp       default C preprocessor
        !           234: .br
        !           235: /usr/lib/local/imake.includes  default directory for include files.
        !           236: .DT
        !           237: .SH "SEE ALSO"
        !           238: make(1)
        !           239: .br
        !           240: S. I. Feldman
        !           241: .I
        !           242: Make \- A Program for Maintaining Computer Programs
        !           243: .SH "AUTHOR"
        !           244: Todd Brunhoff; Tektronix, inc. and Project Athena, MIT.
        !           245: .SH "BUGS"
        !           246: The C-preprocessor, Cpp,
        !           247: on a Sun compresses all tabs in a macro expansion to a single
        !           248: space.  It also replaces an escaped newline with a space instead of
        !           249: deleting it.  There is a kludge in the code to try to get around this
        !           250: but it depends on the fact that all targets have a ':' somewhere in
        !           251: the line and all actions for a target do not have a ':'.
        !           252: .PP
        !           253: You can use \fImake\fP-style '#' comments in the Imakefile, but
        !           254: not in the template or any other included files.  If you want
        !           255: them, you must preceed them with a C null comment, /**/.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.