|
|
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, /**/.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.