|
|
1.1 root 1: .TH MK 1
2: .SH NAME
3: mk, membername \- maintain (make) related files
4: .SH SYNOPSIS
5: .B mk
6: [
7: .B -f
8: .I mkfile
9: ] ...
10: [
11: .I option ...
12: ]
13: [
14: .I target ...
15: ]
16: .PP
17: .B membername
18: .I aggregate ...
19: .SH DESCRIPTION
20: .I Mk
21: uses the dependency rules specified in
22: .I mkfile
23: to control the update (usually by compilation) of
24: .I targets
25: (usually files)
26: from the source files upon which they depend.
27: The
28: .I mkfile
29: (default
30: .LR mkfile )
31: contains a
32: .I rule
33: for each target that identifies the files and other
34: targets upon which it depends and an
35: .IR rc (1)
36: script, a
37: .IR recipe ,
38: to update the target.
39: The script is run if the target does not exist
40: or if it is older than any of the files it depends on.
41: .I Mkfile
42: may also contain
43: .I meta-rules
44: that define actions for updating implicit targets.
45: If no
46: .I target
47: is specified, the target of the first rule (not meta-rule) in
48: .I mkfile
49: is updated.
50: .PP
51: The environment variable
52: .B $NPROC
53: determines how many targets may be updated simultaneously;
54: Plan 9 sets
55: .B $NPROC
56: automatically to the number of CPUs on the current machine.
57: .PP
58: Options are:
59: .TP \w'\fL-d[egp]\ 'u
60: .B -a
61: Assume all targets to be out of date.
62: Thus, everything is updated.
63: .PD 0
64: .TP
65: .BR -d [ egp ]
66: Produce debugging output
67: .RB ( p
68: is for parsing,
69: .B g
70: for graph building,
71: .B e
72: for execution).
73: .TP
74: .B -e
75: Explain why each target is made.
76: .TP
77: .B -i
78: Force any missing intermediate targets to be made.
79: .TP
80: .B -k
81: Do as much work as possible in the face of errors.
82: .TP
83: .B -n
84: Print, but do not execute, the commands
85: needed to update the targets.
86: .TP
87: .B -s
88: Make the command line arguments sequentially rather than in parallel.
89: .TP
90: .B -t
91: Touch (update the modified date of) file targets, without
92: executing any recipes.
93: .TP
94: .BI -w target1 , target2,...
95: Pretend the modify time for each
96: .I target
97: is the current time; useful in conjunction with
98: .B -n
99: to learn what updates would be triggered by
100: modifying the
101: .IR targets .
102: .PD
103: .PP
104: The
105: .IR rc (1)
106: script
107: .I membername
108: extracts member names
109: (see `Aggregates' below)
110: from its arguments.
111: .SS The \fLmkfile\fP
112: A
113: .I mkfile
114: consists of
115: .I assignments
116: (described under `Environment') and
117: .IR rules .
118: A rule contains
119: .I targets
120: and a
121: .IR tail .
122: A target is a literal string
123: and is normally a file name.
124: The tail contains zero or more
125: .I prerequisites
126: and an optional
127: .IR recipe ,
128: which is an
129: .B rc
130: script.
131: Each line of the recipe must begin with white space.
132: A rule takes the form
133: .IP
134: .EX
135: target: prereq1 prereq2
136: rc \f2recipe using\fP prereq1, prereq2 \f2to build\fP target
137: .EE
138: .PP
139: When the recipe is executed,
140: the first character on every line is elided.
141: .PP
142: After the colon on the target line, a rule may specify
143: .IR attributes ,
144: described below.
145: .PP
146: A
147: .I meta-rule
148: has a target of the form
149: .IB A % B
150: where
151: .I A
152: and
153: .I B
154: are (possibly empty) strings.
155: A meta-rule acts as a rule for any potential target whose
156: name matches
157: .IB A % B
158: with
159: .B %
160: replaced by an arbitrary string, called the
161: .IR stem .
162: In interpreting a meta-rule,
163: the stem is substituted for all occurrences of
164: .B %
165: in the prerequisite names.
166: In the recipe of a meta-rule, the environment variable
167: .B $stem
168: contains the string matched by the
169: .BR % .
170: For example, a meta-rule to compile a C program using
171: .IR 2c (1)
172: might be:
173: .IP
174: .EX
175: %.2: %.c
176: 2c $stem.c
177: 2l -o $stem $stem.2
178: .EE
179: .PP
180: Meta-rules may contain an ampersand
181: .B &
182: rather than a percent sign
183: .BR % .
184: A
185: .B %
186: matches a maximal length string of any characters;
187: an
188: .B &
189: matches a maximal length string of any characters except period
190: or slash.
191: .PP
192: The text of the
193: .I mkfile
194: is processed as follows.
195: Lines beginning with
196: .B <
197: followed by a file name are replaced by the contents of the named
198: file.
199: Blank lines and comments, which run from unquoted
200: .B #
201: characters to the following newline, are deleted.
202: The character sequence backslash-newline is deleted,
203: so long lines in
204: .I mkfile
205: may be folded.
206: Non-recipe lines are processed by substituting for
207: .BI `{ command }
208: the output of the
209: .I command
210: when run by
211: .IR rc .
212: References to variables are replaced by the variables' values.
213: Special characters may be quoted using single quotes
214: .BR \&''
215: as in
216: .IR rc (1).
217: .PP
218: Assignments and rules are distinguished by
219: the first unquoted occurrence of
220: .B :
221: (rule)
222: or
223: .B =
224: (assignment).
225: .PP
226: A later rule may modify or override an existing rule under the
227: following conditions:
228: .TP
229: \-
230: If the targets of the rules exactly match and one rule
231: contains only a prerequisite clause and no recipe, the
232: clause is added to the prerequisites of the other rule.
233: If either or both targets are virtual, the recipe is
234: always executed.
235: .TP
236: \-
237: If the targets of the rules match exactly and the
238: prerequisites do not match and both rules
239: contain recipes,
240: .I mk
241: reports an ``ambiguous recipe'' error.
242: .TP
243: \-
244: If the target and prerequisites of both rules match exactly,
245: the second rule overrides the first.
246: .SS Environment
247: Rules may make use of
248: .B rc
249: environment variables.
250: A legal reference of the form
251: .B $OBJ
252: or
253: .B ${name}
254: is expanded as in
255: .IR rc (1).
256: A reference of the form
257: .BI ${name: A % B = C\fL%\fID\fL}\fR,
258: where
259: .I A, B, C, D
260: are (possibly empty) strings,
261: has the value formed by expanding
262: .B $name
263: and substituting
264: .I C
265: for
266: .I A
267: and
268: .I D
269: for
270: .I B
271: in each word in
272: .B $name
273: that matches pattern
274: .IB A % B\f1.
275: .PP
276: Variables can be set by
277: assignments of the form
278: .I
279: var\fL=\fR[\fIattr\fL=\fR]\fIvalue\fR
280: .br
281: Blanks in the
282: .I value
283: break it into words, as in
284: .I rc
285: but without the surrounding parentheses.
286: Such variables are exported
287: to the environment of
288: recipes as they are executed, unless
289: .BR U ,
290: the only legal attribute
291: .IR attr ,
292: is present.
293: The initial value of a variable is
294: taken from (in increasing order of precedence)
295: the default values below,
296: .I mk's
297: environment, the
298: .IR mkfiles ,
299: and any command line assignment as an argument to
300: .IR mk .
301: A variable assignment argument overrides the first (but not any subsequent)
302: assignment to that variable.
303: The variable
304: .B MKFLAGS
305: contains all the option arguments (arguments starting with
306: .L -
307: or containing
308: .LR = )
309: and
310: .B MKARGS
311: contains all the targets in the call to
312: .IR mk .
313: .PP
314: It is recommended that mkfiles start with
315: .IP
316: .EX
317: </$objtype/mkfile
318: .EE
319: .PP
320: to set
321: .BR CC ,
322: .BR LD ,
323: .BR AS ,
324: .BR O ,
325: .BR ALEF ,
326: .BR YACC ,
327: and
328: .B MK
329: to values appropriate to the target architecture (see the examples below).
330: .SS Execution
331: .PP
332: During execution,
333: .I mk
334: determines which targets must be updated, and in what order,
335: to build the
336: .I names
337: specified on the command line.
338: It then runs the associated recipes.
339: .PP
340: A target is considered up to date if it has no prerequisites or
341: if all its prerequisites are up to date and it is newer
342: than all its prerequisites.
343: Once the recipe for a target has executed, the target is
344: considered up to date.
345: .PP
346: The date stamp
347: used to determine if a target is up to date is computed
348: differently for different types of targets.
349: If a target is
350: .I virtual
351: (the target of a rule with the
352: .B V
353: attribute),
354: its date stamp is initially zero; when the target is
355: updated the date stamp is set to
356: the most recent date stamp of its prerequisites.
357: Otherwise, if a target does not exist as a file,
358: its date stamp is set to the most recent date stamp of its prerequisites,
359: or zero if it has no prerequisites.
360: Otherwise, the target is the name of a file and
361: the target's date stamp is always that file's modification date.
362: The date stamp is computed when the target is needed in
363: the execution of a rule; it is not a static value.
364: .PP
365: Nonexistent targets that have prerequisites
366: and are themselves prerequisites are treated specially.
367: Such a target
368: .I t
369: is given the date stamp of its most recent prerequisite
370: and if this causes all the targets which have
371: .I t
372: as a prerequisite to be up to date,
373: .I t
374: is considered up to date.
375: Otherwise,
376: .I t
377: is made in the normal fashion.
378: The
379: .B -i
380: flag overrides this special treatment.
381: .PP
382: Files may be made in any order that respects
383: the preceding restrictions.
384: .PP
385: A recipe is executed by supplying the recipe as standard input to
386: the command
387: .B
388: /bin/rc -e -I
389: .br
390: (the
391: .B -e
392: is omitted if the
393: .B E
394: attribute is set).
395: The environment is augmented by the following variables:
396: .TP 14
397: .B $alltarget
398: all the targets of this rule.
399: .TP
400: .B $newprereq
401: the prerequisites that caused this rule to execute.
402: .TP
403: .B $nproc
404: the process slot for this recipe.
405: It satisfies
406: .RB 0≤ $nproc < $NPROC .
407: .TP
408: .B $pid
409: the process id for the
410: .I mk
411: executing the recipe.
412: .TP
413: .B $prereq
414: all the prerequisites for this rule.
415: .TP
416: .B $stem
417: if this is a meta-rule,
418: .B $stem
419: is the string that matched
420: .B %
421: or
422: .BR & .
423: Otherwise, it is empty.
424: For regular expression meta-rules (see below), the variables
425: .LR stem0 ", ...,"
426: .L stem9
427: are set to the corresponding subexpressions.
428: .TP
429: .B $target
430: the targets for this rule that need to be remade.
431: .PP
432: These variables are available only during the execution of a recipe,
433: not while evaluating the
434: .IR mkfile .
435: .PP
436: Unless the rule has the
437: .B Q
438: attribute,
439: the recipe is printed prior to execution
440: with recognizable environment variables expanded.
441: Commands returning nonempty status (see
442: .IR intro (1))
443: cause
444: .I mk
445: to terminate.
446: .PP
447: Recipes and backquoted
448: .B rc
449: commands in places such as assignments
450: execute in a copy of
451: .I mk's
452: environment; changes they make to
453: environment variables are not visible from
454: .IR mk .
455: .PP
456: Variable substitution in a rule is done when
457: the rule is read; variable substitution in the recipe is done
458: when the recipe is executed. For example:
459: .IP
460: .EX
461: bar=a.c
462: foo: $bar
463: $CC -o foo $bar
464: bar=b.c
465: .EE
466: .PP
467: will compile
468: .B b.c
469: into
470: .BR foo ,
471: if
472: .B a.c
473: is newer than
474: .BR foo .
475: .SS Aggregates
476: Names of the form
477: .IR a ( b )
478: refer to member
479: .I b
480: of the aggregate
481: .IR a .
482: Currently, the only aggregates supported are
483: .IR ar (1)
484: archives.
485: .SS Attributes
486: The colon separating the target from the prerequisites
487: may be
488: immediately followed by
489: .I attributes
490: and another colon.
491: The attributes are:
492: .TP
493: .B <
494: The standard output of the recipe is read by
495: .I mk
496: as an additional
497: .IR mkfile .
498: .PD 0
499: .TP
500: .B D
501: If the recipe exits with a non-null status, the target is deleted.
502: .TP
503: .B E
504: Continue execution if the recipe draws errors.
505: .TP
506: .B N
507: If there is no recipe, the target has its time updated.
508: .TP
509: .B n
510: The rule is a meta-rule that cannot be a target of a virtual rule.
511: Only files match the pattern in the target.
512: .TP
513: .B P
514: The characters after the
515: .B P
516: until the terminating
517: .B :
518: are taken as a program name.
519: It will be invoked as
520: .B "rc -c prog 'arg1' 'arg2'"
521: and should return a null exit status
522: if and only if arg1 is not out of date with respect to arg2.
523: Date stamps are still propagated in the normal way.
524: .TP
525: .B Q
526: The recipe is not printed prior to execution.
527: .TP
528: .B R
529: The rule is a meta-rule using regular expressions.
530: In the rule,
531: .B %
532: has no special meaning.
533: The target is interpreted as a regular expression as defined in
534: .IR regexp (6).
535: The prerequisites may contain references
536: to subexpressions in form
537: .BI \e n\f1,
538: as in the substitute command of
539: .IR sam (1).
540: .TP
541: .B U
542: The targets are considered to have been updated
543: even if the recipe did not do so.
544: .TP
545: .B V
546: The targets of this rule are marked as virtual.
547: They are distinct from files of the same name.
548: .PD
549: .SH EXAMPLES
550: A simple mkfile to compile a program:
551: .IP
552: .EX
553: .ta 8n +8n +8n +8n +8n +8n +8n
554: </$objtype/mkfile
555:
556: prog: a.$O b.$O c.$O
557: $LD $CFLAGS -o $target $prereq
558:
559: %.$O: %.c
560: $CC $stem.c
561: .EE
562: .PP
563: Override flag settings in the mkfile:
564: .IP
565: .EX
566: % mk target 'CFLAGS=-S -w'
567: .EE
568: .PP
569: To get the prerequisites for an aggregate:
570: .IP
571: .EX
572: % membername 'libc.a(read.2)' 'libc.a(write.2)'
573: read.2 write.2
574: .EE
575: .PP
576: Maintain a library:
577: .IP
578: .EX
579: libc.a(%.$O):N: %.$O
580: libc.a: libc.a(abs.$O) libc.a(access.$O) libc.a(alarm.$O) ...
581: names=`{membername $newprereq}
582: ar r libc.a $names && rm $names
583: .EE
584: .PP
585: String expression variables to derive names from a master list:
586: .IP
587: .EX
588: NAMES=alloc arc bquote builtins expand main match mk var word
589: OBJ=${NAMES:%=%.$O}
590: .EE
591: .PP
592: Regular expression meta-rules:
593: .IP
594: .EX
595: ([^/]*)/(.*)\e.o:R: \e1/\e2.c
596: cd $stem1; $CC $CFLAGS $stem2.c
597: .EE
598: .PP
599: A correct way to deal with
600: .IR yacc (1)
601: grammars.
602: The file
603: .B lex.c
604: includes the file
605: .B x.tab.h
606: rather than
607: .B y.tab.h
608: in order to reflect changes in content, not just modification time.
609: .IP
610: .EX
611: lex.o: x.tab.h
612: x.tab.h: y.tab.h
613: cmp -s x.tab.h y.tab.h || cp y.tab.h x.tab.h
614: y.tab.c y.tab.h: gram.y
615: $YACC -d gram.y
616: .EE
617: .PP
618: The above example could also use the
619: .B P
620: attribute for the
621: .B x.tab.h
622: rule:
623: .IP
624: .EX
625: x.tab.h:Pcmp -s: y.tab.h
626: cp y.tab.h x.tab.h
627: .EE
628: .SH SOURCE
629: .B /sys/src/cmd/mk
630: .SH SEE ALSO
631: .IR rc (1),
632: .IR regexp (6)
633: .br
634: A. Hume,
635: ``Mk: a Successor to Make''.
636: .br
637: Bob Flandrena,
638: ``Plan 9 Mkfiles''.
639: .SH BUGS
640: Identical recipes for regular expression meta-rules only have one target.
641: .br
642: Seemingly appropriate input like
643: .B CFLAGS=-DHZ=60
644: is parsed as an erroneous attribute; correct it by inserting
645: a space after the first
646: .LR = .
647: .br
648: The recipes printed by
649: .I mk
650: before being passed to
651: .I rc
652: for execution are sometimes erroneously expanded
653: for printing. Don't trust what's printed; rely
654: on what
655: .I rc
656: does.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.