]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/bmake/bmake.cat1
Import atf 0.22 snapshot ca73d08c3fc1ecffc1f1c97458c31ab82c12bb01
[FreeBSD/FreeBSD.git] / contrib / bmake / bmake.cat1
1 BMAKE(1)                FreeBSD General Commands Manual               BMAKE(1)
2
3 \e[1mNAME\e[0m
4      \e[1mbmake \e[22m-- maintain program dependencies
5
6 \e[1mSYNOPSIS\e[0m
7      \e[1mbmake \e[22m[\e[1m-BeikNnqrSstWwX\e[22m] [\e[1m-C \e[4m\e[22mdirectory\e[24m] [\e[1m-D \e[4m\e[22mvariable\e[24m] [\e[1m-d \e[4m\e[22mflags\e[24m]
8            [\e[1m-f \e[4m\e[22mmakefile\e[24m] [\e[1m-I \e[4m\e[22mdirectory\e[24m] [\e[1m-J \e[4m\e[22mprivate\e[24m] [\e[1m-j \e[4m\e[22mmax_jobs\e[24m]
9            [\e[1m-m \e[4m\e[22mdirectory\e[24m] [\e[1m-T \e[4m\e[22mfile\e[24m] [\e[1m-V \e[4m\e[22mvariable\e[24m] [\e[1m-v \e[4m\e[22mvariable\e[24m]
10            [\e[4mvariable=value\e[24m] [\e[4mtarget\e[24m \e[4m...\e[24m]
11
12 \e[1mDESCRIPTION\e[0m
13      \e[1mbmake \e[22mis a program designed to simplify the maintenance of other pro-
14      grams.  Its input is a list of specifications as to the files upon which
15      programs and other files depend.  If no \e[1m-f \e[4m\e[22mmakefile\e[24m makefile option is
16      given, \e[1mbmake \e[22mwill try to open `\e[4mmakefile\e[24m' then `\e[4mMakefile\e[24m' in order to find
17      the specifications.  If the file `\e[4m.depend\e[24m' exists, it is read (see
18      mkdep(1)).
19
20      This manual page is intended as a reference document only.  For a more
21      thorough description of \e[1mbmake \e[22mand makefiles, please refer to \e[4mPMake\e[24m \e[4m-\e[24m \e[4mA\e[0m
22      \e[4mTutorial\e[24m.
23
24      \e[1mbmake \e[22mwill prepend the contents of the \e[4mMAKEFLAGS\e[24m environment variable to
25      the command line arguments before parsing them.
26
27      The options are as follows:
28
29      \e[1m-B      \e[22mTry to be backwards compatible by executing a single shell per
30              command and by executing the commands to make the sources of a
31              dependency line in sequence.
32
33      \e[1m-C \e[4m\e[22mdirectory\e[0m
34              Change to \e[4mdirectory\e[24m before reading the makefiles or doing any-
35              thing else.  If multiple \e[1m-C \e[22moptions are specified, each is inter-
36              preted relative to the previous one: \e[1m-C \e[4m\e[22m/\e[24m \e[1m-C \e[4m\e[22metc\e[24m is equivalent to
37              \e[1m-C \e[4m\e[22m/etc\e[24m.
38
39      \e[1m-D \e[4m\e[22mvariable\e[0m
40              Define \e[4mvariable\e[24m to be 1, in the global context.
41
42      \e[1m-d \e[4m\e[22m[-]flags\e[0m
43              Turn on debugging, and specify which portions of \e[1mbmake \e[22mare to
44              print debugging information.  Unless the flags are preceded by
45              `-' they are added to the \e[4mMAKEFLAGS\e[24m environment variable and will
46              be processed by any child make processes.  By default, debugging
47              information is printed to standard error, but this can be changed
48              using the \e[4mF\e[24m debugging flag.  The debugging output is always 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              context after all makefiles have been read.  By default, the raw
228              variable contents (which may include additional unexpanded vari-
229              able references) are shown.  If \e[4mvariable\e[24m contains a `$' then the
230              value will be recursively expanded to its complete resultant text
231              before printing.  The expanded value will also be printed if
232              \e[4m.MAKE.EXPAND_VARIABLES\e[24m is set to true and the \e[1m-dV \e[22moption has not
233              been used to override it.  Note that loop-local and target-local
234              variables, as well as values taken temporarily by global vari-
235              ables during makefile processing, are not accessible via this 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 are all built in and their values vary magically from
447      target to target.  It is not currently possible to define new local vari-
448      ables.  The seven local variables are as follows:
449
450            \e[4m.ALLSRC\e[24m   The list of all sources for this target; also known as
451                      `\e[4m>\e[24m'.
452
453            \e[4m.ARCHIVE\e[24m  The name of the archive file; also known as `\e[4m!\e[24m'.
454
455            \e[4m.IMPSRC\e[24m   In suffix-transformation rules, the name/path of the
456                      source from which the target is to be transformed (the
457                      "implied" source); also known as `\e[4m<\e[24m'.  It is not defined
458                      in explicit rules.
459
460            \e[4m.MEMBER\e[24m   The name of the archive member; also known as `\e[4m%\e[24m'.
461
462            \e[4m.OODATE\e[24m   The list of sources for this target that were deemed out-
463                      of-date; also known as `\e[4m?\e[24m'.
464
465            \e[4m.PREFIX\e[24m   The file prefix of the target, containing only the file
466                      portion, no suffix or preceding directory components;
467                      also known as `\e[4m*\e[24m'.  The suffix must be one of the known
468                      suffixes declared with \e[1m.SUFFIXES \e[22mor it will not be recog-
469                      nized.
470
471            \e[4m.TARGET\e[24m   The name of the target; also known as `\e[4m@\e[24m'.  For compati-
472                      bility with other makes this is an alias for \e[1m.ARCHIVE \e[22min
473                      archive member rules.
474
475      The shorter forms (`\e[4m>\e[24m', `\e[4m!\e[24m', `\e[4m<\e[24m', `\e[4m%\e[24m', `\e[4m?\e[24m', `\e[4m*\e[24m', and `\e[4m@\e[24m') are permitted
476      for backward compatibility with historical makefiles and legacy POSIX
477      make and are not recommended.
478
479      Variants of these variables with the punctuation followed immediately by
480      `D' or `F', e.g.  `\e[4m$(@D)\e[24m', are legacy forms equivalent to using the `:H'
481      and `:T' modifiers.  These forms are accepted for compatibility with AT&T
482      System V UNIX makefiles and POSIX but are not recommended.
483
484      Four of the local variables may be used in sources on dependency lines
485      because they expand to the proper value for each target on the line.
486      These variables are `\e[4m.TARGET\e[24m', `\e[4m.PREFIX\e[24m', `\e[4m.ARCHIVE\e[24m', and `\e[4m.MEMBER\e[24m'.
487
488    \e[1mAdditional built-in variables\e[0m
489      In addition, \e[1mbmake \e[22msets or knows about the following variables:
490
491      \e[4m$\e[24m               A single dollar sign `$', i.e.  `$$' expands to a single
492                      dollar sign.
493
494      \e[4m.ALLTARGETS\e[24m     The list of all targets encountered in the Makefile.  If
495                      evaluated during Makefile parsing, lists only those tar-
496                      gets encountered thus far.
497
498      \e[4m.CURDIR\e[24m         A path to the directory where \e[1mbmake \e[22mwas executed.  Refer
499                      to the description of `PWD' for more details.
500
501      \e[4m.INCLUDEDFROMDIR\e[0m
502                      The directory of the file this Makefile was included
503                      from.
504
505      \e[4m.INCLUDEDFROMFILE\e[0m
506                      The filename of the file this Makefile was included from.
507
508      MAKE            The name that \e[1mbmake \e[22mwas executed with (\e[4margv[0]\e[24m).  For
509                      compatibility \e[1mbmake \e[22malso sets \e[4m.MAKE\e[24m with the same value.
510                      The preferred variable to use is the environment variable
511                      MAKE because it is more compatible with other versions of
512                      \e[1mbmake \e[22mand cannot be confused with the special target with
513                      the same name.
514
515      \e[4m.MAKE.DEPENDFILE\e[0m
516                      Names the makefile (default `\e[4m.depend\e[24m') from which gener-
517                      ated dependencies are read.
518
519      \e[4m.MAKE.EXPAND_VARIABLES\e[0m
520                      A boolean that controls the default behavior of the \e[1m-V\e[0m
521                      option.  If true, variable values printed with \e[1m-V \e[22mare
522                      fully expanded; if false, the raw variable contents
523                      (which may include additional unexpanded variable refer-
524                      ences) are shown.
525
526      \e[4m.MAKE.EXPORTED\e[24m  The list of variables exported by \e[1mbmake\e[22m.
527
528      \e[4m.MAKE.JOBS\e[24m      The argument to the \e[1m-j \e[22moption.
529
530      \e[4m.MAKE.JOB.PREFIX\e[0m
531                      If \e[1mbmake \e[22mis run with \e[4mj\e[24m then output for each target is
532                      prefixed with a token `--- target ---' the first part of
533                      which can be controlled via \e[4m.MAKE.JOB.PREFIX\e[24m.  If
534                      \e[4m.MAKE.JOB.PREFIX\e[24m is empty, no token is printed.
535                      For example:
536                      .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}]
537                      would produce tokens like `---make[1234] target ---' mak-
538                      ing it easier to track the degree of parallelism being
539                      achieved.
540
541      MAKEFLAGS       The environment variable `MAKEFLAGS' may contain anything
542                      that may be specified on \e[1mbmake\e[22m's command line.  Anything
543                      specified on \e[1mbmake\e[22m's command line is appended to the
544                      `MAKEFLAGS' variable which is then entered into the envi-
545                      ronment for all programs which \e[1mbmake \e[22mexecutes.
546
547      \e[4m.MAKE.LEVEL\e[24m     The recursion depth of \e[1mbmake\e[22m.  The initial instance of
548                      \e[1mbmake \e[22mwill be 0, and an incremented value is put into the
549                      environment to be seen by the next generation.  This al-
550                      lows tests like: .if ${.MAKE.LEVEL} == 0 to protect
551                      things which should only be evaluated in the initial in-
552                      stance of \e[1mbmake\e[22m.
553
554      \e[4m.MAKE.MAKEFILE_PREFERENCE\e[0m
555                      The ordered list of makefile names (default `\e[4mmakefile\e[24m',
556                      `\e[4mMakefile\e[24m') that \e[1mbmake \e[22mwill look for.
557
558      \e[4m.MAKE.MAKEFILES\e[0m
559                      The list of makefiles read by \e[1mbmake\e[22m, which is useful for
560                      tracking dependencies.  Each makefile is recorded only
561                      once, regardless of the number of times read.
562
563      \e[4m.MAKE.MODE\e[24m      Processed after reading all makefiles.  Can affect the
564                      mode that \e[1mbmake \e[22mruns in.  It can contain a number of key-
565                      words:
566
567                      \e[4mcompat\e[24m               Like \e[1m-B\e[22m, puts \e[1mbmake \e[22minto "compat"
568                                           mode.
569
570                      \e[4mmeta\e[24m                 Puts \e[1mbmake \e[22minto "meta" mode, where
571                                           meta files are created for each tar-
572                                           get to capture the command run, the
573                                           output generated and if filemon(4)
574                                           is available, the system calls which
575                                           are of interest to \e[1mbmake\e[22m.  The cap-
576                                           tured output can be very useful when
577                                           diagnosing errors.
578
579                      \e[4mcurdirOk=\e[24m \e[4mbf\e[24m         Normally \e[1mbmake \e[22mwill not create .meta
580                                           files in `\e[4m.CURDIR\e[24m'.  This can be
581                                           overridden by setting \e[4mbf\e[24m to a value
582                                           which represents True.
583
584                      \e[4mmissing-meta=\e[24m \e[4mbf\e[24m     If \e[4mbf\e[24m is True, then a missing .meta
585                                           file makes the target out-of-date.
586
587                      \e[4mmissing-filemon=\e[24m \e[4mbf\e[24m  If \e[4mbf\e[24m is True, then missing filemon
588                                           data makes the target out-of-date.
589
590                      \e[4mnofilemon\e[24m            Do not use filemon(4).
591
592                      \e[4menv\e[24m                  For debugging, it can be useful to
593                                           include the environment in the .meta
594                                           file.
595
596                      \e[4mverbose\e[24m              If in "meta" mode, print a clue
597                                           about the target being built.  This
598                                           is useful if the build is otherwise
599                                           running silently.  The message
600                                           printed the value of:
601                                           \e[4m.MAKE.META.PREFIX\e[24m.
602
603                      \e[4mignore-cmd\e[24m           Some makefiles have commands which
604                                           are simply not stable.  This keyword
605                                           causes them to be ignored for deter-
606                                           mining whether a target is out of
607                                           date in "meta" mode.  See also
608                                           \e[1m.NOMETA_CMP\e[22m.
609
610                      \e[4msilent=\e[24m \e[4mbf\e[24m           If \e[4mbf\e[24m is True, when a .meta file is
611                                           created, mark the target \e[1m.SILENT\e[22m.
612
613      \e[4m.MAKE.META.BAILIWICK\e[0m
614                      In "meta" mode, provides a list of prefixes which match
615                      the directories controlled by \e[1mbmake\e[22m.  If a file that was
616                      generated outside of \e[4m.OBJDIR\e[24m but within said bailiwick is
617                      missing, the current target is considered out-of-date.
618
619      \e[4m.MAKE.META.CREATED\e[0m
620                      In "meta" mode, this variable contains a list of all the
621                      meta files updated.  If not empty, it can be used to
622                      trigger processing of \e[4m.MAKE.META.FILES\e[24m.
623
624      \e[4m.MAKE.META.FILES\e[0m
625                      In "meta" mode, this variable contains a list of all the
626                      meta files used (updated or not).  This list can be used
627                      to process the meta files to extract dependency informa-
628                      tion.
629
630      \e[4m.MAKE.META.IGNORE_PATHS\e[0m
631                      Provides a list of path prefixes that should be ignored;
632                      because the contents are expected to change over time.
633                      The default list includes: `\e[4m/dev\e[24m \e[4m/etc\e[24m \e[4m/proc\e[24m \e[4m/tmp\e[24m \e[4m/var/run\e[0m
634                      \e[4m/var/tmp\e[24m'
635
636      \e[4m.MAKE.META.IGNORE_PATTERNS\e[0m
637                      Provides a list of patterns to match against pathnames.
638                      Ignore any that match.
639
640      \e[4m.MAKE.META.IGNORE_FILTER\e[0m
641                      Provides a list of variable modifiers to apply to each
642                      pathname.  Ignore if the expansion is an empty string.
643
644      \e[4m.MAKE.META.PREFIX\e[0m
645                      Defines the message printed for each meta file updated in
646                      "meta verbose" mode.  The default value is:
647                            Building ${.TARGET:H:tA}/${.TARGET:T}
648
649      \e[4m.MAKEOVERRIDES\e[24m  This variable is used to record the names of variables
650                      assigned to on the command line, so that they may be ex-
651                      ported as part of `MAKEFLAGS'.  This behavior can be dis-
652                      abled by assigning an empty value to `\e[4m.MAKEOVERRIDES\e[24m'
653                      within a makefile.  Extra variables can be exported from
654                      a makefile by appending their names to `\e[4m.MAKEOVERRIDES\e[24m'.
655                      `MAKEFLAGS' is re-exported whenever `\e[4m.MAKEOVERRIDES\e[24m' is
656                      modified.
657
658      \e[4m.MAKE.PATH_FILEMON\e[0m
659                      If \e[1mbmake \e[22mwas built with filemon(4) support, this is set
660                      to the path of the device node.  This allows makefiles to
661                      test for this support.
662
663      \e[4m.MAKE.PID\e[24m       The process-id of \e[1mbmake\e[22m.
664
665      \e[4m.MAKE.PPID\e[24m      The parent process-id of \e[1mbmake\e[22m.
666
667      \e[4m.MAKE.SAVE_DOLLARS\e[0m
668                      value should be a boolean that controls whether `$$' are
669                      preserved when doing `:=' assignments.  The default is
670                      false, for backwards compatibility.  Set to true for com-
671                      patability with other makes.  If set to false, `$$' be-
672                      comes `$' per normal evaluation rules.
673
674      \e[4m.MAKE.UID\e[24m       The user-id running \e[1mbmake\e[22m.
675
676      \e[4m.MAKE.GID\e[24m       The group-id running \e[1mbmake\e[22m.
677
678      \e[4mMAKE_PRINT_VAR_ON_ERROR\e[0m
679                      When \e[1mbmake \e[22mstops due to an error, it sets `\e[4m.ERROR_TARGET\e[24m'
680                      to the name of the target that failed, `\e[4m.ERROR_CMD\e[24m' to
681                      the commands of the failed target, and in "meta" mode, it
682                      also sets `\e[4m.ERROR_CWD\e[24m' to the getcwd(3), and
683                      `\e[4m.ERROR_META_FILE\e[24m' to the path of the meta file (if any)
684                      describing the failed target.  It then prints its name
685                      and the value of `\e[4m.CURDIR\e[24m' as well as the value of any
686                      variables named in `\e[4mMAKE_PRINT_VAR_ON_ERROR\e[24m'.
687
688      \e[4m.newline\e[24m        This variable is simply assigned a newline character as
689                      its value.  This allows expansions using the \e[1m:@ \e[22mmodifier
690                      to put a newline between iterations of the loop rather
691                      than a space.  For example, the printing of
692                      `\e[4mMAKE_PRINT_VAR_ON_ERROR\e[24m' could be done as
693                      ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}.
694
695      \e[4m.OBJDIR\e[24m         A path to the directory where the targets are built.  Its
696                      value is determined by trying to chdir(2) to the follow-
697                      ing directories in order and using the first match:
698
699                      1.   ${MAKEOBJDIRPREFIX}${.CURDIR}
700
701                           (Only if `MAKEOBJDIRPREFIX' is set in the environ-
702                           ment or on the command line.)
703
704                      2.   ${MAKEOBJDIR}
705
706                           (Only if `MAKEOBJDIR' is set in the environment or
707                           on the command line.)
708
709                      3.   ${.CURDIR}\e[4m/obj.\e[24m${MACHINE}
710
711                      4.   ${.CURDIR}\e[4m/obj\e[0m
712
713                      5.   \e[4m/usr/obj/\e[24m${.CURDIR}
714
715                      6.   ${.CURDIR}
716
717                      Variable expansion is performed on the value before it's
718                      used, so expressions such as
719                            ${.CURDIR:S,^/usr/src,/var/obj,}
720                      may be used.  This is especially useful with
721                      `MAKEOBJDIR'.
722
723                      `\e[4m.OBJDIR\e[24m' may be modified in the makefile via the special
724                      target `\e[1m.OBJDIR\e[22m'.  In all cases, \e[1mbmake \e[22mwill chdir(2) to
725                      the specified directory if it exists, and set `\e[4m.OBJDIR\e[24m'
726                      and `PWD' to that directory before executing any targets.
727
728                      Except in the case of an explicit `\e[1m.OBJDIR\e[22m' target, \e[1mbmake\e[0m
729                      will check that the specified directory is writable and
730                      ignore it if not.  This check can be skipped by setting
731                      the environment variable `MAKE_OBJDIR_CHECK_WRITABLE' to
732                      "no".
733
734      \e[4m.PARSEDIR\e[24m       A path to the directory of the current `\e[4mMakefile\e[24m' being
735                      parsed.
736
737      \e[4m.PARSEFILE\e[24m      The basename of the current `\e[4mMakefile\e[24m' being parsed.
738                      This variable and `\e[4m.PARSEDIR\e[24m' are both set only while the
739                      `\e[4mMakefiles\e[24m' are being parsed.  If you want to retain
740                      their current values, assign them to a variable using as-
741                      signment with expansion: (`\e[1m:=\e[22m').
742
743      \e[4m.PATH\e[24m           A variable that represents the list of directories that
744                      \e[1mbmake \e[22mwill search for files.  The search list should be
745                      updated using the target `\e[4m.PATH\e[24m' rather than the vari-
746                      able.
747
748      PWD             Alternate path to the current directory.  \e[1mbmake \e[22mnormally
749                      sets `\e[4m.CURDIR\e[24m' to the canonical path given by getcwd(3).
750                      However, if the environment variable `PWD' is set and
751                      gives a path to the current directory, then \e[1mbmake \e[22msets
752                      `\e[4m.CURDIR\e[24m' to the value of `PWD' instead.  This behavior
753                      is disabled if `MAKEOBJDIRPREFIX' is set or `MAKEOBJDIR'
754                      contains a variable transform.  `PWD' is set to the value
755                      of `\e[4m.OBJDIR\e[24m' for all programs which \e[1mbmake \e[22mexecutes.
756
757      .SHELL          The pathname of the shell used to run target scripts.  It
758                      is read-only.
759
760      .TARGETS        The list of targets explicitly specified on the command
761                      line, if any.
762
763      VPATH           Colon-separated (":") lists of directories that \e[1mbmake\e[0m
764                      will search for files.  The variable is supported for
765                      compatibility with old make programs only, use `\e[4m.PATH\e[24m'
766                      instead.
767
768    \e[1mVariable modifiers\e[0m
769      Variable expansion may be modified to select or modify each word of the
770      variable (where a "word" is white-space delimited sequence of charac-
771      ters).  The general format of a variable expansion is as follows:
772
773            ${variable[:modifier[:...]]}
774
775      Each modifier begins with a colon, which may be escaped with a backslash
776      (`\').
777
778      A set of modifiers can be specified via a variable, as follows:
779
780            modifier_variable=modifier[:...]
781            ${variable:${modifier_variable}[:...]}
782
783      In this case the first modifier in the modifier_variable does not start
784      with a colon, since that must appear in the referencing variable.  If any
785      of the modifiers in the modifier_variable contain a dollar sign (`$'),
786      these must be doubled to avoid early expansion.
787
788      The supported modifiers are:
789
790      \e[1m:E   \e[22mReplaces each word in the variable with its suffix.
791
792      \e[1m:H   \e[22mReplaces each word in the variable with everything but the last com-
793           ponent.
794
795      \e[1m:M\e[4m\e[22mpattern\e[0m
796           Selects only those words that match \e[4mpattern\e[24m.  The standard shell
797           wildcard characters (`*', `?', and `[]') may be used.  The wildcard
798           characters may be escaped with a backslash (`\').  As a consequence
799           of the way values are split into words, matched, and then joined, a
800           construct like
801                 ${VAR:M*}
802           will normalize the inter-word spacing, removing all leading and
803           trailing space, and converting multiple consecutive spaces to single
804           spaces.
805
806      \e[1m:N\e[4m\e[22mpattern\e[0m
807           This is identical to `\e[1m:M\e[22m', but selects all words which do not match
808           \e[4mpattern\e[24m.
809
810      \e[1m:O   \e[22mOrders every word in variable alphabetically.
811
812      \e[1m:Or  \e[22mOrders every word in variable in reverse alphabetical order.
813
814      \e[1m:Ox  \e[22mShuffles the words in variable.  The results will be different each
815           time you are referring to the modified variable; use the assignment
816           with expansion (`\e[1m:=\e[22m') to prevent such behavior.  For example,
817
818                 LIST=                   uno due tre quattro
819                 RANDOM_LIST=            ${LIST:Ox}
820                 STATIC_RANDOM_LIST:=    ${LIST:Ox}
821
822                 all:
823                         @echo "${RANDOM_LIST}"
824                         @echo "${RANDOM_LIST}"
825                         @echo "${STATIC_RANDOM_LIST}"
826                         @echo "${STATIC_RANDOM_LIST}"
827           may produce output similar to:
828
829                 quattro due tre uno
830                 tre due quattro uno
831                 due uno quattro tre
832                 due uno quattro tre
833
834      \e[1m:Q   \e[22mQuotes every shell meta-character in the variable, so that it can be
835           passed safely to the shell.
836
837      \e[1m:q   \e[22mQuotes every shell meta-character in the variable, and also doubles
838           `$' characters so that it can be passed safely through recursive in-
839           vocations of \e[1mbmake\e[22m.  This is equivalent to: `:S/\$/&&/g:Q'.
840
841      \e[1m:R   \e[22mReplaces each word in the variable with everything but its suffix.
842
843      \e[1m:range[=count]\e[0m
844           The value is an integer sequence representing the words of the orig-
845           inal value, or the supplied \e[4mcount\e[24m.
846
847      \e[1m:gmtime[=utc]\e[0m
848           The value is a format string for strftime(3), using gmtime(3).  If a
849           \e[4mutc\e[24m value is not provided or is 0, the current time is used.
850
851      \e[1m:hash\e[0m
852           Computes a 32-bit hash of the value and encode it as hex digits.
853
854      \e[1m:localtime[=utc]\e[0m
855           The value is a format string for strftime(3), using localtime(3).
856           If a \e[4mutc\e[24m value is not provided or is 0, the current time is used.
857
858      \e[1m:tA  \e[22mAttempts to convert variable to an absolute path using realpath(3),
859           if that fails, the value is unchanged.
860
861      \e[1m:tl  \e[22mConverts variable to lower-case letters.
862
863      \e[1m:ts\e[4m\e[22mc\e[0m
864           Words in the variable are normally separated by a space on expan-
865           sion.  This modifier sets the separator to the character \e[4mc\e[24m.  If \e[4mc\e[24m is
866           omitted, then no separator is used.  The common escapes (including
867           octal numeric codes) work as expected.
868
869      \e[1m:tu  \e[22mConverts variable to upper-case letters.
870
871      \e[1m:tW  \e[22mCauses the value to be treated as a single word (possibly containing
872           embedded white space).  See also `\e[1m:[*]\e[22m'.
873
874      \e[1m:tw  \e[22mCauses the value to be treated as a sequence of words delimited by
875           white space.  See also `\e[1m:[@]\e[22m'.
876
877      \e[1m:S\e[22m/\e[4mold_string\e[24m/\e[4mnew_string\e[24m/[\e[1m1gW\e[22m]
878           Modifies the first occurrence of \e[4mold_string\e[24m in each word of the
879           variable's value, replacing it with \e[4mnew_string\e[24m.  If a `g' is ap-
880           pended to the last delimiter of the pattern, all occurrences in each
881           word are replaced.  If a `1' is appended to the last delimiter of
882           the pattern, only the first occurrence is affected.  If a `W' is ap-
883           pended to the last delimiter of the pattern, then the value is
884           treated as a single word (possibly containing embedded white space).
885           If \e[4mold_string\e[24m begins with a caret (`^'), \e[4mold_string\e[24m is anchored at
886           the beginning of each word.  If \e[4mold_string\e[24m ends with a dollar sign
887           (`$'), it is anchored at the end of each word.  Inside \e[4mnew_string\e[24m,
888           an ampersand (`&') is replaced by \e[4mold_string\e[24m (without any `^' or
889           `$').  Any character may be used as a delimiter for the parts of the
890           modifier string.  The anchoring, ampersand and delimiter characters
891           may be escaped with a backslash (`\').
892
893           Variable expansion occurs in the normal fashion inside both
894           \e[4mold_string\e[24m and \e[4mnew_string\e[24m with the single exception that a backslash
895           is used to prevent the expansion of a dollar sign (`$'), not a pre-
896           ceding dollar sign as is usual.
897
898      \e[1m:C\e[22m/\e[4mpattern\e[24m/\e[4mreplacement\e[24m/[\e[1m1gW\e[22m]
899           The \e[1m:C \e[22mmodifier is just like the \e[1m:S \e[22mmodifier except that the old and
900           new strings, instead of being simple strings, are an extended regu-
901           lar expression (see regex(3)) string \e[4mpattern\e[24m and an ed(1)-style
902           string \e[4mreplacement\e[24m.  Normally, the first occurrence of the pattern
903           \e[4mpattern\e[24m in each word of the value is substituted with \e[4mreplacement\e[24m.
904           The `1' modifier causes the substitution to apply to at most one
905           word; the `g' modifier causes the substitution to apply to as many
906           instances of the search pattern \e[4mpattern\e[24m as occur in the word or
907           words it is found in; the `W' modifier causes the value to be
908           treated as a single word (possibly containing embedded white space).
909
910           As for the \e[1m:S \e[22mmodifier, the \e[4mpattern\e[24m and \e[4mreplacement\e[24m are subjected to
911           variable expansion before being parsed as regular expressions.
912
913      \e[1m:T   \e[22mReplaces each word in the variable with its last path component.
914
915      \e[1m:u   \e[22mRemoves adjacent duplicate words (like uniq(1)).
916
917      \e[1m:?\e[4m\e[22mtrue_string\e[24m\e[1m:\e[4m\e[22mfalse_string\e[0m
918           If the variable name (not its value), when parsed as a .if condi-
919           tional expression, evaluates to true, return as its value the
920           \e[4mtrue_string\e[24m, otherwise return the \e[4mfalse_string\e[24m.  Since the variable
921           name is used as the expression, :? must be the first modifier after
922           the variable name itself - which will, of course, usually contain
923           variable expansions.  A common error is trying to use expressions
924           like
925                 ${NUMBERS:M42:?match:no}
926           which actually tests defined(NUMBERS), to determine if any words
927           match "42" you need to use something like:
928                 ${"${NUMBERS:M42}" != "":?match:no}.
929
930      \e[4m:old_string=new_string\e[0m
931           This is the AT&T System V UNIX style variable substitution.  It must
932           be the last modifier specified.  If \e[4mold_string\e[24m or \e[4mnew_string\e[24m do not
933           contain the pattern matching character \e[4m%\e[24m then it is assumed that
934           they are anchored at the end of each word, so only suffixes or en-
935           tire words may be replaced.  Otherwise \e[4m%\e[24m is the substring of
936           \e[4mold_string\e[24m to be replaced in \e[4mnew_string\e[24m.  If only \e[4mold_string\e[24m con-
937           tains the pattern matching character \e[4m%\e[24m, and \e[4mold_string\e[24m matches, then
938           the result is the \e[4mnew_string\e[24m.  If only the \e[4mnew_string\e[24m contains the
939           pattern matching character \e[4m%\e[24m, then it is not treated specially and
940           it is printed as a literal \e[4m%\e[24m on match.  If there is more than one
941           pattern matching character (\e[4m%\e[24m) in either the \e[4mnew_string\e[24m or
942           \e[4mold_string\e[24m, only the first instance is treated specially (as the
943           pattern character); all subsequent instances are treated as regular
944           characters.
945
946           Variable expansion occurs in the normal fashion inside both
947           \e[4mold_string\e[24m and \e[4mnew_string\e[24m with the single exception that a backslash
948           is used to prevent the expansion of a dollar sign (`$'), not a pre-
949           ceding dollar sign as is usual.
950
951      \e[1m:@\e[4m\e[22mtemp\e[24m\e[1m@\e[4m\e[22mstring\e[24m\e[1m@\e[0m
952           This is the loop expansion mechanism from the OSF Development Envi-
953           ronment (ODE) make.  Unlike \e[1m.for \e[22mloops, expansion occurs at the time
954           of reference.  Assigns \e[4mtemp\e[24m to each word in the variable and evalu-
955           ates \e[4mstring\e[24m.  The ODE convention is that \e[4mtemp\e[24m should start and end
956           with a period.  For example.
957                 ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@}
958
959           However a single character variable is often more readable:
960                 ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}
961
962      \e[1m:_[=var]\e[0m
963           Saves the current variable value in `$_' or the named \e[4mvar\e[24m for later
964           reference.  Example usage:
965
966                 M_cmpv.units = 1 1000 1000000
967                 M_cmpv = S,., ,g:_:range:@i@+ $${_:[-$$i]} \
968                 \* $${M_cmpv.units:[$$i]}@:S,^,expr 0 ,1:sh
969
970                 .if ${VERSION:${M_cmpv}} < ${3.1.12:L:${M_cmpv}}
971
972           Here `$_' is used to save the result of the `:S' modifier which is
973           later referenced using the index values from `:range'.
974
975      \e[1m:U\e[4m\e[22mnewval\e[0m
976           If the variable is undefined, \e[4mnewval\e[24m is the value.  If the variable
977           is defined, the existing value is returned.  This is another ODE
978           make feature.  It is handy for setting per-target CFLAGS for in-
979           stance:
980                 ${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}}
981           If a value is only required if the variable is undefined, use:
982                 ${VAR:D:Unewval}
983
984      \e[1m:D\e[4m\e[22mnewval\e[0m
985           If the variable is defined, \e[4mnewval\e[24m is the value.
986
987      \e[1m:L   \e[22mThe name of the variable is the value.
988
989      \e[1m:P   \e[22mThe path of the node which has the same name as the variable is the
990           value.  If no such node exists or its path is null, then the name of
991           the variable is used.  In order for this modifier to work, the name
992           (node) must at least have appeared on the rhs of a dependency.
993
994      \e[1m:!\e[4m\e[22mcmd\e[24m\e[1m!\e[0m
995           The output of running \e[4mcmd\e[24m is the value.
996
997      \e[1m:sh  \e[22mIf the variable is non-empty it is run as a command and the output
998           becomes the new value.
999
1000      \e[1m::=\e[4m\e[22mstr\e[0m
1001           The variable is assigned the value \e[4mstr\e[24m after substitution.  This
1002           modifier and its variations are useful in obscure situations such as
1003           wanting to set a variable when shell commands are being parsed.
1004           These assignment modifiers always expand to nothing, so if appearing
1005           in a rule line by themselves should be preceded with something to
1006           keep \e[1mbmake \e[22mhappy.
1007
1008           The `\e[1m::\e[22m' helps avoid false matches with the AT&T System V UNIX style
1009           \e[1m:= \e[22mmodifier and since substitution always occurs the \e[1m::= \e[22mform is
1010           vaguely appropriate.
1011
1012      \e[1m::?=\e[4m\e[22mstr\e[0m
1013           As for \e[1m::= \e[22mbut only if the variable does not already have a value.
1014
1015      \e[1m::+=\e[4m\e[22mstr\e[0m
1016           Append \e[4mstr\e[24m to the variable.
1017
1018      \e[1m::!=\e[4m\e[22mcmd\e[0m
1019           Assign the output of \e[4mcmd\e[24m to the variable.
1020
1021      \e[1m:[\e[4m\e[22mrange\e[24m\e[1m]\e[0m
1022           Selects one or more words from the value, or performs other opera-
1023           tions related to the way in which the value is divided into words.
1024
1025           Ordinarily, a value is treated as a sequence of words delimited by
1026           white space.  Some modifiers suppress this behavior, causing a value
1027           to be treated as a single word (possibly containing embedded white
1028           space).  An empty value, or a value that consists entirely of white-
1029           space, is treated as a single word.  For the purposes of the `\e[1m:[]\e[22m'
1030           modifier, the words are indexed both forwards using positive inte-
1031           gers (where index 1 represents the first word), and backwards using
1032           negative integers (where index -1 represents the last word).
1033
1034           The \e[4mrange\e[24m is subjected to variable expansion, and the expanded re-
1035           sult is then interpreted as follows:
1036
1037           \e[4mindex\e[24m  Selects a single word from the value.
1038
1039           \e[4mstart\e[24m\e[1m..\e[4m\e[22mend\e[0m
1040                  Selects all words from \e[4mstart\e[24m to \e[4mend\e[24m, inclusive.  For example,
1041                  `\e[1m:[2..-1]\e[22m' selects all words from the second word to the last
1042                  word.  If \e[4mstart\e[24m is greater than \e[4mend\e[24m, then the words are out-
1043                  put in reverse order.  For example, `\e[1m:[-1..1]\e[22m' selects all
1044                  the words from last to first.  If the list is already or-
1045                  dered, then this effectively reverses the list, but it is
1046                  more efficient to use `\e[1m:Or\e[22m' instead of `\e[1m:O:[-1..1]\e[22m'.
1047
1048           \e[1m*      \e[22mCauses subsequent modifiers to treat the value as a single
1049                  word (possibly containing embedded white space).  Analogous
1050                  to the effect of "$*" in Bourne shell.
1051
1052           0      Means the same as `\e[1m:[*]\e[22m'.
1053
1054           \e[1m@      \e[22mCauses subsequent modifiers to treat the value as a sequence
1055                  of words delimited by white space.  Analogous to the effect
1056                  of "$@" in Bourne shell.
1057
1058           \e[1m#      \e[22mReturns the number of words in the value.
1059
1060 \e[1mINCLUDE STATEMENTS, CONDITIONALS AND FOR LOOPS\e[0m
1061      Makefile inclusion, conditional structures and for loops reminiscent of
1062      the C programming language are provided in \e[1mbmake\e[22m.  All such structures
1063      are identified by a line beginning with a single dot (`.') character.
1064      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-
1065      ables between the angle brackets or double quotes are expanded to form
1066      the file name.  If angle brackets are used, the included makefile is ex-
1067      pected to be in the system makefile directory.  If double quotes are
1068      used, the including makefile's directory and any directories specified
1069      using the \e[1m-I \e[22moption are searched before the system makefile directory.
1070      For compatibility with other versions of \e[1mbmake \e[22m`include file ...' is also
1071      accepted.
1072
1073      If the include statement is written as \e[1m.-include \e[22mor as \e[1m.sinclude \e[22mthen er-
1074      rors locating and/or opening include files are ignored.
1075
1076      If the include statement is written as \e[1m.dinclude \e[22mnot only are errors lo-
1077      cating and/or opening include files ignored, but stale dependencies
1078      within the included file will be ignored just like \e[4m.MAKE.DEPENDFILE\e[24m.
1079
1080      Conditional expressions are also preceded by a single dot as the first
1081      character of a line.  The possible conditionals are as follows:
1082
1083      \e[1m.error \e[4m\e[22mmessage\e[0m
1084              The message is printed along with the name of the makefile and
1085              line number, then \e[1mbmake \e[22mwill exit immediately.
1086
1087      \e[1m.export \e[4m\e[22mvariable\e[24m \e[4m...\e[0m
1088              Export the specified global variable.  If no variable list is
1089              provided, all globals are exported except for internal variables
1090              (those that start with `.').  This is not affected by the \e[1m-X\e[0m
1091              flag, so should be used with caution.  For compatibility with
1092              other \e[1mbmake \e[22mprograms `export variable=value' is also accepted.
1093
1094              Appending a variable name to \e[4m.MAKE.EXPORTED\e[24m is equivalent to ex-
1095              porting a variable.
1096
1097      \e[1m.export-env \e[4m\e[22mvariable\e[24m \e[4m...\e[0m
1098              The same as `.export', except that the variable is not appended
1099              to \e[4m.MAKE.EXPORTED\e[24m.  This allows exporting a value to the environ-
1100              ment which is different from that used by \e[1mbmake \e[22minternally.
1101
1102      \e[1m.export-literal \e[4m\e[22mvariable\e[24m \e[4m...\e[0m
1103              The same as `.export-env', except that variables in the value are
1104              not expanded.
1105
1106      \e[1m.info \e[4m\e[22mmessage\e[0m
1107              The message is printed along with the name of the makefile and
1108              line number.
1109
1110      \e[1m.undef \e[4m\e[22mvariable\e[24m \e[4m...\e[0m
1111              Un-define the specified global variables.  Only global variables
1112              can be un-defined.
1113
1114      \e[1m.unexport \e[4m\e[22mvariable\e[24m \e[4m...\e[0m
1115              The opposite of `.export'.  The specified global \e[4mvariable\e[24m will be
1116              removed from \e[4m.MAKE.EXPORTED\e[24m.  If no variable list is provided,
1117              all globals are unexported, and \e[4m.MAKE.EXPORTED\e[24m deleted.
1118
1119      \e[1m.unexport-env\e[0m
1120              Unexport all globals previously exported and clear the environ-
1121              ment inherited from the parent.  This operation will cause a mem-
1122              ory leak of the original environment, so should be used spar-
1123              ingly.  Testing for \e[4m.MAKE.LEVEL\e[24m being 0, would make sense.  Also
1124              note that any variables which originated in the parent environ-
1125              ment should be explicitly preserved if desired.  For example:
1126
1127                    .if ${.MAKE.LEVEL} == 0
1128                    PATH := ${PATH}
1129                    .unexport-env
1130                    .export PATH
1131                    .endif
1132
1133              Would result in an environment containing only `PATH', which is
1134              the minimal useful environment.  Actually `.MAKE.LEVEL' will also
1135              be pushed into the new environment.
1136
1137      \e[1m.warning \e[4m\e[22mmessage\e[0m
1138              The message prefixed by `\e[4mwarning:\e[24m' is printed along with the name
1139              of the makefile and line number.
1140
1141      \e[1m.if \e[22m[!]\e[4mexpression\e[24m [\e[4moperator\e[24m \e[4mexpression\e[24m \e[4m...\e[24m]
1142              Test the value of an expression.
1143
1144      \e[1m.ifdef \e[22m[!]\e[4mvariable\e[24m [\e[4moperator\e[24m \e[4mvariable\e[24m \e[4m...\e[24m]
1145              Test the value of a variable.
1146
1147      \e[1m.ifndef \e[22m[!]\e[4mvariable\e[24m [\e[4moperator\e[24m \e[4mvariable\e[24m \e[4m...\e[24m]
1148              Test the value of a variable.
1149
1150      \e[1m.ifmake \e[22m[!]\e[4mtarget\e[24m [\e[4moperator\e[24m \e[4mtarget\e[24m \e[4m...\e[24m]
1151              Test the target being built.
1152
1153      \e[1m.ifnmake \e[22m[!] \e[4mtarget\e[24m [\e[4moperator\e[24m \e[4mtarget\e[24m \e[4m...\e[24m]
1154              Test the target being built.
1155
1156      \e[1m.else   \e[22mReverse the sense of the last conditional.
1157
1158      \e[1m.elif \e[22m[!] \e[4mexpression\e[24m [\e[4moperator\e[24m \e[4mexpression\e[24m \e[4m...\e[24m]
1159              A combination of `\e[1m.else\e[22m' followed by `\e[1m.if\e[22m'.
1160
1161      \e[1m.elifdef \e[22m[!]\e[4mvariable\e[24m [\e[4moperator\e[24m \e[4mvariable\e[24m \e[4m...\e[24m]
1162              A combination of `\e[1m.else\e[22m' followed by `\e[1m.ifdef\e[22m'.
1163
1164      \e[1m.elifndef \e[22m[!]\e[4mvariable\e[24m [\e[4moperator\e[24m \e[4mvariable\e[24m \e[4m...\e[24m]
1165              A combination of `\e[1m.else\e[22m' followed by `\e[1m.ifndef\e[22m'.
1166
1167      \e[1m.elifmake \e[22m[!]\e[4mtarget\e[24m [\e[4moperator\e[24m \e[4mtarget\e[24m \e[4m...\e[24m]
1168              A combination of `\e[1m.else\e[22m' followed by `\e[1m.ifmake\e[22m'.
1169
1170      \e[1m.elifnmake \e[22m[!]\e[4mtarget\e[24m [\e[4moperator\e[24m \e[4mtarget\e[24m \e[4m...\e[24m]
1171              A combination of `\e[1m.else\e[22m' followed by `\e[1m.ifnmake\e[22m'.
1172
1173      \e[1m.endif  \e[22mEnd the body of the conditional.
1174
1175      The \e[4moperator\e[24m may be any one of the following:
1176
1177      \e[1m||     \e[22mLogical OR.
1178
1179      \e[1m&&     \e[22mLogical AND; of higher precedence than "||".
1180
1181      As in C, \e[1mbmake \e[22mwill only evaluate a conditional as far as is necessary to
1182      determine its value.  Parentheses may be used to change the order of
1183      evaluation.  The boolean operator `\e[1m!\e[22m' may be used to logically negate an
1184      entire conditional.  It is of higher precedence than `\e[1m&&\e[22m'.
1185
1186      The value of \e[4mexpression\e[24m may be any of the following:
1187
1188      \e[1mdefined  \e[22mTakes a variable name as an argument and evaluates to true if
1189               the variable has been defined.
1190
1191      \e[1mmake     \e[22mTakes a target name as an argument and evaluates to true if the
1192               target was specified as part of \e[1mbmake\e[22m's command line or was de-
1193               clared the default target (either implicitly or explicitly, see
1194               \e[4m.MAIN\e[24m) before the line containing the conditional.
1195
1196      \e[1mempty    \e[22mTakes a variable, with possible modifiers, and evaluates to true
1197               if the expansion of the variable would result in an empty
1198               string.
1199
1200      \e[1mexists   \e[22mTakes a file name as an argument and evaluates to true if the
1201               file exists.  The file is searched for on the system search path
1202               (see \e[4m.PATH\e[24m).
1203
1204      \e[1mtarget   \e[22mTakes a target name as an argument and evaluates to true if the
1205               target has been defined.
1206
1207      \e[1mcommands\e[0m
1208               Takes a target name as an argument and evaluates to true if the
1209               target has been defined and has commands associated with it.
1210
1211      \e[4mExpression\e[24m may also be an arithmetic or string comparison.  Variable ex-
1212      pansion is performed on both sides of the comparison, after which the nu-
1213      merical values are compared.  A value is interpreted as hexadecimal if it
1214      is preceded by 0x, otherwise it is decimal; octal numbers are not sup-
1215      ported.  The standard C relational operators are all supported.  If after
1216      variable expansion, either the left or right hand side of a `\e[1m==\e[22m' or `\e[1m!=\e[22m'
1217      operator is not a numerical value, then string comparison is performed
1218      between the expanded variables.  If no relational operator is given, it
1219      is assumed that the expanded variable is being compared against 0, or an
1220      empty string in the case of a string comparison.
1221
1222      When \e[1mbmake \e[22mis evaluating one of these conditional expressions, and it en-
1223      counters a (white-space separated) word it doesn't recognize, either the
1224      "make" or "defined" expression is applied to it, depending on the form of
1225      the conditional.  If the form is `\e[1m.ifdef\e[22m', `\e[1m.ifndef\e[22m', or `\e[1m.if\e[22m' the
1226      "defined" expression is applied.  Similarly, if the form is `\e[1m.ifmake\e[22m' or
1227      `\e[1m.ifnmake\e[22m', the "make" expression is applied.
1228
1229      If the conditional evaluates to true the parsing of the makefile contin-
1230      ues as before.  If it evaluates to false, the following lines are
1231      skipped.  In both cases this continues until a `\e[1m.else\e[22m' or `\e[1m.endif\e[22m' is
1232      found.
1233
1234      For loops are typically used to apply a set of rules to a list of files.
1235      The syntax of a for loop is:
1236
1237      \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
1238      <make-lines>
1239      \e[1m.endfor\e[0m
1240
1241      After the for \e[1mexpression \e[22mis evaluated, it is split into words.  On each
1242      iteration of the loop, one word is taken and assigned to each \e[1mvariable\e[22m,
1243      in order, and these \e[1mvariables \e[22mare substituted into the \e[1mmake-lines \e[22minside
1244      the body of the for loop.  The number of words must come out even; that
1245      is, if there are three iteration variables, the number of words provided
1246      must be a multiple of three.
1247
1248 \e[1mCOMMENTS\e[0m
1249      Comments begin with a hash (`#') character, anywhere but in a shell com-
1250      mand line, and continue to the end of an unescaped new line.
1251
1252 \e[1mSPECIAL SOURCES (ATTRIBUTES)\e[0m
1253      \e[1m.EXEC     \e[22mTarget is never out of date, but always execute commands any-
1254                way.
1255
1256      \e[1m.IGNORE   \e[22mIgnore any errors from the commands associated with this tar-
1257                get, exactly as if they all were preceded by a dash (`-').
1258
1259      \e[1m.MADE     \e[22mMark all sources of this target as being up-to-date.
1260
1261      \e[1m.MAKE     \e[22mExecute the commands associated with this target even if the \e[1m-n\e[0m
1262                or \e[1m-t \e[22moptions were specified.  Normally used to mark recursive
1263                \e[1mbmake\e[22ms.
1264
1265      \e[1m.META     \e[22mCreate a meta file for the target, even if it is flagged as
1266                \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
1267                the most likely case.  In "meta" mode, the target is out-of-
1268                date if the meta file is missing.
1269
1270      \e[1m.NOMETA   \e[22mDo not create a meta file for the target.  Meta files are also
1271                not created for \e[1m.PHONY\e[22m, \e[1m.MAKE\e[22m, or \e[1m.SPECIAL \e[22mtargets.
1272
1273      \e[1m.NOMETA_CMP\e[0m
1274                Ignore differences in commands when deciding if target is out
1275                of date.  This is useful if the command contains a value which
1276                always changes.  If the number of commands change, though, the
1277                target will still be out of date.  The same effect applies to
1278                any command line that uses the variable \e[4m.OODATE\e[24m, which can be
1279                used for that purpose even when not otherwise needed or de-
1280                sired:
1281
1282
1283                      skip-compare-for-some:
1284                              @echo this will be compared
1285                              @echo this will not ${.OODATE:M.NOMETA_CMP}
1286                              @echo this will also be compared
1287
1288                The \e[1m:M \e[22mpattern suppresses any expansion of the unwanted vari-
1289                able.
1290
1291      \e[1m.NOPATH   \e[22mDo not search for the target in the directories specified by
1292                \e[1m.PATH\e[22m.
1293
1294      \e[1m.NOTMAIN  \e[22mNormally \e[1mbmake \e[22mselects the first target it encounters as the
1295                default target to be built if no target was specified.  This
1296                source prevents this target from being selected.
1297
1298      \e[1m.OPTIONAL\e[0m
1299                If a target is marked with this attribute and \e[1mbmake \e[22mcan't fig-
1300                ure out how to create it, it will ignore this fact and assume
1301                the file isn't needed or already exists.
1302
1303      \e[1m.PHONY    \e[22mThe target does not correspond to an actual file; it is always
1304                considered to be out of date, and will not be created with the
1305                \e[1m-t \e[22moption.  Suffix-transformation rules are not applied to
1306                \e[1m.PHONY \e[22mtargets.
1307
1308      \e[1m.PRECIOUS\e[0m
1309                When \e[1mbmake \e[22mis interrupted, it normally removes any partially
1310                made targets.  This source prevents the target from being re-
1311                moved.
1312
1313      \e[1m.RECURSIVE\e[0m
1314                Synonym for \e[1m.MAKE\e[22m.
1315
1316      \e[1m.SILENT   \e[22mDo not echo any of the commands associated with this target,
1317                exactly as if they all were preceded by an at sign (`@').
1318
1319      \e[1m.USE      \e[22mTurn the target into \e[1mbmake\e[22m's version of a macro.  When the tar-
1320                get is used as a source for another target, the other target
1321                acquires the commands, sources, and attributes (except for
1322                \e[1m.USE\e[22m) of the source.  If the target already has commands, the
1323                \e[1m.USE \e[22mtarget's commands are appended to them.
1324
1325      \e[1m.USEBEFORE\e[0m
1326                Exactly like \e[1m.USE\e[22m, but prepend the \e[1m.USEBEFORE \e[22mtarget commands
1327                to the target.
1328
1329      \e[1m.WAIT     \e[22mIf \e[1m.WAIT \e[22mappears in a dependency line, the sources that precede
1330                it are made before the sources that succeed it in the line.
1331                Since the dependents of files are not made until the file it-
1332                self could be made, this also stops the dependents being built
1333                unless they are needed for another branch of the dependency
1334                tree.  So given:
1335
1336                x: a .WAIT b
1337                        echo x
1338                a:
1339                        echo a
1340                b: b1
1341                        echo b
1342                b1:
1343                        echo b1
1344
1345                the output is always `a', `b1', `b', `x'.
1346                The ordering imposed by \e[1m.WAIT \e[22mis only relevant for parallel
1347                makes.
1348
1349 \e[1mSPECIAL TARGETS\e[0m
1350      Special targets may not be included with other targets, i.e. they must be
1351      the only target specified.
1352
1353      \e[1m.BEGIN   \e[22mAny command lines attached to this target are executed before
1354               anything else is done.
1355
1356      \e[1m.DEFAULT\e[0m
1357               This is sort of a \e[1m.USE \e[22mrule for any target (that was used only
1358               as a source) that \e[1mbmake \e[22mcan't figure out any other way to cre-
1359               ate.  Only the shell script is used.  The \e[1m.IMPSRC \e[22mvariable of a
1360               target that inherits \e[1m.DEFAULT\e[22m's commands is set to the target's
1361               own name.
1362
1363      \e[1m.DELETE_ON_ERROR\e[0m
1364               If this target is present in the makefile, it globally causes
1365               make to delete targets whose commands fail.  (By default, only
1366               targets whose commands are interrupted during execution are
1367               deleted.  This is the historical behavior.)  This setting can be
1368               used to help prevent half-finished or malformed targets from be-
1369               ing left around and corrupting future rebuilds.
1370
1371      \e[1m.END     \e[22mAny command lines attached to this target are executed after ev-
1372               erything else is done.
1373
1374      \e[1m.ERROR   \e[22mAny command lines attached to this target are executed when an-
1375               other target fails.  The \e[1m.ERROR_TARGET \e[22mvariable is set to the
1376               target that failed.  See also \e[1mMAKE_PRINT_VAR_ON_ERROR\e[22m.
1377
1378      \e[1m.IGNORE  \e[22mMark each of the sources with the \e[1m.IGNORE \e[22mattribute.  If no
1379               sources are specified, this is the equivalent of specifying the
1380               \e[1m-i \e[22moption.
1381
1382      \e[1m.INTERRUPT\e[0m
1383               If \e[1mbmake \e[22mis interrupted, the commands for this target will be
1384               executed.
1385
1386      \e[1m.MAIN    \e[22mIf no target is specified when \e[1mbmake \e[22mis invoked, this target
1387               will be built.
1388
1389      \e[1m.MAKEFLAGS\e[0m
1390               This target provides a way to specify flags for \e[1mbmake \e[22mwhen the
1391               makefile is used.  The flags are as if typed to the shell,
1392               though the \e[1m-f \e[22moption will have no effect.
1393
1394      \e[1m.NOPATH  \e[22mApply the \e[1m.NOPATH \e[22mattribute to any specified sources.
1395
1396      \e[1m.NOTPARALLEL\e[0m
1397               Disable parallel mode.
1398
1399      \e[1m.NO_PARALLEL\e[0m
1400               Synonym for \e[1m.NOTPARALLEL\e[22m, for compatibility with other pmake
1401               variants.
1402
1403      \e[1m.OBJDIR  \e[22mThe source is a new value for `\e[4m.OBJDIR\e[24m'.  If it exists, \e[1mbmake\e[0m
1404               will chdir(2) to it and update the value of `\e[4m.OBJDIR\e[24m'.
1405
1406      \e[1m.ORDER   \e[22mThe named targets are made in sequence.  This ordering does not
1407               add targets to the list of targets to be made.  Since the depen-
1408               dents of a target do not get built until the target itself could
1409               be built, unless `a' is built by another part of the dependency
1410               graph, the following is a dependency loop:
1411
1412               .ORDER: b a
1413               b: a
1414
1415               The ordering imposed by \e[1m.ORDER \e[22mis only relevant for parallel
1416               makes.
1417
1418      \e[1m.PATH    \e[22mThe sources are directories which are to be searched for files
1419               not found in the current directory.  If no sources are speci-
1420               fied, any previously specified directories are deleted.  If the
1421               source is the special \e[1m.DOTLAST \e[22mtarget, then the current working
1422               directory is searched last.
1423
1424      \e[1m.PATH.\e[4m\e[22msuffix\e[0m
1425               Like \e[1m.PATH \e[22mbut applies only to files with a particular suffix.
1426               The suffix must have been previously declared with \e[1m.SUFFIXES\e[22m.
1427
1428      \e[1m.PHONY   \e[22mApply the \e[1m.PHONY \e[22mattribute to any specified sources.
1429
1430      \e[1m.PRECIOUS\e[0m
1431               Apply the \e[1m.PRECIOUS \e[22mattribute to any specified sources.  If no
1432               sources are specified, the \e[1m.PRECIOUS \e[22mattribute is applied to ev-
1433               ery target in the file.
1434
1435      \e[1m.SHELL   \e[22mSets the shell that \e[1mbmake \e[22mwill use to execute commands.  The
1436               sources are a set of \e[4mfield=value\e[24m pairs.
1437
1438               \e[4mname\e[24m        This is the minimal specification, used to select
1439                           one of the built-in shell specs; \e[4msh\e[24m, \e[4mksh\e[24m, and \e[4mcsh\e[24m.
1440
1441               \e[4mpath\e[24m        Specifies the path to the shell.
1442
1443               \e[4mhasErrCtl\e[24m   Indicates whether the shell supports exit on error.
1444
1445               \e[4mcheck\e[24m       The command to turn on error checking.
1446
1447               \e[4mignore\e[24m      The command to disable error checking.
1448
1449               \e[4mecho\e[24m        The command to turn on echoing of commands executed.
1450
1451               \e[4mquiet\e[24m       The command to turn off echoing of commands exe-
1452                           cuted.
1453
1454               \e[4mfilter\e[24m      The output to filter after issuing the \e[4mquiet\e[24m com-
1455                           mand.  It is typically identical to \e[4mquiet\e[24m.
1456
1457               \e[4merrFlag\e[24m     The flag to pass the shell to enable error checking.
1458
1459               \e[4mechoFlag\e[24m    The flag to pass the shell to enable command echo-
1460                           ing.
1461
1462               \e[4mnewline\e[24m     The string literal to pass the shell that results in
1463                           a single newline character when used outside of any
1464                           quoting characters.
1465               Example:
1466
1467               .SHELL: name=ksh path=/bin/ksh hasErrCtl=true \
1468                       check="set -e" ignore="set +e" \
1469                       echo="set -v" quiet="set +v" filter="set +v" \
1470                       echoFlag=v errFlag=e newline="'\n'"
1471
1472      \e[1m.SILENT  \e[22mApply the \e[1m.SILENT \e[22mattribute to any specified sources.  If no
1473               sources are specified, the \e[1m.SILENT \e[22mattribute is applied to every
1474               command in the file.
1475
1476      \e[1m.STALE   \e[22mThis target gets run when a dependency file contains stale en-
1477               tries, having \e[4m.ALLSRC\e[24m set to the name of that dependency file.
1478
1479      \e[1m.SUFFIXES\e[0m
1480               Each source specifies a suffix to \e[1mbmake\e[22m.  If no sources are
1481               specified, any previously specified suffixes are deleted.  It
1482               allows the creation of suffix-transformation rules.
1483
1484               Example:
1485
1486               .SUFFIXES: .o
1487               .c.o:
1488                       cc -o ${.TARGET} -c ${.IMPSRC}
1489
1490 \e[1mENVIRONMENT\e[0m
1491      \e[1mbmake \e[22muses the following environment variables, if they exist: MACHINE,
1492      MACHINE_ARCH, MAKE, MAKEFLAGS, MAKEOBJDIR, MAKEOBJDIRPREFIX, MAKESYSPATH,
1493      PWD, and TMPDIR.
1494
1495      MAKEOBJDIRPREFIX and MAKEOBJDIR may only be set in the environment or on
1496      the command line to \e[1mbmake \e[22mand not as makefile variables; see the descrip-
1497      tion of `\e[4m.OBJDIR\e[24m' for more details.
1498
1499 \e[1mFILES\e[0m
1500      .depend        list of dependencies
1501      Makefile       list of dependencies
1502      makefile       list of dependencies
1503      sys.mk         system makefile
1504      /usr/share/mk  system makefile directory
1505
1506 \e[1mCOMPATIBILITY\e[0m
1507      The basic make syntax is compatible between different versions of make;
1508      however the special variables, variable modifiers and conditionals are
1509      not.
1510
1511    \e[1mOlder versions\e[0m
1512      An incomplete list of changes in older versions of \e[1mbmake\e[22m:
1513
1514      The way that .for loop variables are substituted changed after NetBSD 5.0
1515      so that they still appear to be variable expansions.  In particular this
1516      stops them being treated as syntax, and removes some obscure problems us-
1517      ing them in .if statements.
1518
1519      The way that parallel makes are scheduled changed in NetBSD 4.0 so that
1520      .ORDER and .WAIT apply recursively to the dependent nodes.  The algo-
1521      rithms used may change again in the future.
1522
1523    \e[1mOther make dialects\e[0m
1524      Other make dialects (GNU make, SVR4 make, POSIX make, etc.) do not sup-
1525      port most of the features of \e[1mbmake \e[22mas described in this manual.  Most no-
1526      tably:
1527
1528            \e[1m+\bo   \e[22mThe \e[1m.WAIT \e[22mand \e[1m.ORDER \e[22mdeclarations and most functionality per-
1529                taining to parallelization.  (GNU make supports parallelization
1530                but lacks these features needed to control it effectively.)
1531
1532            \e[1m+\bo   \e[22mDirectives, including for loops and conditionals and most of
1533                the forms of include files.  (GNU make has its own incompatible
1534                and less powerful syntax for conditionals.)
1535
1536            \e[1m+\bo   \e[22mAll built-in variables that begin with a dot.
1537
1538            \e[1m+\bo   \e[22mMost of the special sources and targets that begin with a dot,
1539                with the notable exception of \e[1m.PHONY\e[22m, \e[1m.PRECIOUS\e[22m, and \e[1m.SUFFIXES\e[22m.
1540
1541            \e[1m+\bo   \e[22mVariable modifiers, except for the
1542                      :old=new
1543                string substitution, which does not portably support globbing
1544                with `%' and historically only works on declared suffixes.
1545
1546            \e[1m+\bo   \e[22mThe \e[1m$> \e[22mvariable even in its short form; most makes support this
1547                functionality but its name varies.
1548
1549      Some features are somewhat more portable, such as assignment with \e[1m+=\e[22m, \e[1m?=\e[22m,
1550      and \e[1m!=\e[22m.  The \e[1m.PATH \e[22mfunctionality is based on an older feature \e[1mVPATH \e[22mfound
1551      in GNU make and many versions of SVR4 make; however, historically its be-
1552      havior is too ill-defined (and too buggy) to rely upon.
1553
1554      The \e[1m$@ \e[22mand \e[1m$< \e[22mvariables are more or less universally portable, as is the
1555      \e[1m$(MAKE) \e[22mvariable.  Basic use of suffix rules (for files only in the cur-
1556      rent directory, not trying to chain transformations together, etc.) is
1557      also reasonably portable.
1558
1559 \e[1mSEE ALSO\e[0m
1560      mkdep(1)
1561
1562 \e[1mHISTORY\e[0m
1563      \e[1mbmake \e[22mis derived from NetBSD make(1).  It uses autoconf to facilitate
1564      portability to other platforms.
1565
1566      A make command appeared in Version 7 AT&T UNIX.  This make implementation
1567      is based on Adam De Boor's pmake program which was written for Sprite at
1568      Berkeley.  It was designed to be a parallel distributed make running jobs
1569      on different machines using a daemon called "customs".
1570
1571      Historically the target/dependency "FRC" has been used to FoRCe rebuild-
1572      ing (since the target/dependency does not exist... unless someone creates
1573      an "FRC" file).
1574
1575 \e[1mBUGS\e[0m
1576      The make syntax is difficult to parse without actually acting on the
1577      data.  For instance, finding the end of a variable's use should involve
1578      scanning each of the modifiers, using the correct terminator for each
1579      field.  In many places make just counts {} and () in order to find the
1580      end of a variable expansion.
1581
1582      There is no way of escaping a space character in a filename.
1583
1584 FreeBSD 13.0                   December 22, 2020                  FreeBSD 13.0