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