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