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