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