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