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