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