]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/bmake/bmake.cat1
bhnd(9): Fix a few mandoc related issues
[FreeBSD/FreeBSD.git] / contrib / bmake / bmake.cat1
1 BMAKE(1)                FreeBSD General Commands Manual               BMAKE(1)
2
3 \e[1mNAME\e[0m
4      \e[1mbmake \e[22m-- maintain program dependencies
5
6 \e[1mSYNOPSIS\e[0m
7      \e[1mbmake \e[22m[\e[1m-BeikNnqrSstWwX\e[22m] [\e[1m-C \e[4m\e[22mdirectory\e[24m] [\e[1m-D \e[4m\e[22mvariable\e[24m] [\e[1m-d \e[4m\e[22mflags\e[24m]
8            [\e[1m-f \e[4m\e[22mmakefile\e[24m] [\e[1m-I \e[4m\e[22mdirectory\e[24m] [\e[1m-J \e[4m\e[22mprivate\e[24m] [\e[1m-j \e[4m\e[22mmax_jobs\e[24m]
9            [\e[1m-m \e[4m\e[22mdirectory\e[24m] [\e[1m-T \e[4m\e[22mfile\e[24m] [\e[1m-V \e[4m\e[22mvariable\e[24m] [\e[1m-v \e[4m\e[22mvariable\e[24m]
10            [\e[4mvariable=value\e[24m] [\e[4mtarget\e[24m \e[4m...\e[24m]
11
12 \e[1mDESCRIPTION\e[0m
13      \e[1mbmake \e[22mis a program designed to simplify the maintenance of other pro-
14      grams.  Its input is a list of specifications as to the files upon which
15      programs and other files depend.  If no \e[1m-f \e[4m\e[22mmakefile\e[24m makefile option is
16      given, \e[1mbmake \e[22mwill try to open `\e[4mmakefile\e[24m' then `\e[4mMakefile\e[24m' in order to find
17      the specifications.  If the file `\e[4m.depend\e[24m' exists, it is read (see
18      mkdep(1)).
19
20      This manual page is intended as a reference document only.  For a more
21      thorough description of \e[1mbmake \e[22mand makefiles, please refer to \e[4mPMake\e[24m \e[4m-\e[24m \e[4mA\e[0m
22      \e[4mTutorial\e[24m.
23
24      \e[1mbmake \e[22mwill prepend the contents of the \e[4mMAKEFLAGS\e[24m environment variable to
25      the command line arguments before parsing them.
26
27      The options are as follows:
28
29      \e[1m-B      \e[22mTry to be backwards compatible by executing a single shell per
30              command and by executing the commands to make the sources of a
31              dependency line in sequence.
32
33      \e[1m-C \e[4m\e[22mdirectory\e[0m
34              Change to \e[4mdirectory\e[24m before reading the makefiles or doing any-
35              thing else.  If multiple \e[1m-C \e[22moptions are specified, each is inter-
36              preted relative to the previous one: \e[1m-C \e[4m\e[22m/\e[24m \e[1m-C \e[4m\e[22metc\e[24m is equivalent to
37              \e[1m-C \e[4m\e[22m/etc\e[24m.
38
39      \e[1m-D \e[4m\e[22mvariable\e[0m
40              Define \e[4mvariable\e[24m to be 1, in the global context.
41
42      \e[1m-d \e[4m\e[22m[-]flags\e[0m
43              Turn on debugging, and specify which portions of \e[1mbmake \e[22mare to
44              print debugging information.  Unless the flags are preceded by
45              `-' they are added to the \e[4mMAKEFLAGS\e[24m environment variable and will
46              be processed by any child make processes.  By default, debugging
47              information is printed to standard error, but this can be changed
48              using the \e[4mF\e[24m debugging flag.  The debugging output is always
49              unbuffered; in addition, if debugging is enabled but debugging
50              output is not directed to standard output, then the standard out-
51              put is line buffered.  \e[4mFlags\e[24m is one or more of the following:
52
53              \e[4mA\e[24m       Print all possible debugging information; equivalent to
54                      specifying all of the debugging flags.
55
56              \e[4ma\e[24m       Print debugging information about archive searching and
57                      caching.
58
59              \e[4mC\e[24m       Print debugging information about current working direc-
60                      tory.
61
62              \e[4mc\e[24m       Print debugging information about conditional evaluation.
63
64              \e[4md\e[24m       Print debugging information about directory searching and
65                      caching.
66
67              \e[4me\e[24m       Print debugging information about failed commands and
68                      targets.
69
70              \e[4mF\e[24m[\e[1m+\e[22m]\e[4mfilename\e[0m
71                      Specify where debugging output is written.  This must be
72                      the last flag, because it consumes the remainder of the
73                      argument.  If the character immediately after the `F'
74                      flag is `+', then the file will be opened in append mode;
75                      otherwise the file will be overwritten.  If the file name
76                      is `stdout' or `stderr' then debugging output will be
77                      written to the standard output or standard error output
78                      file descriptors respectively (and the `+' option has no
79                      effect).  Otherwise, the output will be written to the
80                      named file.  If the file name ends `.%d' then the `%d' is
81                      replaced by the pid.
82
83              \e[4mf\e[24m       Print debugging information about loop evaluation.
84
85              \e[4mg1\e[24m      Print the input graph before making anything.
86
87              \e[4mg2\e[24m      Print the input graph after making everything, or before
88                      exiting on error.
89
90              \e[4mg3\e[24m      Print the input graph before exiting on error.
91
92              \e[4mh\e[24m       Print debugging information about hash table operations.
93
94              \e[4mj\e[24m       Print debugging information about running multiple
95                      shells.
96
97              \e[4mL\e[24m       Turn on lint checks.  This will throw errors for variable
98                      assignments that do not parse correctly, at the time of
99                      assignment so the file and line number are available.
100
101              \e[4ml\e[24m       Print commands in Makefiles regardless of whether or not
102                      they are prefixed by `@' or other "quiet" flags.  Also
103                      known as "loud" behavior.
104
105              \e[4mM\e[24m       Print debugging information about "meta" mode decisions
106                      about targets.
107
108              \e[4mm\e[24m       Print debugging information about making targets, includ-
109                      ing modification dates.
110
111              \e[4mn\e[24m       Don't delete the temporary command scripts created when
112                      running commands.  These temporary scripts are created in
113                      the directory referred to by the TMPDIR environment vari-
114                      able, or in \e[4m/tmp\e[24m if TMPDIR is unset or set to the empty
115                      string.  The temporary scripts are created by mkstemp(3),
116                      and have names of the form \e[4mmakeXXXXXX\e[24m.  \e[4mNOTE\e[24m: This can
117                      create many files in TMPDIR or \e[4m/tmp\e[24m, so use with care.
118
119              \e[4mp\e[24m       Print debugging information about makefile parsing.
120
121              \e[4ms\e[24m       Print debugging information about suffix-transformation
122                      rules.
123
124              \e[4mt\e[24m       Print debugging information about target list mainte-
125                      nance.
126
127              \e[4mV\e[24m       Force the \e[1m-V \e[22moption to print raw values of variables,
128                      overriding the default behavior set via
129                      \e[4m.MAKE.EXPAND_VARIABLES\e[24m.
130
131              \e[4mv\e[24m       Print debugging information about variable assignment.
132
133              \e[4mx\e[24m       Run shell commands with \e[1m-x \e[22mso the actual commands are
134                      printed as they are executed.
135
136      \e[1m-e      \e[22mSpecify that environment variables override macro assignments
137              within makefiles.
138
139      \e[1m-f \e[4m\e[22mmakefile\e[0m
140              Specify a makefile to read instead of the default `\e[4mmakefile\e[24m'.  If
141              \e[4mmakefile\e[24m is `\e[1m-\e[22m', standard input is read.  Multiple makefiles may
142              be specified, and are read in the order specified.
143
144      \e[1m-I \e[4m\e[22mdirectory\e[0m
145              Specify a directory in which to search for makefiles and included
146              makefiles.  The system makefile directory (or directories, see
147              the \e[1m-m \e[22moption) is automatically included as part of this list.
148
149      \e[1m-i      \e[22mIgnore non-zero exit of shell commands in the makefile.  Equiva-
150              lent to specifying `\e[1m-\e[22m' before each command line in the makefile.
151
152      \e[1m-J \e[4m\e[22mprivate\e[0m
153              This option should \e[4mnot\e[24m be specified by the user.
154
155              When the \e[4mj\e[24m option is in use in a recursive build, this option is
156              passed by a make to child makes to allow all the make processes
157              in the build to cooperate to avoid overloading the system.
158
159      \e[1m-j \e[4m\e[22mmax_jobs\e[0m
160              Specify the maximum number of jobs that \e[1mbmake \e[22mmay have running at
161              any one time.  The value is saved in \e[4m.MAKE.JOBS\e[24m.  Turns compati-
162              bility mode off, unless the \e[4mB\e[24m flag is also specified.  When com-
163              patibility mode is off, all commands associated with a target are
164              executed in a single shell invocation as opposed to the tradi-
165              tional one shell invocation per line.  This can break traditional
166              scripts which change directories on each command invocation and
167              then expect to start with a fresh environment on the next line.
168              It is more efficient to correct the scripts rather than turn
169              backwards compatibility on.
170
171      \e[1m-k      \e[22mContinue processing after errors are encountered, but only on
172              those targets that do not depend on the target whose creation
173              caused the error.
174
175      \e[1m-m \e[4m\e[22mdirectory\e[0m
176              Specify a directory in which to search for sys.mk and makefiles
177              included via the <\e[4mfile\e[24m>-style include statement.  The \e[1m-m \e[22moption
178              can be used multiple times to form a search path.  This path will
179              override the default system include path: /usr/share/mk.  Fur-
180              thermore the system include path will be appended to the search
181              path used for "\e[4mfile\e[24m"-style include statements (see the \e[1m-I\e[0m
182              option).
183
184              If a file or directory name in the \e[1m-m \e[22margument (or the
185              MAKESYSPATH environment variable) starts with the string ".../"
186              then \e[1mbmake \e[22mwill search for the specified file or directory named
187              in the remaining part of the argument string.  The search starts
188              with the current directory of the Makefile and then works upward
189              towards the root of the file system.  If the search is success-
190              ful, then the resulting directory replaces the ".../" specifica-
191              tion in the \e[1m-m \e[22margument.  If used, this feature allows \e[1mbmake \e[22mto
192              easily search in the current source tree for customized sys.mk
193              files (e.g., by using ".../mk/sys.mk" as an argument).
194
195      \e[1m-n      \e[22mDisplay the commands that would have been executed, but do not
196              actually execute them unless the target depends on the .MAKE spe-
197              cial source (see below) or the command is prefixed with `\e[1m+\e[22m'.
198
199      \e[1m-N      \e[22mDisplay the commands which would have been executed, but do not
200              actually execute any of them; useful for debugging top-level
201              makefiles without descending into subdirectories.
202
203      \e[1m-q      \e[22mDo not execute any commands, but exit 0 if the specified targets
204              are up-to-date and 1, otherwise.
205
206      \e[1m-r      \e[22mDo not use the built-in rules specified in the system makefile.
207
208      \e[1m-S      \e[22mStop processing if an error is encountered.  This is the default
209              behavior and the opposite of \e[1m-k\e[22m.
210
211      \e[1m-s      \e[22mDo not echo any commands as they are executed.  Equivalent to
212              specifying `\e[1m@\e[22m' before each command line in the makefile.
213
214      \e[1m-T \e[4m\e[22mtracefile\e[0m
215              When used with the \e[1m-j \e[22mflag, append a trace record to \e[4mtracefile\e[0m
216              for each job started and completed.
217
218      \e[1m-t      \e[22mRather than re-building a target as specified in the makefile,
219              create it or update its modification time to make it appear up-
220              to-date.
221
222      \e[1m-V \e[4m\e[22mvariable\e[0m
223              Print the value of \e[4mvariable\e[24m.  Do not build any targets.  Multiple
224              instances of this option may be specified; the variables will be
225              printed one per line, with a blank line for each null or unde-
226              fined variable.  The value printed is extracted from the global
227              context after all makefiles have been read.  By default, the raw
228              variable contents (which may include additional unexpanded vari-
229              able references) are shown.  If \e[4mvariable\e[24m contains a `$' then the
230              value will be recursively expanded to its complete resultant text
231              before printing.  The expanded value will also be printed if
232              \e[4m.MAKE.EXPAND_VARIABLES\e[24m is set to true and the \e[1m-dV \e[22moption has not
233              been used to override it.  Note that loop-local and target-local
234              variables, as well as values taken temporarily by global vari-
235              ables during makefile processing, are not accessible via this
236              option.  The \e[1m-dv \e[22mdebug mode can be used to see these at the cost
237              of generating substantial extraneous output.
238
239      \e[1m-v \e[4m\e[22mvariable\e[0m
240              Like \e[1m-V \e[22mbut the variable is always expanded to its complete
241              value.
242
243      \e[1m-W      \e[22mTreat any warnings during makefile parsing as errors.
244
245      \e[1m-w      \e[22mPrint entering and leaving directory messages, pre and post pro-
246              cessing.
247
248      \e[1m-X      \e[22mDon't export variables passed on the command line to the environ-
249              ment individually.  Variables passed on the command line are
250              still exported via the \e[4mMAKEFLAGS\e[24m environment variable.  This
251              option may be useful on systems which have a small limit on the
252              size of command arguments.
253
254      \e[4mvariable=value\e[0m
255              Set the value of the variable \e[4mvariable\e[24m to \e[4mvalue\e[24m.  Normally, all
256              values passed on the command line are also exported to sub-makes
257              in the environment.  The \e[1m-X \e[22mflag disables this behavior.  Vari-
258              able assignments should follow options for POSIX compatibility
259              but no ordering is enforced.
260
261      There are seven different types of lines in a makefile: file dependency
262      specifications, shell commands, variable assignments, include statements,
263      conditional directives, for loops, and comments.
264
265      In general, lines may be continued from one line to the next by ending
266      them with a backslash (`\').  The trailing newline character and initial
267      whitespace on the following line are compressed into a single space.
268
269 \e[1mFILE DEPENDENCY SPECIFICATIONS\e[0m
270      Dependency lines consist of one or more targets, an operator, and zero or
271      more sources.  This creates a relationship where the targets ``depend''
272      on the sources and are customarily created from them.  A target is con-
273      sidered out-of-date if it does not exist, or if its modification time is
274      less than that of any of its sources.  An out-of-date target will be re-
275      created, but not until all sources have been examined and themselves re-
276      created as needed.  Three operators may be used:
277
278      \e[1m:     \e[22mMany dependency lines may name this target but only one may have
279            attached shell commands.  All sources named in all dependency lines
280            are considered together, and if needed the attached shell commands
281            are run to create or re-create the target.  If \e[1mbmake \e[22mis inter-
282            rupted, the target is removed.
283
284      \e[1m!     \e[22mThe same, but the target is always re-created whether or not it is
285            out of date.
286
287      \e[1m::    \e[22mAny dependency line may have attached shell commands, but each one
288            is handled independently: its sources are considered and the
289            attached shell commands are run if the target is out of date with
290            respect to (only) those sources.  Thus, different groups of the
291            attached shell commands may be run depending on the circumstances.
292            Furthermore, unlike \e[1m:, \e[22mfor dependency lines with no sources, the
293            attached shell commands are always run.  Also unlike \e[1m:, \e[22mthe target
294            will not be removed if \e[1mbmake \e[22mis interrupted.
295      All dependency lines mentioning a particular target must use the same
296      operator.
297
298      Targets and sources may contain the shell wildcard values `?', `*', `[]',
299      and `{}'.  The values `?', `*', and `[]' may only be used as part of the
300      final component of the target or source, and must be used to describe
301      existing files.  The value `{}' need not necessarily be used to describe
302      existing files.  Expansion is in directory order, not alphabetically as
303      done in the shell.
304
305 \e[1mSHELL COMMANDS\e[0m
306      Each target may have associated with it one or more lines of shell com-
307      mands, normally used to create the target.  Each of the lines in this
308      script \e[4mmust\e[24m be preceded by a tab.  (For historical reasons, spaces are
309      not accepted.)  While targets can appear in many dependency lines if
310      desired, by default only one of these rules may be followed by a creation
311      script.  If the `\e[1m::\e[22m' operator is used, however, all rules may include
312      scripts and the scripts are executed in the order found.
313
314      Each line is treated as a separate shell command, unless the end of line
315      is escaped with a backslash (`\') in which case that line and the next
316      are combined.  If the first characters of the command are any combination
317      of `\e[1m@\e[22m', `\e[1m+\e[22m', or `\e[1m-\e[22m', the command is treated specially.  A `\e[1m@\e[22m' causes the
318      command not to be echoed before it is executed.  A `\e[1m+\e[22m' causes the command
319      to be executed even when \e[1m-n \e[22mis given.  This is similar to the effect of
320      the .MAKE special source, except that the effect can be limited to a sin-
321      gle line of a script.  A `\e[1m-\e[22m' in compatibility mode causes any non-zero
322      exit status of the command line to be ignored.
323
324      When \e[1mbmake \e[22mis run in jobs mode with \e[1m-j \e[4m\e[22mmax_jobs\e[24m, the entire script for
325      the target is fed to a single instance of the shell.  In compatibility
326      (non-jobs) mode, each command is run in a separate process.  If the com-
327      mand contains any shell meta characters (`#=|^(){};&<>*?[]:$`\\n') it
328      will be passed to the shell; otherwise \e[1mbmake \e[22mwill attempt direct execu-
329      tion.  If a line starts with `\e[1m-\e[22m' and the shell has ErrCtl enabled then
330      failure of the command line will be ignored as in compatibility mode.
331      Otherwise `\e[1m-\e[22m' affects the entire job; the script will stop at the first
332      command line that fails, but the target will not be deemed to have
333      failed.
334
335      Makefiles should be written so that the mode of \e[1mbmake \e[22moperation does not
336      change their behavior.  For example, any command which needs to use
337      ``cd'' or ``chdir'' without potentially changing the directory for subse-
338      quent commands should be put in parentheses so it executes in a subshell.
339      To force the use of one shell, escape the line breaks so as to make the
340      whole script one command.  For example:
341
342            avoid-chdir-side-effects:
343                    @echo Building $@ in `pwd`
344                    @(cd ${.CURDIR} && ${MAKE} $@)
345                    @echo Back in `pwd`
346
347            ensure-one-shell-regardless-of-mode:
348                    @echo Building $@ in `pwd`; \
349                    (cd ${.CURDIR} && ${MAKE} $@); \
350                    echo Back in `pwd`
351
352      Since \e[1mbmake \e[22mwill chdir(2) to `\e[4m.OBJDIR\e[24m' before executing any targets, each
353      child process starts with that as its current working directory.
354
355 \e[1mVARIABLE ASSIGNMENTS\e[0m
356      Variables in make are much like variables in the shell, and, by tradi-
357      tion, consist of all upper-case letters.
358
359    \e[1mVariable assignment modifiers\e[0m
360      The five operators that can be used to assign values to variables are as
361      follows:
362
363      \e[1m=       \e[22mAssign the value to the variable.  Any previous value is overrid-
364              den.
365
366      \e[1m+=      \e[22mAppend the value to the current value of the variable.
367
368      \e[1m?=      \e[22mAssign the value to the variable if it is not already defined.
369
370      \e[1m:=      \e[22mAssign with expansion, i.e. expand the value before assigning it
371              to the variable.  Normally, expansion is not done until the vari-
372              able is referenced.  \e[4mNOTE\e[24m: References to undefined variables are
373              \e[4mnot\e[24m expanded.  This can cause problems when variable modifiers
374              are used.
375
376      \e[1m!=      \e[22mExpand the value and pass it to the shell for execution and
377              assign the result to the variable.  Any newlines in the result
378              are replaced with spaces.
379
380      Any white-space before the assigned \e[4mvalue\e[24m is removed; if the value is
381      being appended, a single space is inserted between the previous contents
382      of the variable and the appended value.
383
384      Variables are expanded by surrounding the variable name with either curly
385      braces (`{}') or parentheses (`()') and preceding it with a dollar sign
386      (`$').  If the variable name contains only a single letter, the surround-
387      ing braces or parentheses are not required.  This shorter form is not
388      recommended.
389
390      If the variable name contains a dollar, then the name itself is expanded
391      first.  This allows almost arbitrary variable names, however names con-
392      taining dollar, braces, parentheses, or whitespace are really best
393      avoided!
394
395      If the result of expanding a variable contains a dollar sign (`$') the
396      string is expanded again.
397
398      Variable substitution occurs at three distinct times, depending on where
399      the variable is being used.
400
401      1.   Variables in dependency lines are expanded as the line is read.
402
403      2.   Variables in shell commands are expanded when the shell command is
404           executed.
405
406      3.   ``.for'' loop index variables are expanded on each loop iteration.
407           Note that other variables are not expanded inside loops so the fol-
408           lowing example code:
409
410
411                 .for i in 1 2 3
412                 a+=     ${i}
413                 j=      ${i}
414                 b+=     ${j}
415                 .endfor
416
417                 all:
418                         @echo ${a}
419                         @echo ${b}
420
421           will print:
422
423                 1 2 3
424                 3 3 3
425
426           Because while ${a} contains ``1 2 3'' after the loop is executed,
427           ${b} contains ``${j} ${j} ${j}'' which expands to ``3 3 3'' since
428           after the loop completes ${j} contains ``3''.
429
430    \e[1mVariable classes\e[0m
431      The four different classes of variables (in order of increasing prece-
432      dence) are:
433
434      Environment variables
435              Variables defined as part of \e[1mbmake\e[22m's environment.
436
437      Global variables
438              Variables defined in the makefile or in included makefiles.
439
440      Command line variables
441              Variables defined as part of the command line.
442
443      Local variables
444              Variables that are defined specific to a certain target.
445
446      Local variables are all built in and their values vary magically from
447      target to target.  It is not currently possible to define new local vari-
448      ables.  The seven local variables are as follows:
449
450            \e[4m.ALLSRC\e[24m   The list of all sources for this target; also known as
451                      `\e[4m>\e[24m'.
452
453            \e[4m.ARCHIVE\e[24m  The name of the archive file; also known as `\e[4m!\e[24m'.
454
455            \e[4m.IMPSRC\e[24m   In suffix-transformation rules, the name/path of the
456                      source from which the target is to be transformed (the
457                      ``implied'' source); also known as `\e[4m<\e[24m'.  It is not
458                      defined in explicit rules.
459
460            \e[4m.MEMBER\e[24m   The name of the archive member; also known as `\e[4m%\e[24m'.
461
462            \e[4m.OODATE\e[24m   The list of sources for this target that were deemed out-
463                      of-date; also known as `\e[4m?\e[24m'.
464
465            \e[4m.PREFIX\e[24m   The file prefix of the target, containing only the file
466                      portion, no suffix or preceding directory components;
467                      also known as `\e[4m*\e[24m'.  The suffix must be one of the known
468                      suffixes declared with \e[1m.SUFFIXES \e[22mor it will not be recog-
469                      nized.
470
471            \e[4m.TARGET\e[24m   The name of the target; also known as `\e[4m@\e[24m'.  For compati-
472                      bility with other makes this is an alias for \e[1m.ARCHIVE \e[22min
473                      archive member rules.
474
475      The shorter forms (`\e[4m>\e[24m', `\e[4m!\e[24m', `\e[4m<\e[24m', `\e[4m%\e[24m', `\e[4m?\e[24m', `\e[4m*\e[24m', and `\e[4m@\e[24m') are permitted
476      for backward compatibility with historical makefiles and legacy POSIX
477      make and are not recommended.
478
479      Variants of these variables with the punctuation followed immediately by
480      `D' or `F', e.g.  `\e[4m$(@D)\e[24m', are legacy forms equivalent to using the `:H'
481      and `:T' modifiers.  These forms are accepted for compatibility with AT&T
482      System V UNIX makefiles and POSIX but are not recommended.
483
484      Four of the local variables may be used in sources on dependency lines
485      because they expand to the proper value for each target on the line.
486      These variables are `\e[4m.TARGET\e[24m', `\e[4m.PREFIX\e[24m', `\e[4m.ARCHIVE\e[24m', and `\e[4m.MEMBER\e[24m'.
487
488    \e[1mAdditional built-in variables\e[0m
489      In addition, \e[1mbmake \e[22msets or knows about the following variables:
490
491      \e[4m$\e[24m               A single dollar sign `$', i.e.  `$$' expands to a single
492                      dollar sign.
493
494      \e[4m.ALLTARGETS\e[24m     The list of all targets encountered in the Makefile.  If
495                      evaluated during Makefile parsing, lists only those tar-
496                      gets encountered thus far.
497
498      \e[4m.CURDIR\e[24m         A path to the directory where \e[1mbmake \e[22mwas executed.  Refer
499                      to the description of `PWD' for more details.
500
501      \e[4m.INCLUDEDFROMDIR\e[0m
502                      The directory of the file this Makefile was included
503                      from.
504
505      \e[4m.INCLUDEDFROMFILE\e[0m
506                      The filename of the file this Makefile was included from.
507
508      MAKE            The name that \e[1mbmake \e[22mwas executed with (\e[4margv[0]\e[24m).  For
509                      compatibility \e[1mbmake \e[22malso sets \e[4m.MAKE\e[24m with the same value.
510                      The preferred variable to use is the environment variable
511                      MAKE because it is more compatible with other versions of
512                      \e[1mbmake \e[22mand cannot be confused with the special target with
513                      the same name.
514
515      \e[4m.MAKE.DEPENDFILE\e[0m
516                      Names the makefile (default `\e[4m.depend\e[24m') from which gener-
517                      ated dependencies are read.
518
519      \e[4m.MAKE.EXPAND_VARIABLES\e[0m
520                      A boolean that controls the default behavior of the \e[1m-V\e[0m
521                      option.  If true, variable values printed with \e[1m-V \e[22mare
522                      fully expanded; if false, the raw variable contents
523                      (which may include additional unexpanded variable refer-
524                      ences) are shown.
525
526      \e[4m.MAKE.EXPORTED\e[24m  The list of variables exported by \e[1mbmake\e[22m.
527
528      \e[4m.MAKE.JOBS\e[24m      The argument to the \e[1m-j \e[22moption.
529
530      \e[4m.MAKE.JOB.PREFIX\e[0m
531                      If \e[1mbmake \e[22mis run with \e[4mj\e[24m then output for each target is
532                      prefixed with a token `--- target ---' the first part of
533                      which can be controlled via \e[4m.MAKE.JOB.PREFIX\e[24m.  If
534                      \e[4m.MAKE.JOB.PREFIX\e[24m is empty, no token is printed.
535                      For example:
536                      .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}]
537                      would produce tokens like `---make[1234] target ---' mak-
538                      ing it easier to track the degree of parallelism being
539                      achieved.
540
541      MAKEFLAGS       The environment variable `MAKEFLAGS' may contain anything
542                      that may be specified on \e[1mbmake\e[22m's command line.  Anything
543                      specified on \e[1mbmake\e[22m's command line is appended to the
544                      `MAKEFLAGS' variable which is then entered into the envi-
545                      ronment for all programs which \e[1mbmake \e[22mexecutes.
546
547      \e[4m.MAKE.LEVEL\e[24m     The recursion depth of \e[1mbmake\e[22m.  The initial instance of
548                      \e[1mbmake \e[22mwill be 0, and an incremented value is put into the
549                      environment to be seen by the next generation.  This
550                      allows tests like: .if ${.MAKE.LEVEL} == 0 to protect
551                      things which should only be evaluated in the initial
552                      instance of \e[1mbmake\e[22m.
553
554      \e[4m.MAKE.MAKEFILE_PREFERENCE\e[0m
555                      The ordered list of makefile names (default `\e[4mmakefile\e[24m',
556                      `\e[4mMakefile\e[24m') that \e[1mbmake \e[22mwill look for.
557
558      \e[4m.MAKE.MAKEFILES\e[0m
559                      The list of makefiles read by \e[1mbmake\e[22m, which is useful for
560                      tracking dependencies.  Each makefile is recorded only
561                      once, regardless of the number of times read.
562
563      \e[4m.MAKE.MODE\e[24m      Processed after reading all makefiles.  Can affect the
564                      mode that \e[1mbmake \e[22mruns in.  It can contain a number of key-
565                      words:
566
567                      \e[4mcompat\e[24m               Like \e[1m-B\e[22m, puts \e[1mbmake \e[22minto "compat"
568                                           mode.
569
570                      \e[4mmeta\e[24m                 Puts \e[1mbmake \e[22minto "meta" mode, where
571                                           meta files are created for each tar-
572                                           get to capture the command run, the
573                                           output generated and if filemon(4)
574                                           is available, the system calls which
575                                           are of interest to \e[1mbmake\e[22m.  The cap-
576                                           tured output can be very useful when
577                                           diagnosing errors.
578
579                      \e[4mcurdirOk=\e[24m \e[4mbf\e[24m         Normally \e[1mbmake \e[22mwill not create .meta
580                                           files in `\e[4m.CURDIR\e[24m'.  This can be
581                                           overridden by setting \e[4mbf\e[24m to a value
582                                           which represents True.
583
584                      \e[4mmissing-meta=\e[24m \e[4mbf\e[24m     If \e[4mbf\e[24m is True, then a missing .meta
585                                           file makes the target out-of-date.
586
587                      \e[4mmissing-filemon=\e[24m \e[4mbf\e[24m  If \e[4mbf\e[24m is True, then missing filemon
588                                           data makes the target out-of-date.
589
590                      \e[4mnofilemon\e[24m            Do not use filemon(4).
591
592                      \e[4menv\e[24m                  For debugging, it can be useful to
593                                           include the environment in the .meta
594                                           file.
595
596                      \e[4mverbose\e[24m              If in "meta" mode, print a clue
597                                           about the target being built.  This
598                                           is useful if the build is otherwise
599                                           running silently.  The message
600                                           printed the value of:
601                                           \e[4m.MAKE.META.PREFIX\e[24m.
602
603                      \e[4mignore-cmd\e[24m           Some makefiles have commands which
604                                           are simply not stable.  This keyword
605                                           causes them to be ignored for deter-
606                                           mining whether a target is out of
607                                           date in "meta" mode.  See also
608                                           \e[1m.NOMETA_CMP\e[22m.
609
610                      \e[4msilent=\e[24m \e[4mbf\e[24m           If \e[4mbf\e[24m is True, when a .meta file is
611                                           created, mark the target \e[1m.SILENT\e[22m.
612
613      \e[4m.MAKE.META.BAILIWICK\e[0m
614                      In "meta" mode, provides a list of prefixes which match
615                      the directories controlled by \e[1mbmake\e[22m.  If a file that was
616                      generated outside of \e[4m.OBJDIR\e[24m but within said bailiwick is
617                      missing, the current target is considered out-of-date.
618
619      \e[4m.MAKE.META.CREATED\e[0m
620                      In "meta" mode, this variable contains a list of all the
621                      meta files updated.  If not empty, it can be used to
622                      trigger processing of \e[4m.MAKE.META.FILES\e[24m.
623
624      \e[4m.MAKE.META.FILES\e[0m
625                      In "meta" mode, this variable contains a list of all the
626                      meta files used (updated or not).  This list can be used
627                      to process the meta files to extract dependency informa-
628                      tion.
629
630      \e[4m.MAKE.META.IGNORE_PATHS\e[0m
631                      Provides a list of path prefixes that should be ignored;
632                      because the contents are expected to change over time.
633                      The default list includes: `\e[4m/dev\e[24m \e[4m/etc\e[24m \e[4m/proc\e[24m \e[4m/tmp\e[24m \e[4m/var/run\e[0m
634                      \e[4m/var/tmp\e[24m'
635
636      \e[4m.MAKE.META.IGNORE_PATTERNS\e[0m
637                      Provides a list of patterns to match against pathnames.
638                      Ignore any that match.
639
640      \e[4m.MAKE.META.IGNORE_FILTER\e[0m
641                      Provides a list of variable modifiers to apply to each
642                      pathname.  Ignore if the expansion is an empty string.
643
644      \e[4m.MAKE.META.PREFIX\e[0m
645                      Defines the message printed for each meta file updated in
646                      "meta verbose" mode.  The default value is:
647                            Building ${.TARGET:H:tA}/${.TARGET:T}
648
649      \e[4m.MAKEOVERRIDES\e[24m  This variable is used to record the names of variables
650                      assigned to on the command line, so that they may be
651                      exported as part of `MAKEFLAGS'.  This behavior can be
652                      disabled by assigning an empty value to `\e[4m.MAKEOVERRIDES\e[24m'
653                      within a makefile.  Extra variables can be exported from
654                      a makefile by appending their names to `\e[4m.MAKEOVERRIDES\e[24m'.
655                      `MAKEFLAGS' is re-exported whenever `\e[4m.MAKEOVERRIDES\e[24m' is
656                      modified.
657
658      \e[4m.MAKE.PATH_FILEMON\e[0m
659                      If \e[1mbmake \e[22mwas built with filemon(4) support, this is set
660                      to the path of the device node.  This allows makefiles to
661                      test for this support.
662
663      \e[4m.MAKE.PID\e[24m       The process-id of \e[1mbmake\e[22m.
664
665      \e[4m.MAKE.PPID\e[24m      The parent process-id of \e[1mbmake\e[22m.
666
667      \e[4m.MAKE.SAVE_DOLLARS\e[0m
668                      value should be a boolean that controls whether `$$' are
669                      preserved when doing `:=' assignments.  The default is
670                      false, for backwards compatibility.  Set to true for com-
671                      patability with other makes.  If set to false, `$$'
672                      becomes `$' per normal evaluation rules.
673
674      \e[4mMAKE_PRINT_VAR_ON_ERROR\e[0m
675                      When \e[1mbmake \e[22mstops due to an error, it sets `\e[4m.ERROR_TARGET\e[24m'
676                      to the name of the target that failed, `\e[4m.ERROR_CMD\e[24m' to
677                      the commands of the failed target, and in "meta" mode, it
678                      also sets `\e[4m.ERROR_CWD\e[24m' to the getcwd(3), and
679                      `\e[4m.ERROR_META_FILE\e[24m' to the path of the meta file (if any)
680                      describing the failed target.  It then prints its name
681                      and the value of `\e[4m.CURDIR\e[24m' as well as the value of any
682                      variables named in `\e[4mMAKE_PRINT_VAR_ON_ERROR\e[24m'.
683
684      \e[4m.newline\e[24m        This variable is simply assigned a newline character as
685                      its value.  This allows expansions using the \e[1m:@ \e[22mmodifier
686                      to put a newline between iterations of the loop rather
687                      than a space.  For example, the printing of
688                      `\e[4mMAKE_PRINT_VAR_ON_ERROR\e[24m' could be done as
689                      ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}.
690
691      \e[4m.OBJDIR\e[24m         A path to the directory where the targets are built.  Its
692                      value is determined by trying to chdir(2) to the follow-
693                      ing directories in order and using the first match:
694
695                      1.   ${MAKEOBJDIRPREFIX}${.CURDIR}
696
697                           (Only if `MAKEOBJDIRPREFIX' is set in the environ-
698                           ment or on the command line.)
699
700                      2.   ${MAKEOBJDIR}
701
702                           (Only if `MAKEOBJDIR' is set in the environment or
703                           on the command line.)
704
705                      3.   ${.CURDIR}\e[4m/obj.\e[24m${MACHINE}
706
707                      4.   ${.CURDIR}\e[4m/obj\e[0m
708
709                      5.   \e[4m/usr/obj/\e[24m${.CURDIR}
710
711                      6.   ${.CURDIR}
712
713                      Variable expansion is performed on the value before it's
714                      used, so expressions such as
715                            ${.CURDIR:S,^/usr/src,/var/obj,}
716                      may be used.  This is especially useful with
717                      `MAKEOBJDIR'.
718
719                      `\e[4m.OBJDIR\e[24m' may be modified in the makefile via the special
720                      target `\e[1m.OBJDIR\e[22m'.  In all cases, \e[1mbmake \e[22mwill chdir(2) to
721                      the specified directory if it exists, and set `\e[4m.OBJDIR\e[24m'
722                      and `PWD' to that directory before executing any targets.
723
724                      Except in the case of an explicit `\e[1m.OBJDIR\e[22m' target, \e[1mbmake\e[0m
725                      will check that the specified directory is writable and
726                      ignore it if not.  This check can be skipped by setting
727                      the environment variable `MAKE_OBJDIR_CHECK_WRITABLE' to
728                      "no".
729
730      \e[4m.PARSEDIR\e[24m       A path to the directory of the current `\e[4mMakefile\e[24m' being
731                      parsed.
732
733      \e[4m.PARSEFILE\e[24m      The basename of the current `\e[4mMakefile\e[24m' being parsed.
734                      This variable and `\e[4m.PARSEDIR\e[24m' are both set only while the
735                      `\e[4mMakefiles\e[24m' are being parsed.  If you want to retain
736                      their current values, assign them to a variable using
737                      assignment with expansion: (`\e[1m:=\e[22m').
738
739      \e[4m.PATH\e[24m           A variable that represents the list of directories that
740                      \e[1mbmake \e[22mwill search for files.  The search list should be
741                      updated using the target `\e[4m.PATH\e[24m' rather than the vari-
742                      able.
743
744      PWD             Alternate path to the current directory.  \e[1mbmake \e[22mnormally
745                      sets `\e[4m.CURDIR\e[24m' to the canonical path given by getcwd(3).
746                      However, if the environment variable `PWD' is set and
747                      gives a path to the current directory, then \e[1mbmake \e[22msets
748                      `\e[4m.CURDIR\e[24m' to the value of `PWD' instead.  This behavior
749                      is disabled if `MAKEOBJDIRPREFIX' is set or `MAKEOBJDIR'
750                      contains a variable transform.  `PWD' is set to the value
751                      of `\e[4m.OBJDIR\e[24m' for all programs which \e[1mbmake \e[22mexecutes.
752
753      .SHELL          The pathname of the shell used to run target scripts.  It
754                      is read-only.
755
756      .TARGETS        The list of targets explicitly specified on the command
757                      line, if any.
758
759      VPATH           Colon-separated (``:'') lists of directories that \e[1mbmake\e[0m
760                      will search for files.  The variable is supported for
761                      compatibility with old make programs only, use `\e[4m.PATH\e[24m'
762                      instead.
763
764    \e[1mVariable modifiers\e[0m
765      Variable expansion may be modified to select or modify each word of the
766      variable (where a ``word'' is white-space delimited sequence of charac-
767      ters).  The general format of a variable expansion is as follows:
768
769            ${variable[:modifier[:...]]}
770
771      Each modifier begins with a colon, which may be escaped with a backslash
772      (`\').
773
774      A set of modifiers can be specified via a variable, as follows:
775
776            modifier_variable=modifier[:...]
777            ${variable:${modifier_variable}[:...]}
778
779      In this case the first modifier in the modifier_variable does not start
780      with a colon, since that must appear in the referencing variable.  If any
781      of the modifiers in the modifier_variable contain a dollar sign (`$'),
782      these must be doubled to avoid early expansion.
783
784      The supported modifiers are:
785
786      \e[1m:E   \e[22mReplaces each word in the variable with its suffix.
787
788      \e[1m:H   \e[22mReplaces each word in the variable with everything but the last com-
789           ponent.
790
791      \e[1m:M\e[4m\e[22mpattern\e[0m
792           Selects only those words that match \e[4mpattern\e[24m.  The standard shell
793           wildcard characters (`*', `?', and `[]') may be used.  The wildcard
794           characters may be escaped with a backslash (`\').  As a consequence
795           of the way values are split into words, matched, and then joined, a
796           construct like
797                 ${VAR:M*}
798           will normalize the inter-word spacing, removing all leading and
799           trailing space, and converting multiple consecutive spaces to single
800           spaces.
801
802      \e[1m:N\e[4m\e[22mpattern\e[0m
803           This is identical to `\e[1m:M\e[22m', but selects all words which do not match
804           \e[4mpattern\e[24m.
805
806      \e[1m:O   \e[22mOrders every word in variable alphabetically.
807
808      \e[1m:Or  \e[22mOrders every word in variable in reverse alphabetical order.
809
810      \e[1m:Ox  \e[22mShuffles the words in variable.  The results will be different each
811           time you are referring to the modified variable; use the assignment
812           with expansion (`\e[1m:=\e[22m') to prevent such behavior.  For example,
813
814                 LIST=                   uno due tre quattro
815                 RANDOM_LIST=            ${LIST:Ox}
816                 STATIC_RANDOM_LIST:=    ${LIST:Ox}
817
818                 all:
819                         @echo "${RANDOM_LIST}"
820                         @echo "${RANDOM_LIST}"
821                         @echo "${STATIC_RANDOM_LIST}"
822                         @echo "${STATIC_RANDOM_LIST}"
823           may produce output similar to:
824
825                 quattro due tre uno
826                 tre due quattro uno
827                 due uno quattro tre
828                 due uno quattro tre
829
830      \e[1m:Q   \e[22mQuotes every shell meta-character in the variable, so that it can be
831           passed safely to the shell.
832
833      \e[1m:q   \e[22mQuotes every shell meta-character in the variable, and also doubles
834           `$' characters so that it can be passed safely through recursive
835           invocations of \e[1mbmake\e[22m.  This is equivalent to: `:S/\$/&&/g:Q'.
836
837      \e[1m:R   \e[22mReplaces each word in the variable with everything but its suffix.
838
839      \e[1m:range[=count]\e[0m
840           The value is an integer sequence representing the words of the orig-
841           inal value, or the supplied \e[4mcount\e[24m.
842
843      \e[1m:gmtime[=utc]\e[0m
844           The value is a format string for strftime(3), using gmtime(3).  If a
845           \e[4mutc\e[24m value is not provided or is 0, the current time is used.
846
847      \e[1m:hash\e[0m
848           Computes a 32-bit hash of the value and encode it as hex digits.
849
850      \e[1m:localtime[=utc]\e[0m
851           The value is a format string for strftime(3), using localtime(3).
852           If a \e[4mutc\e[24m value is not provided or is 0, the current time is used.
853
854      \e[1m:tA  \e[22mAttempts to convert variable to an absolute path using realpath(3),
855           if that fails, the value is unchanged.
856
857      \e[1m:tl  \e[22mConverts variable to lower-case letters.
858
859      \e[1m:ts\e[4m\e[22mc\e[0m
860           Words in the variable are normally separated by a space on expan-
861           sion.  This modifier sets the separator to the character \e[4mc\e[24m.  If \e[4mc\e[24m is
862           omitted, then no separator is used.  The common escapes (including
863           octal numeric codes) work as expected.
864
865      \e[1m:tu  \e[22mConverts variable to upper-case letters.
866
867      \e[1m:tW  \e[22mCauses the value to be treated as a single word (possibly containing
868           embedded white space).  See also `\e[1m:[*]\e[22m'.
869
870      \e[1m:tw  \e[22mCauses the value to be treated as a sequence of words delimited by
871           white space.  See also `\e[1m:[@]\e[22m'.
872
873      \e[1m:S\e[22m/\e[4mold_string\e[24m/\e[4mnew_string\e[24m/[\e[1m1gW\e[22m]
874           Modifies the first occurrence of \e[4mold_string\e[24m in each word of the
875           variable's value, replacing it with \e[4mnew_string\e[24m.  If a `g' is
876           appended to the last delimiter of the pattern, all occurrences in
877           each word are replaced.  If a `1' is appended to the last delimiter
878           of the pattern, only the first occurrence is affected.  If a `W' is
879           appended to the last delimiter of the pattern, then the value is
880           treated as a single word (possibly containing embedded white space).
881           If \e[4mold_string\e[24m begins with a caret (`^'), \e[4mold_string\e[24m is anchored at
882           the beginning of each word.  If \e[4mold_string\e[24m ends with a dollar sign
883           (`$'), it is anchored at the end of each word.  Inside \e[4mnew_string\e[24m,
884           an ampersand (`&') is replaced by \e[4mold_string\e[24m (without any `^' or
885           `$').  Any character may be used as a delimiter for the parts of the
886           modifier string.  The anchoring, ampersand and delimiter characters
887           may be escaped with a backslash (`\').
888
889           Variable expansion occurs in the normal fashion inside both
890           \e[4mold_string\e[24m and \e[4mnew_string\e[24m with the single exception that a backslash
891           is used to prevent the expansion of a dollar sign (`$'), not a pre-
892           ceding dollar sign as is usual.
893
894      \e[1m:C\e[22m/\e[4mpattern\e[24m/\e[4mreplacement\e[24m/[\e[1m1gW\e[22m]
895           The \e[1m:C \e[22mmodifier is just like the \e[1m:S \e[22mmodifier except that the old and
896           new strings, instead of being simple strings, are an extended regu-
897           lar expression (see regex(3)) string \e[4mpattern\e[24m and an ed(1)-style
898           string \e[4mreplacement\e[24m.  Normally, the first occurrence of the pattern
899           \e[4mpattern\e[24m in each word of the value is substituted with \e[4mreplacement\e[24m.
900           The `1' modifier causes the substitution to apply to at most one
901           word; the `g' modifier causes the substitution to apply to as many
902           instances of the search pattern \e[4mpattern\e[24m as occur in the word or
903           words it is found in; the `W' modifier causes the value to be
904           treated as a single word (possibly containing embedded white space).
905
906           As for the \e[1m:S \e[22mmodifier, the \e[4mpattern\e[24m and \e[4mreplacement\e[24m are subjected to
907           variable expansion before being parsed as regular expressions.
908
909      \e[1m:T   \e[22mReplaces each word in the variable with its last path component.
910
911      \e[1m:u   \e[22mRemoves adjacent duplicate words (like uniq(1)).
912
913      \e[1m:?\e[4m\e[22mtrue_string\e[24m\e[1m:\e[4m\e[22mfalse_string\e[0m
914           If the variable name (not its value), when parsed as a .if condi-
915           tional expression, evaluates to true, return as its value the
916           \e[4mtrue_string\e[24m, otherwise return the \e[4mfalse_string\e[24m.  Since the variable
917           name is used as the expression, :? must be the first modifier after
918           the variable name itself - which will, of course, usually contain
919           variable expansions.  A common error is trying to use expressions
920           like
921                 ${NUMBERS:M42:?match:no}
922           which actually tests defined(NUMBERS), to determine if any words
923           match "42" you need to use something like:
924                 ${"${NUMBERS:M42}" != "":?match:no}.
925
926      \e[4m:old_string=new_string\e[0m
927           This is the AT&T System V UNIX style variable substitution.  It must
928           be the last modifier specified.  If \e[4mold_string\e[24m or \e[4mnew_string\e[24m do not
929           contain the pattern matching character \e[4m%\e[24m then it is assumed that
930           they are anchored at the end of each word, so only suffixes or
931           entire words may be replaced.  Otherwise \e[4m%\e[24m is the substring of
932           \e[4mold_string\e[24m to be replaced in \e[4mnew_string\e[24m.  If only \e[4mold_string\e[24m con-
933           tains the pattern matching character \e[4m%\e[24m, and \e[4mold_string\e[24m matches, then
934           the result is the \e[4mnew_string\e[24m.  If only the \e[4mnew_string\e[24m contains the
935           pattern matching character \e[4m%\e[24m, then it is not treated specially and
936           it is printed as a literal \e[4m%\e[24m on match.  If there is more than one
937           pattern matching character (\e[4m%\e[24m) in either the \e[4mnew_string\e[24m or
938           \e[4mold_string\e[24m, only the first instance is treated specially (as the
939           pattern character); all subsequent instances are treated as regular
940           characters.
941
942           Variable expansion occurs in the normal fashion inside both
943           \e[4mold_string\e[24m and \e[4mnew_string\e[24m with the single exception that a backslash
944           is used to prevent the expansion of a dollar sign (`$'), not a pre-
945           ceding dollar sign as is usual.
946
947      \e[1m:@\e[4m\e[22mtemp\e[24m\e[1m@\e[4m\e[22mstring\e[24m\e[1m@\e[0m
948           This is the loop expansion mechanism from the OSF Development Envi-
949           ronment (ODE) make.  Unlike \e[1m.for \e[22mloops, expansion occurs at the time
950           of reference.  Assigns \e[4mtemp\e[24m to each word in the variable and evalu-
951           ates \e[4mstring\e[24m.  The ODE convention is that \e[4mtemp\e[24m should start and end
952           with a period.  For example.
953                 ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@}
954
955           However a single character variable is often more readable:
956                 ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}
957
958      \e[1m:_[=var]\e[0m
959           Saves the current variable value in `$_' or the named \e[4mvar\e[24m for later
960           reference.  Example usage:
961
962                 M_cmpv.units = 1 1000 1000000
963                 M_cmpv = S,., ,g:_:range:@i@+ $${_:[-$$i]} \
964                 \* $${M_cmpv.units:[$$i]}@:S,^,expr 0 ,1:sh
965
966                 .if ${VERSION:${M_cmpv}} < ${3.1.12:L:${M_cmpv}}
967
968           Here `$_' is used to save the result of the `:S' modifier which is
969           later referenced using the index values from `:range'.
970
971      \e[1m:U\e[4m\e[22mnewval\e[0m
972           If the variable is undefined, \e[4mnewval\e[24m is the value.  If the variable
973           is defined, the existing value is returned.  This is another ODE
974           make feature.  It is handy for setting per-target CFLAGS for
975           instance:
976                 ${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}}
977           If a value is only required if the variable is undefined, use:
978                 ${VAR:D:Unewval}
979
980      \e[1m:D\e[4m\e[22mnewval\e[0m
981           If the variable is defined, \e[4mnewval\e[24m is the value.
982
983      \e[1m:L   \e[22mThe name of the variable is the value.
984
985      \e[1m:P   \e[22mThe path of the node which has the same name as the variable is the
986           value.  If no such node exists or its path is null, then the name of
987           the variable is used.  In order for this modifier to work, the name
988           (node) must at least have appeared on the rhs of a dependency.
989
990      \e[1m:!\e[4m\e[22mcmd\e[24m\e[1m!\e[0m
991           The output of running \e[4mcmd\e[24m is the value.
992
993      \e[1m:sh  \e[22mIf the variable is non-empty it is run as a command and the output
994           becomes the new value.
995
996      \e[1m::=\e[4m\e[22mstr\e[0m
997           The variable is assigned the value \e[4mstr\e[24m after substitution.  This
998           modifier and its variations are useful in obscure situations such as
999           wanting to set a variable when shell commands are being parsed.
1000           These assignment modifiers always expand to nothing, so if appearing
1001           in a rule line by themselves should be preceded with something to
1002           keep \e[1mbmake \e[22mhappy.
1003
1004           The `\e[1m::\e[22m' helps avoid false matches with the AT&T System V UNIX style
1005           \e[1m:= \e[22mmodifier and since substitution always occurs the \e[1m::= \e[22mform is
1006           vaguely appropriate.
1007
1008      \e[1m::?=\e[4m\e[22mstr\e[0m
1009           As for \e[1m::= \e[22mbut only if the variable does not already have a value.
1010
1011      \e[1m::+=\e[4m\e[22mstr\e[0m
1012           Append \e[4mstr\e[24m to the variable.
1013
1014      \e[1m::!=\e[4m\e[22mcmd\e[0m
1015           Assign the output of \e[4mcmd\e[24m to the variable.
1016
1017      \e[1m:[\e[4m\e[22mrange\e[24m\e[1m]\e[0m
1018           Selects one or more words from the value, or performs other opera-
1019           tions related to the way in which the value is divided into words.
1020
1021           Ordinarily, a value is treated as a sequence of words delimited by
1022           white space.  Some modifiers suppress this behavior, causing a value
1023           to be treated as a single word (possibly containing embedded white
1024           space).  An empty value, or a value that consists entirely of white-
1025           space, is treated as a single word.  For the purposes of the `\e[1m:[]\e[22m'
1026           modifier, the words are indexed both forwards using positive inte-
1027           gers (where index 1 represents the first word), and backwards using
1028           negative integers (where index -1 represents the last word).
1029
1030           The \e[4mrange\e[24m is subjected to variable expansion, and the expanded
1031           result is then interpreted as follows:
1032
1033           \e[4mindex\e[24m  Selects a single word from the value.
1034
1035           \e[4mstart\e[24m\e[1m..\e[4m\e[22mend\e[0m
1036                  Selects all words from \e[4mstart\e[24m to \e[4mend\e[24m, inclusive.  For example,
1037                  `\e[1m:[2..-1]\e[22m' selects all words from the second word to the last
1038                  word.  If \e[4mstart\e[24m is greater than \e[4mend\e[24m, then the words are out-
1039                  put in reverse order.  For example, `\e[1m:[-1..1]\e[22m' selects all
1040                  the words from last to first.  If the list is already
1041                  ordered, then this effectively reverses the list, but it is
1042                  more efficient to use `\e[1m:Or\e[22m' instead of `\e[1m:O:[-1..1]\e[22m'.
1043
1044           \e[1m*      \e[22mCauses subsequent modifiers to treat the value as a single
1045                  word (possibly containing embedded white space).  Analogous
1046                  to the effect of "$*" in Bourne shell.
1047
1048           0      Means the same as `\e[1m:[*]\e[22m'.
1049
1050           \e[1m@      \e[22mCauses subsequent modifiers to treat the value as a sequence
1051                  of words delimited by white space.  Analogous to the effect
1052                  of "$@" in Bourne shell.
1053
1054           \e[1m#      \e[22mReturns the number of words in the value.
1055
1056 \e[1mINCLUDE STATEMENTS, CONDITIONALS AND FOR LOOPS\e[0m
1057      Makefile inclusion, conditional structures and for loops reminiscent of
1058      the C programming language are provided in \e[1mbmake\e[22m.  All such structures
1059      are identified by a line beginning with a single dot (`.') character.
1060      Files are included with either \e[1m.include <\e[4m\e[22mfile\e[24m\e[1m> \e[22mor \e[1m.include "\e[4m\e[22mfile\e[24m\e[1m"\e[22m.  Vari-
1061      ables between the angle brackets or double quotes are expanded to form
1062      the file name.  If angle brackets are used, the included makefile is
1063      expected to be in the system makefile directory.  If double quotes are
1064      used, the including makefile's directory and any directories specified
1065      using the \e[1m-I \e[22moption are searched before the system makefile directory.
1066      For compatibility with other versions of \e[1mbmake \e[22m`include file ...' is also
1067      accepted.
1068
1069      If the include statement is written as \e[1m.-include \e[22mor as \e[1m.sinclude \e[22mthen
1070      errors locating and/or opening include files are ignored.
1071
1072      If the include statement is written as \e[1m.dinclude \e[22mnot only are errors
1073      locating and/or opening include files ignored, but stale dependencies
1074      within the included file will be ignored just like \e[4m.MAKE.DEPENDFILE\e[24m.
1075
1076      Conditional expressions are also preceded by a single dot as the first
1077      character of a line.  The possible conditionals are as follows:
1078
1079      \e[1m.error \e[4m\e[22mmessage\e[0m
1080              The message is printed along with the name of the makefile and
1081              line number, then \e[1mbmake \e[22mwill exit immediately.
1082
1083      \e[1m.export \e[4m\e[22mvariable\e[24m \e[4m...\e[0m
1084              Export the specified global variable.  If no variable list is
1085              provided, all globals are exported except for internal variables
1086              (those that start with `.').  This is not affected by the \e[1m-X\e[0m
1087              flag, so should be used with caution.  For compatibility with
1088              other \e[1mbmake \e[22mprograms `export variable=value' is also accepted.
1089
1090              Appending a variable name to \e[4m.MAKE.EXPORTED\e[24m is equivalent to
1091              exporting a variable.
1092
1093      \e[1m.export-env \e[4m\e[22mvariable\e[24m \e[4m...\e[0m
1094              The same as `.export', except that the variable is not appended
1095              to \e[4m.MAKE.EXPORTED\e[24m.  This allows exporting a value to the environ-
1096              ment which is different from that used by \e[1mbmake \e[22minternally.
1097
1098      \e[1m.export-literal \e[4m\e[22mvariable\e[24m \e[4m...\e[0m
1099              The same as `.export-env', except that variables in the value are
1100              not expanded.
1101
1102      \e[1m.info \e[4m\e[22mmessage\e[0m
1103              The message is printed along with the name of the makefile and
1104              line number.
1105
1106      \e[1m.undef \e[4m\e[22mvariable\e[0m
1107              Un-define the specified global variable.  Only global variables
1108              may be un-defined.
1109
1110      \e[1m.unexport \e[4m\e[22mvariable\e[24m \e[4m...\e[0m
1111              The opposite of `.export'.  The specified global \e[4mvariable\e[24m will be
1112              removed from \e[4m.MAKE.EXPORTED\e[24m.  If no variable list is provided,
1113              all globals are unexported, and \e[4m.MAKE.EXPORTED\e[24m deleted.
1114
1115      \e[1m.unexport-env\e[0m
1116              Unexport all globals previously exported and clear the environ-
1117              ment inherited from the parent.  This operation will cause a mem-
1118              ory leak of the original environment, so should be used spar-
1119              ingly.  Testing for \e[4m.MAKE.LEVEL\e[24m being 0, would make sense.  Also
1120              note that any variables which originated in the parent environ-
1121              ment should be explicitly preserved if desired.  For example:
1122
1123                    .if ${.MAKE.LEVEL} == 0
1124                    PATH := ${PATH}
1125                    .unexport-env
1126                    .export PATH
1127                    .endif
1128
1129              Would result in an environment containing only `PATH', which is
1130              the minimal useful environment.  Actually `.MAKE.LEVEL' will also
1131              be pushed into the new environment.
1132
1133      \e[1m.warning \e[4m\e[22mmessage\e[0m
1134              The message prefixed by `\e[4mwarning:\e[24m' is printed along with the name
1135              of the makefile and line number.
1136
1137      \e[1m.if \e[22m[!]\e[4mexpression\e[24m [\e[4moperator\e[24m \e[4mexpression\e[24m \e[4m...\e[24m]
1138              Test the value of an expression.
1139
1140      \e[1m.ifdef \e[22m[!]\e[4mvariable\e[24m [\e[4moperator\e[24m \e[4mvariable\e[24m \e[4m...\e[24m]
1141              Test the value of a variable.
1142
1143      \e[1m.ifndef \e[22m[!]\e[4mvariable\e[24m [\e[4moperator\e[24m \e[4mvariable\e[24m \e[4m...\e[24m]
1144              Test the value of a variable.
1145
1146      \e[1m.ifmake \e[22m[!]\e[4mtarget\e[24m [\e[4moperator\e[24m \e[4mtarget\e[24m \e[4m...\e[24m]
1147              Test the target being built.
1148
1149      \e[1m.ifnmake \e[22m[!] \e[4mtarget\e[24m [\e[4moperator\e[24m \e[4mtarget\e[24m \e[4m...\e[24m]
1150              Test the target being built.
1151
1152      \e[1m.else   \e[22mReverse the sense of the last conditional.
1153
1154      \e[1m.elif \e[22m[!] \e[4mexpression\e[24m [\e[4moperator\e[24m \e[4mexpression\e[24m \e[4m...\e[24m]
1155              A combination of `\e[1m.else\e[22m' followed by `\e[1m.if\e[22m'.
1156
1157      \e[1m.elifdef \e[22m[!]\e[4mvariable\e[24m [\e[4moperator\e[24m \e[4mvariable\e[24m \e[4m...\e[24m]
1158              A combination of `\e[1m.else\e[22m' followed by `\e[1m.ifdef\e[22m'.
1159
1160      \e[1m.elifndef \e[22m[!]\e[4mvariable\e[24m [\e[4moperator\e[24m \e[4mvariable\e[24m \e[4m...\e[24m]
1161              A combination of `\e[1m.else\e[22m' followed by `\e[1m.ifndef\e[22m'.
1162
1163      \e[1m.elifmake \e[22m[!]\e[4mtarget\e[24m [\e[4moperator\e[24m \e[4mtarget\e[24m \e[4m...\e[24m]
1164              A combination of `\e[1m.else\e[22m' followed by `\e[1m.ifmake\e[22m'.
1165
1166      \e[1m.elifnmake \e[22m[!]\e[4mtarget\e[24m [\e[4moperator\e[24m \e[4mtarget\e[24m \e[4m...\e[24m]
1167              A combination of `\e[1m.else\e[22m' followed by `\e[1m.ifnmake\e[22m'.
1168
1169      \e[1m.endif  \e[22mEnd the body of the conditional.
1170
1171      The \e[4moperator\e[24m may be any one of the following:
1172
1173      \e[1m||     \e[22mLogical OR.
1174
1175      \e[1m&&     \e[22mLogical AND; of higher precedence than ``||''.
1176
1177      As in C, \e[1mbmake \e[22mwill only evaluate a conditional as far as is necessary to
1178      determine its value.  Parentheses may be used to change the order of
1179      evaluation.  The boolean operator `\e[1m!\e[22m' may be used to logically negate an
1180      entire conditional.  It is of higher precedence than `\e[1m&&\e[22m'.
1181
1182      The value of \e[4mexpression\e[24m may be any of the following:
1183
1184      \e[1mdefined  \e[22mTakes a variable name as an argument and evaluates to true if
1185               the variable has been defined.
1186
1187      \e[1mmake     \e[22mTakes a target name as an argument and evaluates to true if the
1188               target was specified as part of \e[1mbmake\e[22m's command line or was
1189               declared the default target (either implicitly or explicitly,
1190               see \e[4m.MAIN\e[24m) before the line containing the conditional.
1191
1192      \e[1mempty    \e[22mTakes a variable, with possible modifiers, and evaluates to true
1193               if the expansion of the variable would result in an empty
1194               string.
1195
1196      \e[1mexists   \e[22mTakes a file name as an argument and evaluates to true if the
1197               file exists.  The file is searched for on the system search path
1198               (see \e[4m.PATH\e[24m).
1199
1200      \e[1mtarget   \e[22mTakes a target name as an argument and evaluates to true if the
1201               target has been defined.
1202
1203      \e[1mcommands\e[0m
1204               Takes a target name as an argument and evaluates to true if the
1205               target has been defined and has commands associated with it.
1206
1207      \e[4mExpression\e[24m may also be an arithmetic or string comparison.  Variable
1208      expansion is performed on both sides of the comparison, after which the
1209      numerical values are compared.  A value is interpreted as hexadecimal if
1210      it is preceded by 0x, otherwise it is decimal; octal numbers are not sup-
1211      ported.  The standard C relational operators are all supported.  If after
1212      variable expansion, either the left or right hand side of a `\e[1m==\e[22m' or `\e[1m!=\e[22m'
1213      operator is not a numerical value, then string comparison is performed
1214      between the expanded variables.  If no relational operator is given, it
1215      is assumed that the expanded variable is being compared against 0, or an
1216      empty string in the case of a string comparison.
1217
1218      When \e[1mbmake \e[22mis evaluating one of these conditional expressions, and it
1219      encounters a (white-space separated) word it doesn't recognize, either
1220      the ``make'' or ``defined'' expression is applied to it, depending on the
1221      form of the conditional.  If the form is `\e[1m.ifdef\e[22m', `\e[1m.ifndef\e[22m', or `\e[1m.if\e[22m'
1222      the ``defined'' expression is applied.  Similarly, if the form is
1223      `\e[1m.ifmake\e[22m' or `\e[1m.ifnmake\e[22m', the ``make'' expression is applied.
1224
1225      If the conditional evaluates to true the parsing of the makefile contin-
1226      ues as before.  If it evaluates to false, the following lines are
1227      skipped.  In both cases this continues until a `\e[1m.else\e[22m' or `\e[1m.endif\e[22m' is
1228      found.
1229
1230      For loops are typically used to apply a set of rules to a list of files.
1231      The syntax of a for loop is:
1232
1233      \e[1m.for \e[4m\e[22mvariable\e[24m [\e[4mvariable\e[24m \e[4m...\e[24m] \e[1min \e[4m\e[22mexpression\e[0m
1234      <make-lines>
1235      \e[1m.endfor\e[0m
1236
1237      After the for \e[1mexpression \e[22mis evaluated, it is split into words.  On each
1238      iteration of the loop, one word is taken and assigned to each \e[1mvariable\e[22m,
1239      in order, and these \e[1mvariables \e[22mare substituted into the \e[1mmake-lines \e[22minside
1240      the body of the for loop.  The number of words must come out even; that
1241      is, if there are three iteration variables, the number of words provided
1242      must be a multiple of three.
1243
1244 \e[1mCOMMENTS\e[0m
1245      Comments begin with a hash (`#') character, anywhere but in a shell com-
1246      mand line, and continue to the end of an unescaped new line.
1247
1248 \e[1mSPECIAL SOURCES (ATTRIBUTES)\e[0m
1249      \e[1m.EXEC     \e[22mTarget is never out of date, but always execute commands any-
1250                way.
1251
1252      \e[1m.IGNORE   \e[22mIgnore any errors from the commands associated with this tar-
1253                get, exactly as if they all were preceded by a dash (`-').
1254
1255      \e[1m.MADE     \e[22mMark all sources of this target as being up-to-date.
1256
1257      \e[1m.MAKE     \e[22mExecute the commands associated with this target even if the \e[1m-n\e[0m
1258                or \e[1m-t \e[22moptions were specified.  Normally used to mark recursive
1259                \e[1mbmake\e[22ms.
1260
1261      \e[1m.META     \e[22mCreate a meta file for the target, even if it is flagged as
1262                \e[1m.PHONY\e[22m, \e[1m.MAKE\e[22m, or \e[1m.SPECIAL\e[22m.  Usage in conjunction with \e[1m.MAKE \e[22mis
1263                the most likely case.  In "meta" mode, the target is out-of-
1264                date if the meta file is missing.
1265
1266      \e[1m.NOMETA   \e[22mDo not create a meta file for the target.  Meta files are also
1267                not created for \e[1m.PHONY\e[22m, \e[1m.MAKE\e[22m, or \e[1m.SPECIAL \e[22mtargets.
1268
1269      \e[1m.NOMETA_CMP\e[0m
1270                Ignore differences in commands when deciding if target is out
1271                of date.  This is useful if the command contains a value which
1272                always changes.  If the number of commands change, though, the
1273                target will still be out of date.  The same effect applies to
1274                any command line that uses the variable \e[4m.OODATE\e[24m, which can be
1275                used for that purpose even when not otherwise needed or
1276                desired:
1277
1278
1279                      skip-compare-for-some:
1280                              @echo this will be compared
1281                              @echo this will not ${.OODATE:M.NOMETA_CMP}
1282                              @echo this will also be compared
1283
1284                The \e[1m:M \e[22mpattern suppresses any expansion of the unwanted vari-
1285                able.
1286
1287      \e[1m.NOPATH   \e[22mDo not search for the target in the directories specified by
1288                \e[1m.PATH\e[22m.
1289
1290      \e[1m.NOTMAIN  \e[22mNormally \e[1mbmake \e[22mselects the first target it encounters as the
1291                default target to be built if no target was specified.  This
1292                source prevents this target from being selected.
1293
1294      \e[1m.OPTIONAL\e[0m
1295                If a target is marked with this attribute and \e[1mbmake \e[22mcan't fig-
1296                ure out how to create it, it will ignore this fact and assume
1297                the file isn't needed or already exists.
1298
1299      \e[1m.PHONY    \e[22mThe target does not correspond to an actual file; it is always
1300                considered to be out of date, and will not be created with the
1301                \e[1m-t \e[22moption.  Suffix-transformation rules are not applied to
1302                \e[1m.PHONY \e[22mtargets.
1303
1304      \e[1m.PRECIOUS\e[0m
1305                When \e[1mbmake \e[22mis interrupted, it normally removes any partially
1306                made targets.  This source prevents the target from being
1307                removed.
1308
1309      \e[1m.RECURSIVE\e[0m
1310                Synonym for \e[1m.MAKE\e[22m.
1311
1312      \e[1m.SILENT   \e[22mDo not echo any of the commands associated with this target,
1313                exactly as if they all were preceded by an at sign (`@').
1314
1315      \e[1m.USE      \e[22mTurn the target into \e[1mbmake\e[22m's version of a macro.  When the tar-
1316                get is used as a source for another target, the other target
1317                acquires the commands, sources, and attributes (except for
1318                \e[1m.USE\e[22m) of the source.  If the target already has commands, the
1319                \e[1m.USE \e[22mtarget's commands are appended to them.
1320
1321      \e[1m.USEBEFORE\e[0m
1322                Exactly like \e[1m.USE\e[22m, but prepend the \e[1m.USEBEFORE \e[22mtarget commands
1323                to the target.
1324
1325      \e[1m.WAIT     \e[22mIf \e[1m.WAIT \e[22mappears in a dependency line, the sources that precede
1326                it are made before the sources that succeed it in the line.
1327                Since the dependents of files are not made until the file
1328                itself could be made, this also stops the dependents being
1329                built unless they are needed for another branch of the depen-
1330                dency tree.  So given:
1331
1332                x: a .WAIT b
1333                        echo x
1334                a:
1335                        echo a
1336                b: b1
1337                        echo b
1338                b1:
1339                        echo b1
1340
1341                the output is always `a', `b1', `b', `x'.
1342                The ordering imposed by \e[1m.WAIT \e[22mis only relevant for parallel
1343                makes.
1344
1345 \e[1mSPECIAL TARGETS\e[0m
1346      Special targets may not be included with other targets, i.e. they must be
1347      the only target specified.
1348
1349      \e[1m.BEGIN   \e[22mAny command lines attached to this target are executed before
1350               anything else is done.
1351
1352      \e[1m.DEFAULT\e[0m
1353               This is sort of a \e[1m.USE \e[22mrule for any target (that was used only
1354               as a source) that \e[1mbmake \e[22mcan't figure out any other way to cre-
1355               ate.  Only the shell script is used.  The \e[1m.IMPSRC \e[22mvariable of a
1356               target that inherits \e[1m.DEFAULT\e[22m's commands is set to the target's
1357               own name.
1358
1359      \e[1m.DELETE_ON_ERROR\e[0m
1360               If this target is present in the makefile, it globally causes
1361               make to delete targets whose commands fail.  (By default, only
1362               targets whose commands are interrupted during execution are
1363               deleted.  This is the historical behavior.)  This setting can be
1364               used to help prevent half-finished or malformed targets from
1365               being left around and corrupting future rebuilds.
1366
1367      \e[1m.END     \e[22mAny command lines attached to this target are executed after
1368               everything else is done.
1369
1370      \e[1m.ERROR   \e[22mAny command lines attached to this target are executed when
1371               another target fails.  The \e[1m.ERROR_TARGET \e[22mvariable is set to the
1372               target that failed.  See also \e[1mMAKE_PRINT_VAR_ON_ERROR\e[22m.
1373
1374      \e[1m.IGNORE  \e[22mMark each of the sources with the \e[1m.IGNORE \e[22mattribute.  If no
1375               sources are specified, this is the equivalent of specifying the
1376               \e[1m-i \e[22moption.
1377
1378      \e[1m.INTERRUPT\e[0m
1379               If \e[1mbmake \e[22mis interrupted, the commands for this target will be
1380               executed.
1381
1382      \e[1m.MAIN    \e[22mIf no target is specified when \e[1mbmake \e[22mis invoked, this target
1383               will be built.
1384
1385      \e[1m.MAKEFLAGS\e[0m
1386               This target provides a way to specify flags for \e[1mbmake \e[22mwhen the
1387               makefile is used.  The flags are as if typed to the shell,
1388               though the \e[1m-f \e[22moption will have no effect.
1389
1390      \e[1m.NOPATH  \e[22mApply the \e[1m.NOPATH \e[22mattribute to any specified sources.
1391
1392      \e[1m.NOTPARALLEL\e[0m
1393               Disable parallel mode.
1394
1395      \e[1m.NO_PARALLEL\e[0m
1396               Synonym for \e[1m.NOTPARALLEL\e[22m, for compatibility with other pmake
1397               variants.
1398
1399      \e[1m.OBJDIR  \e[22mThe source is a new value for `\e[4m.OBJDIR\e[24m'.  If it exists, \e[1mbmake\e[0m
1400               will chdir(2) to it and update the value of `\e[4m.OBJDIR\e[24m'.
1401
1402      \e[1m.ORDER   \e[22mThe named targets are made in sequence.  This ordering does not
1403               add targets to the list of targets to be made.  Since the depen-
1404               dents of a target do not get built until the target itself could
1405               be built, unless `a' is built by another part of the dependency
1406               graph, the following is a dependency loop:
1407
1408               .ORDER: b a
1409               b: a
1410
1411               The ordering imposed by \e[1m.ORDER \e[22mis only relevant for parallel
1412               makes.
1413
1414      \e[1m.PATH    \e[22mThe sources are directories which are to be searched for files
1415               not found in the current directory.  If no sources are speci-
1416               fied, any previously specified directories are deleted.  If the
1417               source is the special \e[1m.DOTLAST \e[22mtarget, then the current working
1418               directory is searched last.
1419
1420      \e[1m.PATH.\e[4m\e[22msuffix\e[0m
1421               Like \e[1m.PATH \e[22mbut applies only to files with a particular suffix.
1422               The suffix must have been previously declared with \e[1m.SUFFIXES\e[22m.
1423
1424      \e[1m.PHONY   \e[22mApply the \e[1m.PHONY \e[22mattribute to any specified sources.
1425
1426      \e[1m.PRECIOUS\e[0m
1427               Apply the \e[1m.PRECIOUS \e[22mattribute to any specified sources.  If no
1428               sources are specified, the \e[1m.PRECIOUS \e[22mattribute is applied to
1429               every target in the file.
1430
1431      \e[1m.SHELL   \e[22mSets the shell that \e[1mbmake \e[22mwill use to execute commands.  The
1432               sources are a set of \e[4mfield=value\e[24m pairs.
1433
1434               \e[4mname\e[24m        This is the minimal specification, used to select
1435                           one of the built-in shell specs; \e[4msh\e[24m, \e[4mksh\e[24m, and \e[4mcsh\e[24m.
1436
1437               \e[4mpath\e[24m        Specifies the path to the shell.
1438
1439               \e[4mhasErrCtl\e[24m   Indicates whether the shell supports exit on error.
1440
1441               \e[4mcheck\e[24m       The command to turn on error checking.
1442
1443               \e[4mignore\e[24m      The command to disable error checking.
1444
1445               \e[4mecho\e[24m        The command to turn on echoing of commands executed.
1446
1447               \e[4mquiet\e[24m       The command to turn off echoing of commands exe-
1448                           cuted.
1449
1450               \e[4mfilter\e[24m      The output to filter after issuing the \e[4mquiet\e[24m com-
1451                           mand.  It is typically identical to \e[4mquiet\e[24m.
1452
1453               \e[4merrFlag\e[24m     The flag to pass the shell to enable error checking.
1454
1455               \e[4mechoFlag\e[24m    The flag to pass the shell to enable command echo-
1456                           ing.
1457
1458               \e[4mnewline\e[24m     The string literal to pass the shell that results in
1459                           a single newline character when used outside of any
1460                           quoting characters.
1461               Example:
1462
1463               .SHELL: name=ksh path=/bin/ksh hasErrCtl=true \
1464                       check="set -e" ignore="set +e" \
1465                       echo="set -v" quiet="set +v" filter="set +v" \
1466                       echoFlag=v errFlag=e newline="'\n'"
1467
1468      \e[1m.SILENT  \e[22mApply the \e[1m.SILENT \e[22mattribute to any specified sources.  If no
1469               sources are specified, the \e[1m.SILENT \e[22mattribute is applied to every
1470               command in the file.
1471
1472      \e[1m.STALE   \e[22mThis target gets run when a dependency file contains stale
1473               entries, having \e[4m.ALLSRC\e[24m set to the name of that dependency file.
1474
1475      \e[1m.SUFFIXES\e[0m
1476               Each source specifies a suffix to \e[1mbmake\e[22m.  If no sources are
1477               specified, any previously specified suffixes are deleted.  It
1478               allows the creation of suffix-transformation rules.
1479
1480               Example:
1481
1482               .SUFFIXES: .o
1483               .c.o:
1484                       cc -o ${.TARGET} -c ${.IMPSRC}
1485
1486 \e[1mENVIRONMENT\e[0m
1487      \e[1mbmake \e[22muses the following environment variables, if they exist: MACHINE,
1488      MACHINE_ARCH, MAKE, MAKEFLAGS, MAKEOBJDIR, MAKEOBJDIRPREFIX, MAKESYSPATH,
1489      PWD, and TMPDIR.
1490
1491      MAKEOBJDIRPREFIX and MAKEOBJDIR may only be set in the environment or on
1492      the command line to \e[1mbmake \e[22mand not as makefile variables; see the descrip-
1493      tion of `\e[4m.OBJDIR\e[24m' for more details.
1494
1495 \e[1mFILES\e[0m
1496      .depend        list of dependencies
1497      Makefile       list of dependencies
1498      makefile       list of dependencies
1499      sys.mk         system makefile
1500      /usr/share/mk  system makefile directory
1501
1502 \e[1mCOMPATIBILITY\e[0m
1503      The basic make syntax is compatible between different versions of make;
1504      however the special variables, variable modifiers and conditionals are
1505      not.
1506
1507    \e[1mOlder versions\e[0m
1508      An incomplete list of changes in older versions of \e[1mbmake\e[22m:
1509
1510      The way that .for loop variables are substituted changed after NetBSD 5.0
1511      so that they still appear to be variable expansions.  In particular this
1512      stops them being treated as syntax, and removes some obscure problems
1513      using them in .if statements.
1514
1515      The way that parallel makes are scheduled changed in NetBSD 4.0 so that
1516      .ORDER and .WAIT apply recursively to the dependent nodes.  The algo-
1517      rithms used may change again in the future.
1518
1519    \e[1mOther make dialects\e[0m
1520      Other make dialects (GNU make, SVR4 make, POSIX make, etc.) do not sup-
1521      port most of the features of \e[1mbmake \e[22mas described in this manual.  Most
1522      notably:
1523
1524            \e[1m+\bo   \e[22mThe \e[1m.WAIT \e[22mand \e[1m.ORDER \e[22mdeclarations and most functionality per-
1525                taining to parallelization.  (GNU make supports parallelization
1526                but lacks these features needed to control it effectively.)
1527
1528            \e[1m+\bo   \e[22mDirectives, including for loops and conditionals and most of
1529                the forms of include files.  (GNU make has its own incompatible
1530                and less powerful syntax for conditionals.)
1531
1532            \e[1m+\bo   \e[22mAll built-in variables that begin with a dot.
1533
1534            \e[1m+\bo   \e[22mMost of the special sources and targets that begin with a dot,
1535                with the notable exception of \e[1m.PHONY\e[22m, \e[1m.PRECIOUS\e[22m, and \e[1m.SUFFIXES\e[22m.
1536
1537            \e[1m+\bo   \e[22mVariable modifiers, except for the
1538                      :old=new
1539                string substitution, which does not portably support globbing
1540                with `%' and historically only works on declared suffixes.
1541
1542            \e[1m+\bo   \e[22mThe \e[1m$> \e[22mvariable even in its short form; most makes support this
1543                functionality but its name varies.
1544
1545      Some features are somewhat more portable, such as assignment with \e[1m+=\e[22m, \e[1m?=\e[22m,
1546      and \e[1m!=\e[22m.  The \e[1m.PATH \e[22mfunctionality is based on an older feature \e[1mVPATH \e[22mfound
1547      in GNU make and many versions of SVR4 make; however, historically its
1548      behavior is too ill-defined (and too buggy) to rely upon.
1549
1550      The \e[1m$@ \e[22mand \e[1m$< \e[22mvariables are more or less universally portable, as is the
1551      \e[1m$(MAKE) \e[22mvariable.  Basic use of suffix rules (for files only in the cur-
1552      rent directory, not trying to chain transformations together, etc.) is
1553      also reasonably portable.
1554
1555 \e[1mSEE ALSO\e[0m
1556      mkdep(1)
1557
1558 \e[1mHISTORY\e[0m
1559      \e[1mbmake \e[22mis derived from NetBSD make(1).  It uses autoconf to facilitate
1560      portability to other platforms.
1561
1562      A make command appeared in Version 7 AT&T UNIX.  This make implementation
1563      is based on Adam De Boor's pmake program which was written for Sprite at
1564      Berkeley.  It was designed to be a parallel distributed make running jobs
1565      on different machines using a daemon called ``customs''.
1566
1567      Historically the target/dependency ``FRC'' has been used to FoRCe
1568      rebuilding (since the target/dependency does not exist... unless someone
1569      creates an ``FRC'' file).
1570
1571 \e[1mBUGS\e[0m
1572      The make syntax is difficult to parse without actually acting on the
1573      data.  For instance, finding the end of a variable's use should involve
1574      scanning each of the modifiers, using the correct terminator for each
1575      field.  In many places make just counts {} and () in order to find the
1576      end of a variable expansion.
1577
1578      There is no way of escaping a space character in a filename.
1579
1580 FreeBSD 11.3                   November 14, 2020                  FreeBSD 11.3