1BMAKE(1) FreeBSD General Commands Manual BMAKE(1) 2 3NNAAMMEE 4 bbmmaakkee - maintain program dependencies 5 6SSYYNNOOPPSSIISS 7 bbmmaakkee [--BBeeiikkNNnnqqrrSSssttWWwwXX] [--CC _d_i_r_e_c_t_o_r_y] [--DD _v_a_r_i_a_b_l_e] [--dd _f_l_a_g_s] 8 [--ff _m_a_k_e_f_i_l_e] [--II _d_i_r_e_c_t_o_r_y] [--JJ _p_r_i_v_a_t_e] [--jj _m_a_x___j_o_b_s] 9 [--mm _d_i_r_e_c_t_o_r_y] [--TT _f_i_l_e] [--VV _v_a_r_i_a_b_l_e] [--vv _v_a_r_i_a_b_l_e] 10 [_v_a_r_i_a_b_l_e==_v_a_l_u_e ...] [_t_a_r_g_e_t ...] 11 12DDEESSCCRRIIPPTTIIOONN 13 bbmmaakkee is a program designed to simplify the maintenance of other 14 programs. Its input is a list of specifications as to the files upon 15 which programs and other files depend. If no --ff _m_a_k_e_f_i_l_e option is 16 given, bbmmaakkee looks for the makefiles listed in _._M_A_K_E_._M_A_K_E_F_I_L_E___P_R_E_F_E_R_E_N_C_E 17 (default `_m_a_k_e_f_i_l_e', `_M_a_k_e_f_i_l_e') in order to find the specifications. If 18 the file `_._d_e_p_e_n_d' exists, it is read, see mkdep(1). 19 20 This manual page is intended as a reference document only. For a more 21 thorough description of bbmmaakkee and makefiles, please refer to _P_M_a_k_e _- _A 22 _T_u_t_o_r_i_a_l (from 1993). 23 24 bbmmaakkee prepends the contents of the MAKEFLAGS environment variable to the 25 command line arguments before parsing them. 26 27 The options are as follows: 28 29 --BB Try to be backwards compatible by executing a single shell per 30 command and by making the sources of a dependency line in 31 sequence. 32 33 --CC _d_i_r_e_c_t_o_r_y 34 Change to _d_i_r_e_c_t_o_r_y before reading the makefiles or doing 35 anything else. If multiple --CC options are specified, each is 36 interpreted relative to the previous one: --CC _/ --CC _e_t_c is 37 equivalent to --CC _/_e_t_c. 38 39 --DD _v_a_r_i_a_b_l_e 40 Define _v_a_r_i_a_b_l_e to be 1, in the global scope. 41 42 --dd [--]_f_l_a_g_s 43 Turn on debugging, and specify which portions of bbmmaakkee are to 44 print debugging information. Unless the flags are preceded by 45 `-', they are added to the MAKEFLAGS environment variable and are 46 passed on to any child make processes. By default, debugging 47 information is printed to standard error, but this can be changed 48 using the FF debugging flag. The debugging output is always 49 unbuffered; in addition, if debugging is enabled but debugging 50 output is not directed to standard output, the standard output is 51 line buffered. The available _f_l_a_g_s are: 52 53 AA Print all possible debugging information; equivalent to 54 specifying all of the debugging flags. 55 56 aa Print debugging information about archive searching and 57 caching. 58 59 CC Print debugging information about the current working 60 directory. 61 62 cc Print debugging information about conditional evaluation. 63 64 dd Print debugging information about directory searching and 65 caching. 66 67 ee Print debugging information about failed commands and 68 targets. 69 70 FF[++]_f_i_l_e_n_a_m_e 71 Specify where debugging output is written. This must be 72 the last flag, because it consumes the remainder of the 73 argument. If the character immediately after the FF flag 74 is `+', the file is opened in append mode; otherwise the 75 file is overwritten. If the file name is `stdout' or 76 `stderr', debugging output is written to the standard 77 output or standard error output respectively (and the `+' 78 option has no effect). Otherwise, the output is written 79 to the named file. If the file name ends with `.%d', the 80 `%d' is replaced by the pid. 81 82 ff Print debugging information about loop evaluation. 83 84 gg11 Print the input graph before making anything. 85 86 gg22 Print the input graph after making everything, or before 87 exiting on error. 88 89 gg33 Print the input graph before exiting on error. 90 91 hh Print debugging information about hash table operations. 92 93 jj Print debugging information about running multiple 94 shells. 95 96 LL Turn on lint checks. This throws errors for variable 97 assignments that do not parse correctly, at the time of 98 assignment, so the file and line number are available. 99 100 ll Print commands in Makefiles regardless of whether or not 101 they are prefixed by `@' or other "quiet" flags. Also 102 known as "loud" behavior. 103 104 MM Print debugging information about "meta" mode decisions 105 about targets. 106 107 mm Print debugging information about making targets, 108 including modification dates. 109 110 nn Don't delete the temporary command scripts created when 111 running commands. These temporary scripts are created in 112 the directory referred to by the TMPDIR environment 113 variable, or in _/_t_m_p if TMPDIR is unset or set to the 114 empty string. The temporary scripts are created by 115 mkstemp(3), and have names of the form _m_a_k_e_X_X_X_X_X_X. _N_O_T_E: 116 This can create many files in TMPDIR or _/_t_m_p, so use with 117 care. 118 119 pp Print debugging information about makefile parsing. 120 121 ss Print debugging information about suffix-transformation 122 rules. 123 124 tt Print debugging information about target list 125 maintenance. 126 127 VV Force the --VV option to print raw values of variables, 128 overriding the default behavior set via 129 _._M_A_K_E_._E_X_P_A_N_D___V_A_R_I_A_B_L_E_S. 130 131 vv Print debugging information about variable assignment and 132 expansion. 133 134 xx Run shell commands with --xx so the actual commands are 135 printed as they are executed. 136 137 --ee Let environment variables override global variables within 138 makefiles. 139 140 --ff _m_a_k_e_f_i_l_e 141 Specify a makefile to read instead of one of the defaults listed 142 in _._M_A_K_E_._M_A_K_E_F_I_L_E___P_R_E_F_E_R_E_N_C_E. If _m_a_k_e_f_i_l_e is `-', standard input 143 is read. If _m_a_k_e_f_i_l_e starts with the string `.../', bbmmaakkee 144 searches for the specified path in the rest of the argument in 145 the current directory and its parents. Multiple makefiles may be 146 specified, and are read in the order specified. 147 148 --II _d_i_r_e_c_t_o_r_y 149 Specify a directory in which to search for makefiles and included 150 makefiles. The system makefile directory (or directories, see 151 the --mm option) is automatically included as part of this list. 152 153 --ii Ignore non-zero exit of shell commands in the makefile. 154 Equivalent to specifying `-' before each command line in the 155 makefile. 156 157 --JJ _p_r_i_v_a_t_e 158 This option should _n_o_t be specified by the user. 159 160 When the --jj option is in use in a recursive build, this option is 161 passed by a make to child makes to allow all the make processes 162 in the build to cooperate to avoid overloading the system. 163 164 --jj _m_a_x___j_o_b_s 165 Specify the maximum number of jobs that bbmmaakkee may have running at 166 any one time. If _m_a_x___j_o_b_s is a floating point number, or ends 167 with `C', then the value is multiplied by the number of CPUs 168 reported online by sysconf(3). The value of _m_a_x___j_o_b_s is saved in 169 _._M_A_K_E_._J_O_B_S. Turns compatibility mode off, unless the --BB option 170 is also specified. When compatibility mode is off, all commands 171 associated with a target are executed in a single shell 172 invocation as opposed to the traditional one shell invocation per 173 line. This can break traditional scripts which change 174 directories on each command invocation and then expect to start 175 with a fresh environment on the next line. It is more efficient 176 to correct the scripts rather than turn backwards compatibility 177 on. 178 179 A job token pool with _m_a_x___j_o_b_s tokens is used to control the 180 total number of jobs running. Each instance of bbmmaakkee will wait 181 for a token from the pool before running a new job. 182 183 --kk Continue processing after errors are encountered, but only on 184 those targets that do not depend on the target whose creation 185 caused the error. 186 187 --mm _d_i_r_e_c_t_o_r_y 188 Specify a directory in which to search for _s_y_s_._m_k and makefiles 189 included via the <_f_i_l_e>-style include statement. The --mm option 190 can be used multiple times to form a search path. This path 191 overrides the default system include path _/_u_s_r_/_s_h_a_r_e_/_m_k. 192 Furthermore, the system include path is appended to the search 193 path used for "_f_i_l_e"-style include statements (see the --II 194 option). The system include path can be referenced via the read- 195 only variable _._S_Y_S_P_A_T_H. 196 197 If a directory name in the --mm argument (or the MAKESYSPATH 198 environment variable) starts with the string `.../', bbmmaakkee 199 searches for the specified file or directory named in the 200 remaining part of the argument string. The search starts with 201 the current directory and then works upward towards the root of 202 the file system. If the search is successful, the resulting 203 directory replaces the `.../' specification in the --mm argument. 204 This feature allows bbmmaakkee to easily search in the current source 205 tree for customized _s_y_s_._m_k files (e.g., by using `.../mk/sys.mk' 206 as an argument). 207 208 --nn Display the commands that would have been executed, but do not 209 actually execute them unless the target depends on the _._M_A_K_E 210 special source (see below) or the command is prefixed with `++'. 211 212 --NN Display the commands that would have been executed, but do not 213 actually execute any of them; useful for debugging top-level 214 makefiles without descending into subdirectories. 215 216 --qq Do not execute any commands, instead exit 0 if the specified 217 targets are up to date, and 1 otherwise. 218 219 --rr Do not use the built-in rules specified in the system makefile. 220 221 --SS Stop processing if an error is encountered. This is the default 222 behavior and the opposite of --kk. 223 224 --ss Do not echo any commands as they are executed. Equivalent to 225 specifying `@@' before each command line in the makefile. 226 227 --TT _t_r_a_c_e_f_i_l_e 228 When used with the --jj flag, append a trace record to _t_r_a_c_e_f_i_l_e 229 for each job started and completed. 230 231 --tt Rather than re-building a target as specified in the makefile, 232 create it or update its modification time to make it appear up- 233 to-date. 234 235 --VV _v_a_r_i_a_b_l_e 236 Print the value of _v_a_r_i_a_b_l_e. Do not build any targets. Multiple 237 instances of this option may be specified; the variables are 238 printed one per line, with a blank line for each null or 239 undefined variable. The value printed is extracted from the 240 global scope after all makefiles have been read. 241 242 By default, the raw variable contents (which may include 243 additional unexpanded variable references) are shown. If 244 _v_a_r_i_a_b_l_e contains a `$', it is not interpreted as a variable name 245 but rather as an expression. Its value is expanded before 246 printing. The value is also expanded before printing if 247 _._M_A_K_E_._E_X_P_A_N_D___V_A_R_I_A_B_L_E_S is set to true and the --ddVV option has not 248 been used to override it. 249 250 Note that loop-local and target-local variables, as well as 251 values taken temporarily by global variables during makefile 252 processing, are not accessible via this option. The --ddvv debug 253 mode can be used to see these at the cost of generating 254 substantial extraneous output. 255 256 --vv _v_a_r_i_a_b_l_e 257 Like --VV, but all printed variables are always expanded to their 258 complete value. The last occurrence of --VV or --vv decides whether 259 all variables are expanded or not. 260 261 --WW Treat any warnings during makefile parsing as errors. 262 263 --ww Print entering and leaving directory messages, pre and post 264 processing. 265 266 --XX Don't export variables passed on the command line to the 267 environment individually. Variables passed on the command line 268 are still exported via the MAKEFLAGS environment variable. This 269 option may be useful on systems which have a small limit on the 270 size of command arguments. 271 272 _v_a_r_i_a_b_l_e==_v_a_l_u_e 273 Set the value of the variable _v_a_r_i_a_b_l_e to _v_a_l_u_e. Normally, all 274 values passed on the command line are also exported to sub-makes 275 in the environment. The --XX flag disables this behavior. 276 Variable assignments should follow options for POSIX 277 compatibility but no ordering is enforced. 278 279 There are several different types of lines in a makefile: dependency 280 specifications, shell commands, variable assignments, include statements, 281 conditional directives, for loops, other directives, and comments. 282 283 Lines may be continued from one line to the next by ending them with a 284 backslash (`\'). The trailing newline character and initial whitespace 285 on the following line are compressed into a single space. 286 287FFIILLEE DDEEPPEENNDDEENNCCYY SSPPEECCIIFFIICCAATTIIOONNSS 288 Dependency lines consist of one or more targets, an operator, and zero or 289 more sources. This creates a relationship where the targets "depend" on 290 the sources and are customarily created from them. A target is 291 considered out of date if it does not exist, or if its modification time 292 is less than that of any of its sources. An out-of-date target is re- 293 created, but not until all sources have been examined and themselves re- 294 created as needed. Three operators may be used: 295 296 :: Many dependency lines may name this target but only one may have 297 attached shell commands. All sources named in all dependency lines 298 are considered together, and if needed the attached shell commands 299 are run to create or re-create the target. If bbmmaakkee is 300 interrupted, the target is removed. 301 302 !! The same, but the target is always re-created whether or not it is 303 out of date. 304 305 :::: Any dependency line may have attached shell commands, but each one 306 is handled independently: its sources are considered and the 307 attached shell commands are run if the target is out of date with 308 respect to (only) those sources. Thus, different groups of the 309 attached shell commands may be run depending on the circumstances. 310 Furthermore, unlike ::, for dependency lines with no sources, the 311 attached shell commands are always run. Also unlike ::, the target 312 is not removed if bbmmaakkee is interrupted. 313 314 All dependency lines mentioning a particular target must use the same 315 operator. 316 317 Targets and sources may contain the shell wildcard values `?', `*', `[]', 318 and `{}'. The values `?', `*', and `[]' may only be used as part of the 319 final component of the target or source, and only match existing files. 320 The value `{}' need not necessarily be used to describe existing files. 321 Expansion is in directory order, not alphabetically as done in the shell. 322 323SSHHEELLLL CCOOMMMMAANNDDSS 324 Each target may have associated with it one or more lines of shell 325 commands, normally used to create the target. Each of the lines in this 326 script _m_u_s_t be preceded by a tab. (For historical reasons, spaces are 327 not accepted.) While targets can occur in many dependency lines if 328 desired, by default only one of these rules may be followed by a creation 329 script. If the `::::' operator is used, however, all rules may include 330 scripts, and the respective scripts are executed in the order found. 331 332 Each line is treated as a separate shell command, unless the end of line 333 is escaped with a backslash `\', in which case that line and the next are 334 combined. If the first characters of the command are any combination of 335 `@@', `++', or `--', the command is treated specially. 336 337 @@ causes the command not to be echoed before it is executed. 338 339 ++ causes the command to be executed even when --nn is given. 340 This is similar to the effect of the _._M_A_K_E special source, 341 except that the effect can be limited to a single line of a 342 script. 343 344 -- in compatibility mode causes any non-zero exit status of 345 the command line to be ignored. 346 347 When bbmmaakkee is run in jobs mode with --jj _m_a_x___j_o_b_s, the entire 348 script for the target is fed to a single instance of the 349 shell. In compatibility (non-jobs) mode, each command is 350 run in a separate process. If the command contains any 351 shell meta characters (`#=|^(){};&<>*?[]:$`\\n'), it is 352 passed to the shell; otherwise bbmmaakkee attempts direct 353 execution. If a line starts with `--' and the shell has 354 ErrCtl enabled, failure of the command line is ignored as 355 in compatibility mode. Otherwise `--' affects the entire 356 job; the script stops at the first command line that fails, 357 but the target is not deemed to have failed. 358 359 Makefiles should be written so that the mode of bbmmaakkee operation does not 360 change their behavior. For example, any command which uses "cd" or 361 "chdir" without the intention of changing the directory for subsequent 362 commands should be put in parentheses so it executes in a subshell. To 363 force the use of a single shell, escape the line breaks so as to make the 364 whole script one command. For example: 365 366 avoid-chdir-side-effects: 367 @echo "Building $@ in $$(pwd)" 368 @(cd ${.CURDIR} && ${MAKE} $@) 369 @echo "Back in $$(pwd)" 370 371 ensure-one-shell-regardless-of-mode: 372 @echo "Building $@ in $$(pwd)"; \ 373 (cd ${.CURDIR} && ${MAKE} $@); \ 374 echo "Back in $$(pwd)" 375 376 Since bbmmaakkee changes the current working directory to `_._O_B_J_D_I_R' before 377 executing any targets, each child process starts with that as its current 378 working directory. 379 380VVAARRIIAABBLLEE AASSSSIIGGNNMMEENNTTSS 381 Variables in make behave much like macros in the C preprocessor. 382 383 Variable assignments have the form `_N_A_M_E _o_p _v_a_l_u_e', where: 384 385 _N_A_M_E is a single-word variable name, consisting, by tradition, 386 of all upper-case letters, 387 388 _o_p is one of the variable assignment operators described 389 below, and 390 391 _v_a_l_u_e is interpreted according to the variable assignment 392 operator. 393 394 Whitespace around _N_A_M_E, _o_p and _v_a_l_u_e is discarded. 395 396 VVaarriiaabbllee aassssiiggnnmmeenntt ooppeerraattoorrss 397 The five operators that assign values to variables are: 398 399 == Assign the value to the variable. Any previous value is 400 overwritten. 401 402 ++== Append the value to the current value of the variable, separating 403 them by a single space. 404 405 ??== Assign the value to the variable if it is not already defined. 406 407 ::== Expand the value, then assign it to the variable. 408 409 _N_O_T_E: References to undefined variables are _n_o_t expanded. This 410 can cause problems when variable modifiers are used. 411 412 !!== Expand the value and pass it to the shell for execution, then 413 assign the output from the child's standard output to the 414 variable. Any newlines in the result are replaced with spaces. 415 416 EExxppaannssiioonn ooff vvaarriiaabblleess 417 In most contexts where variables are expanded, `$$' expands to a single 418 dollar sign. In other contexts (most variable modifiers, string literals 419 in conditions), `\$' expands to a single dollar sign. 420 421 References to variables have the form $${{_n_a_m_e[::_m_o_d_i_f_i_e_r_s]}} or 422 $$((_n_a_m_e[::_m_o_d_i_f_i_e_r_s])). If the variable name consists of only a single 423 character and the expression contains no modifiers, the surrounding curly 424 braces or parentheses are not required. This shorter form is not 425 recommended. 426 427 If the variable name contains a dollar, the name itself is expanded 428 first. This allows almost arbitrary variable names, however names 429 containing dollar, braces, parentheses or whitespace are really best 430 avoided. 431 432 If the result of expanding a nested variable expression contains a dollar 433 sign (`$'), the result is subject to further expansion. 434 435 Variable substitution occurs at four distinct times, depending on where 436 the variable is being used. 437 438 1. Variables in dependency lines are expanded as the line is read. 439 440 2. Variables in conditionals are expanded individually, but only as far 441 as necessary to determine the result of the conditional. 442 443 3. Variables in shell commands are expanded when the shell command is 444 executed. 445 446 4. ..ffoorr loop index variables are expanded on each loop iteration. Note 447 that other variables are not expanded when composing the body of a 448 loop, so the following example code: 449 450 .for i in 1 2 3 451 a+= ${i} 452 j= ${i} 453 b+= ${j} 454 .endfor 455 456 all: 457 @echo ${a} 458 @echo ${b} 459 460 prints: 461 462 1 2 3 463 3 3 3 464 465 After the loop is executed: 466 467 _a contains `${:U1} ${:U2} ${:U3}', which expands to `1 2 468 3'. 469 470 _j contains `${:U3}', which expands to `3'. 471 472 _b contains `${j} ${j} ${j}', which expands to `${:U3} 473 ${:U3} ${:U3}' and further to `3 3 3'. 474 475 VVaarriiaabbllee ccllaasssseess 476 The four different classes of variables (in order of increasing 477 precedence) are: 478 479 Environment variables 480 Variables defined as part of bbmmaakkee's environment. 481 482 Global variables 483 Variables defined in the makefile or in included makefiles. 484 485 Command line variables 486 Variables defined as part of the command line. 487 488 Local variables 489 Variables that are defined specific to a certain target. 490 491 Local variables can be set on a dependency line, unless 492 _._M_A_K_E_._T_A_R_G_E_T___L_O_C_A_L___V_A_R_I_A_B_L_E_S is set to `false'. The rest of the line 493 (which already has had global variables expanded) is the variable value. 494 For example: 495 496 COMPILER_WRAPPERS= ccache distcc icecc 497 498 ${OBJS}: .MAKE.META.CMP_FILTER=${COMPILER_WRAPPERS:S,^,N,} 499 500 Only the targets `${OBJS}' are impacted by that filter (in "meta" mode) 501 and simply enabling/disabling any of the compiler wrappers does not 502 render all of those targets out-of-date. 503 504 _N_O_T_E: target-local variable assignments behave differently in that; 505 506 ++== Only appends to a previous local assignment for the same 507 target and variable. 508 509 ::== Is redundant with respect to global variables, which have 510 already been expanded. 511 512 The built-in local variables are: 513 514 _._A_L_L_S_R_C The list of all sources for this target; also known as 515 `_>' or `_^'. 516 517 _._A_R_C_H_I_V_E The name of the archive file; also known as `_!'. 518 519 _._I_M_P_S_R_C In suffix-transformation rules, the name/path of the 520 source from which the target is to be transformed (the 521 "implied" source); also known as `_<'. It is not defined 522 in explicit rules. 523 524 _._M_E_M_B_E_R The name of the archive member; also known as `_%'. 525 526 _._O_O_D_A_T_E The list of sources for this target that were deemed out- 527 of-date; also known as `_?'. 528 529 _._P_R_E_F_I_X The name of the target with suffix (if declared in 530 ..SSUUFFFFIIXXEESS) removed; also known as `_*'. 531 532 _._T_A_R_G_E_T The name of the target; also known as `_@'. For 533 compatibility with other makes this is an alias for 534 _._A_R_C_H_I_V_E in archive member rules. 535 536 The shorter forms (`_>', `_^', `_!', `_<', `_%', `_?', `_*', and `_@') are 537 permitted for backward compatibility with historical makefiles and legacy 538 POSIX make and are not recommended. 539 540 Variants of these variables with the punctuation followed immediately by 541 `D' or `F', e.g. `$(@D)', are legacy forms equivalent to using the `:H' 542 and `:T' modifiers. These forms are accepted for compatibility with AT&T 543 System V UNIX makefiles and POSIX but are not recommended. 544 545 Four of the local variables may be used in sources on dependency lines 546 because they expand to the proper value for each target on the line. 547 These variables are `_._T_A_R_G_E_T', `_._P_R_E_F_I_X', `_._A_R_C_H_I_V_E', and `_._M_E_M_B_E_R'. 548 549 AAddddiittiioonnaall bbuuiilltt--iinn vvaarriiaabblleess 550 In addition, bbmmaakkee sets or knows about the following variables: 551 552 _._A_L_L_T_A_R_G_E_T_S 553 The list of all targets encountered in the makefiles. If 554 evaluated during makefile parsing, lists only those targets 555 encountered thus far. 556 557 _._C_U_R_D_I_R 558 A path to the directory where bbmmaakkee was executed. Refer to the 559 description of `_P_W_D' for more details. 560 561 _._E_R_R_O_R___C_M_D 562 Is used in error handling, see _M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R. 563 564 _._E_R_R_O_R___C_W_D 565 Is used in error handling, see _M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R. 566 567 _._E_R_R_O_R___E_X_I_T 568 Is used in error handling, see _M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R. 569 570 _._E_R_R_O_R___M_E_T_A___F_I_L_E 571 Is used in error handling in "meta" mode, see 572 _M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R. 573 574 _._E_R_R_O_R___T_A_R_G_E_T 575 Is used in error handling, see _M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R. 576 577 _._I_N_C_L_U_D_E_D_F_R_O_M_D_I_R 578 The directory of the file this makefile was included from. 579 580 _._I_N_C_L_U_D_E_D_F_R_O_M_F_I_L_E 581 The filename of the file this makefile was included from. 582 583 _M_A_C_H_I_N_E 584 The machine hardware name, see uname(1). 585 586 _M_A_C_H_I_N_E___A_R_C_H 587 The machine processor architecture name, see uname(1). 588 589 _M_A_K_E The name that bbmmaakkee was executed with (_a_r_g_v_[_0_]). 590 591 _._M_A_K_E The same as _M_A_K_E, for compatibility. The preferred variable to 592 use is the environment variable MAKE because it is more 593 compatible with other make variants and cannot be confused with 594 the special target with the same name. 595 596 _._M_A_K_E_._D_E_P_E_N_D_F_I_L_E 597 Names the makefile (default `_._d_e_p_e_n_d') from which generated 598 dependencies are read. 599 600 _._M_A_K_E_._D_I_E___Q_U_I_E_T_L_Y 601 If set to `true', do not print error information at the end. 602 603 _._M_A_K_E_._E_X_P_A_N_D___V_A_R_I_A_B_L_E_S 604 A boolean that controls the default behavior of the --VV option. 605 If true, variable values printed with --VV are fully expanded; if 606 false, the raw variable contents (which may include additional 607 unexpanded variable references) are shown. 608 609 _._M_A_K_E_._E_X_P_O_R_T_E_D 610 The list of variables exported by bbmmaakkee. 611 612 _M_A_K_E___V_E_R_S_I_O_N 613 This variable indicates the version of bbmmaakkee. It is typically 614 the date of last import from NetBSD. It is useful for checking 615 whether certain features are available. 616 617 _M_A_K_E_F_I_L_E 618 The top-level makefile that is currently read, as given in the 619 command line. 620 621 _._M_A_K_E_F_L_A_G_S 622 The environment variable `MAKEFLAGS' may contain anything that 623 may be specified on bbmmaakkee's command line. Anything specified on 624 bbmmaakkee's command line is appended to the _._M_A_K_E_F_L_A_G_S variable, 625 which is then added to the environment for all programs that 626 bbmmaakkee executes. 627 628 _._M_A_K_E_._G_I_D 629 The numeric group ID of the user running bbmmaakkee. It is read-only. 630 631 _._M_A_K_E_._J_O_B_._P_R_E_F_I_X 632 If bbmmaakkee is run with --jj, the output for each target is prefixed 633 with a token 634 --- _t_a_r_g_e_t --- 635 the first part of which can be controlled via _._M_A_K_E_._J_O_B_._P_R_E_F_I_X. 636 If _._M_A_K_E_._J_O_B_._P_R_E_F_I_X is empty, no token is printed. For example, 637 setting _._M_A_K_E_._J_O_B_._P_R_E_F_I_X to 638 `${.newline}---${.MAKE:T}[${.MAKE.PID}]' would produce tokens 639 like 640 ---make[1234] _t_a_r_g_e_t --- 641 making it easier to track the degree of parallelism being 642 achieved. 643 644 _._M_A_K_E_._J_O_B_S 645 The argument to the --jj option. 646 647 _._M_A_K_E_._J_O_B_S_._C 648 A read-only boolean that indicates whether the --jj option supports 649 use of `C'. 650 651 _._M_A_K_E_._L_E_V_E_L 652 The recursion depth of bbmmaakkee. The top-level instance of bbmmaakkee 653 has level 0, and each child make has its parent level plus 1. 654 This allows tests like: .if ${.MAKE.LEVEL} == 0 to protect things 655 which should only be evaluated in the top-level instance of 656 bbmmaakkee. 657 658 _._M_A_K_E_._L_E_V_E_L_._E_N_V 659 The name of the environment variable that stores the level of 660 nested calls to bbmmaakkee. 661 662 _._M_A_K_E_._M_A_K_E_F_I_L_E___P_R_E_F_E_R_E_N_C_E 663 The ordered list of makefile names (default `_m_a_k_e_f_i_l_e', 664 `_M_a_k_e_f_i_l_e') that bbmmaakkee looks for. 665 666 _._M_A_K_E_._M_A_K_E_F_I_L_E_S 667 The list of makefiles read by bbmmaakkee, which is useful for tracking 668 dependencies. Each makefile is recorded only once, regardless of 669 the number of times read. 670 671 _._M_A_K_E_._M_E_T_A_._B_A_I_L_I_W_I_C_K 672 In "meta" mode, provides a list of prefixes which match the 673 directories controlled by bbmmaakkee. If a file that was generated 674 outside of _._O_B_J_D_I_R but within said bailiwick is missing, the 675 current target is considered out-of-date. 676 677 _._M_A_K_E_._M_E_T_A_._C_M_P___F_I_L_T_E_R 678 In "meta" mode, it can sometimes be useful to filter command 679 lines before comparison. This variable can contain a list of 680 modifiers that will be joined with `:' and applied to each line 681 of the old and new command that differ. If the filtered commands 682 still differ, the target is considered out-of-date. 683 684 _._M_A_K_E_._M_E_T_A_._F_I_L_T_E_R 685 In "meta" mode, it can be useful to filter most of the data in a 686 meta file. For example, when a pre-built tree is relocated or 687 cloned, all the targets would be considered out-of-date without a 688 filter to replace the old location with the new. This variable 689 is similar to _._M_A_K_E_._M_E_T_A_._C_M_P___F_I_L_T_E_R but is appliled to commands, 690 cwd and the syscall records from filemon. In the case of 691 commands, this is done prior to any _._M_A_K_E_._M_E_T_A_._C_M_P___F_I_L_T_E_R 692 modifiers are applied during comparison. 693 694 _._M_A_K_E_._M_E_T_A_._C_R_E_A_T_E_D 695 In "meta" mode, this variable contains a list of all the meta 696 files updated. If not empty, it can be used to trigger 697 processing of _._M_A_K_E_._M_E_T_A_._F_I_L_E_S. 698 699 _._M_A_K_E_._M_E_T_A_._F_I_L_E_S 700 In "meta" mode, this variable contains a list of all the meta 701 files used (updated or not). This list can be used to process 702 the meta files to extract dependency information. 703 704 _._M_A_K_E_._M_E_T_A_._I_G_N_O_R_E___F_I_L_T_E_R 705 Provides a list of variable modifiers to apply to each pathname. 706 Ignore if the expansion is an empty string. 707 708 _._M_A_K_E_._M_E_T_A_._I_G_N_O_R_E___P_A_T_H_S 709 Provides a list of path prefixes that should be ignored; because 710 the contents are expected to change over time. The default list 711 includes: `_/_d_e_v _/_e_t_c _/_p_r_o_c _/_t_m_p _/_v_a_r_/_r_u_n _/_v_a_r_/_t_m_p' 712 713 _._M_A_K_E_._M_E_T_A_._I_G_N_O_R_E___P_A_T_T_E_R_N_S 714 Provides a list of patterns to match against pathnames. Ignore 715 any that match. 716 717 _._M_A_K_E_._M_E_T_A_._P_R_E_F_I_X 718 Defines the message printed for each meta file updated in "meta 719 verbose" mode. The default value is: 720 Building ${.TARGET:H:tA}/${.TARGET:T} 721 722 _._M_A_K_E_._M_O_D_E 723 Processed after reading all makefiles. Affects the mode that 724 bbmmaakkee runs in. It can contain these keywords: 725 726 ccoommppaatt Like --BB, puts bbmmaakkee into "compat" mode. 727 728 mmeettaa Puts bbmmaakkee into "meta" mode, where meta files are created 729 for each target to capture the commands run, the output 730 generated, and if filemon(4) is available, the system 731 calls which are of interest to bbmmaakkee. The captured 732 output can be useful when diagnosing errors. 733 734 bbmmaakkee will use the information in the meta file to help 735 determine if a target is out-of-date when the normal 736 dependency rules indicate it is not. 737 738 First, the commands to be executed, will be compared to 739 those captured previously, if any differ, the target is 740 out-of-date. 741 742 This allows for a huge improvement in the reliability and 743 efficiency of update builds. It is no longer necessary 744 for targets to depend on makefiles just in-case they set 745 a variable that might be relevant. Mechanisms such as 746 _._M_A_K_E_._M_E_T_A_._C_M_P___F_I_L_T_E_R and ..NNOOMMEETTAA__CCMMPP, allow limiting or 747 disabling that comparison on a per target basis. A 748 reference to the variable _._O_O_D_A_T_E can be leveraged to 749 block comparison of certain commands. For example: 750 `${.OODATE:M}' will expand to nothing and have no impact 751 on the target, its side-effect though, will be to prevent 752 comparison of any command line it appears on. For 753 documentation purposes `${.OODATE:MNOMETA_CMP}' is 754 useful. 755 756 If necessary, bbmmaakkee will then use the information 757 captured by filemon(4), to check the modification time of 758 any file used in generating the target, if any is newer, 759 the target is out-of-date. 760 761 Such deep inspection can easily lead to cases where a 762 target is _a_l_w_a_y_s considered out-of-date, which is why 763 _._M_A_K_E_._M_E_T_A_._I_G_N_O_R_E___F_I_L_T_E_R, _._M_A_K_E_._M_E_T_A_._I_G_N_O_R_E___P_A_T_H_S and 764 _._M_A_K_E_._M_E_T_A_._I_G_N_O_R_E___P_A_T_T_E_R_N_S, are provided to limit that 765 inspection when necessary. 766 767 ccuurrddiirrOOkk==_b_f 768 By default, bbmmaakkee does not create _._m_e_t_a files in 769 `_._C_U_R_D_I_R'. This can be overridden by setting _b_f to a 770 value which represents true. 771 772 mmiissssiinngg--mmeettaa==_b_f 773 If _b_f is true, a missing _._m_e_t_a file makes the target out- 774 of-date. 775 776 mmiissssiinngg--ffiilleemmoonn==_b_f 777 If _b_f is true, missing filemon data makes the target out- 778 of-date. 779 780 nnooffiilleemmoonn 781 Do not use filemon(4). 782 783 eennvv For debugging, it can be useful to include the 784 environment in the _._m_e_t_a file. 785 786 vveerrbboossee 787 If in "meta" mode, print a clue about the target being 788 built. This is useful if the build is otherwise running 789 silently. The message printed is the expanded value of 790 _._M_A_K_E_._M_E_T_A_._P_R_E_F_I_X. 791 792 iiggnnoorree--ccmmdd 793 Some makefiles have commands which are simply not stable. 794 This keyword causes them to be ignored for determining 795 whether a target is out of date in "meta" mode. See also 796 ..NNOOMMEETTAA__CCMMPP. 797 798 ssiilleenntt==_b_f 799 If _b_f is true, when a .meta file is created, mark the 800 target ..SSIILLEENNTT. 801 802 rraannddoommiizzee--ttaarrggeettss 803 In both compat and parallel mode, do not make the targets 804 in the usual order, but instead randomize their order. 805 This mode can be used to detect undeclared dependencies 806 between files. 807 808 _M_A_K_E_O_B_J_D_I_R 809 Used to create files in a separate directory, see _._O_B_J_D_I_R. 810 811 _M_A_K_E___O_B_J_D_I_R___C_H_E_C_K___W_R_I_T_A_B_L_E 812 When true, bbmmaakkee will check that _._O_B_J_D_I_R is writable, and issue a 813 warning if not. 814 815 _M_A_K_E___D_E_B_U_G___O_B_J_D_I_R___C_H_E_C_K___W_R_I_T_A_B_L_E 816 When true and bbmmaakkee is warning about an unwritable _._O_B_J_D_I_R, 817 report the variables listed in _M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R to help 818 debug. 819 820 _M_A_K_E_O_B_J_D_I_R_P_R_E_F_I_X 821 Used to create files in a separate directory, see _._O_B_J_D_I_R. It 822 should be an absolute path. 823 824 _._M_A_K_E_._O_S 825 The name of the operating system, see uname(1). It is read-only. 826 827 _._M_A_K_E_O_V_E_R_R_I_D_E_S 828 This variable is used to record the names of variables assigned 829 to on the command line, so that they may be exported as part of 830 `MAKEFLAGS'. This behavior can be disabled by assigning an empty 831 value to `_._M_A_K_E_O_V_E_R_R_I_D_E_S' within a makefile. Extra variables can 832 be exported from a makefile by appending their names to 833 `_._M_A_K_E_O_V_E_R_R_I_D_E_S'. `MAKEFLAGS' is re-exported whenever 834 `_._M_A_K_E_O_V_E_R_R_I_D_E_S' is modified. 835 836 _._M_A_K_E_._P_A_T_H___F_I_L_E_M_O_N 837 If bbmmaakkee was built with filemon(4) support, this is set to the 838 path of the device node. This allows makefiles to test for this 839 support. 840 841 _._M_A_K_E_._P_I_D 842 The process ID of bbmmaakkee. It is read-only. 843 844 _._M_A_K_E_._P_P_I_D 845 The parent process ID of bbmmaakkee. It is read-only. 846 847 _M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R 848 When bbmmaakkee stops due to an error, it sets `_._E_R_R_O_R___T_A_R_G_E_T' to the 849 name of the target that failed, `_._E_R_R_O_R___E_X_I_T' to the exit status 850 of the failed target, `_._E_R_R_O_R___C_M_D' to the commands of the failed 851 target, and in "meta" mode, it also sets `_._E_R_R_O_R___C_W_D' to the 852 getcwd(3), and `_._E_R_R_O_R___M_E_T_A___F_I_L_E' to the path of the meta file 853 (if any) describing the failed target. It then prints its name 854 and the value of `_._C_U_R_D_I_R' as well as the value of any variables 855 named in `_M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R'. 856 857 _._M_A_K_E_._S_A_V_E___D_O_L_L_A_R_S 858 If true, `$$' are preserved when doing `:=' assignments. The 859 default is false, for backwards compatibility. Set to true for 860 compatability with other makes. If set to false, `$$' becomes 861 `$' per normal evaluation rules. 862 863 _._M_A_K_E_._T_A_R_G_E_T___L_O_C_A_L___V_A_R_I_A_B_L_E_S 864 If set to `false', apparent variable assignments in dependency 865 lines are treated as normal sources. 866 867 _._M_A_K_E_._U_I_D 868 The numeric ID of the user running bbmmaakkee. It is read-only. 869 870 _._n_e_w_l_i_n_e 871 This variable is simply assigned a newline character as its 872 value. It is read-only. This allows expansions using the ::@@ 873 modifier to put a newline between iterations of the loop rather 874 than a space. For example, in case of an error, bbmmaakkee prints the 875 variable names and their values using: 876 ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@} 877 878 _._O_B_J_D_I_R 879 A path to the directory where the targets are built. Its value 880 is determined by trying to chdir(2) to the following directories 881 in order and using the first match: 882 883 1. $${{MMAAKKEEOOBBJJDDIIRRPPRREEFFIIXX}}$${{..CCUURRDDIIRR}} 884 885 (Only if `MAKEOBJDIRPREFIX' is set in the environment or on 886 the command line.) 887 888 2. $${{MMAAKKEEOOBBJJDDIIRR}} 889 890 (Only if `MAKEOBJDIR' is set in the environment or on the 891 command line.) 892 893 3. $${{..CCUURRDDIIRR}}_/_o_b_j_.$${{MMAACCHHIINNEE}} 894 895 4. $${{..CCUURRDDIIRR}}_/_o_b_j 896 897 5. _/_u_s_r_/_o_b_j_/$${{..CCUURRDDIIRR}} 898 899 6. $${{..CCUURRDDIIRR}} 900 901 Variable expansion is performed on the value before it is used, 902 so expressions such as $${{..CCUURRDDIIRR::SS,,^^//uussrr//ssrrcc,,//vvaarr//oobbjj,,}} may be 903 used. This is especially useful with `MAKEOBJDIR'. 904 905 `_._O_B_J_D_I_R' may be modified in the makefile via the special target 906 `..OOBBJJDDIIRR'. In all cases, bbmmaakkee changes to the specified 907 directory if it exists, and sets `_._O_B_J_D_I_R' and `_P_W_D' to that 908 directory before executing any targets. 909 910 Except in the case of an explicit `..OOBBJJDDIIRR' target, bbmmaakkee checks 911 that the specified directory is writable and ignores it if not. 912 This check can be skipped by setting the environment variable 913 `MAKE_OBJDIR_CHECK_WRITABLE' to "no". 914 915 _._P_A_R_S_E_D_I_R 916 The directory name of the current makefile being parsed. 917 918 _._P_A_R_S_E_F_I_L_E 919 The basename of the current makefile being parsed. This variable 920 and `_._P_A_R_S_E_D_I_R' are both set only while the makefiles are being 921 parsed. To retain their current values, assign them to a 922 variable using assignment with expansion `::=='. 923 924 _._P_A_T_H The space-separated list of directories that bbmmaakkee searches for 925 files. To update this search list, use the special target 926 `..PPAATTHH' rather than modifying the variable directly. 927 928 _%_P_O_S_I_X Is set in POSIX mode, see the special `_._P_O_S_I_X' target. 929 930 _P_W_D Alternate path to the current directory. bbmmaakkee normally sets 931 `_._C_U_R_D_I_R' to the canonical path given by getcwd(3). However, if 932 the environment variable `PWD' is set and gives a path to the 933 current directory, bbmmaakkee sets `_._C_U_R_D_I_R' to the value of `PWD' 934 instead. This behavior is disabled if `MAKEOBJDIRPREFIX' is set 935 or `MAKEOBJDIR' contains a variable transform. `_P_W_D' is set to 936 the value of `_._O_B_J_D_I_R' for all programs which bbmmaakkee executes. 937 938 _._S_H_E_L_L The pathname of the shell used to run target scripts. It is 939 read-only. 940 941 _._S_U_F_F_I_X_E_S 942 The list of known suffixes. It is read-only. 943 944 _._S_Y_S_P_A_T_H 945 The space-separated list of directories that bbmmaakkee searches for 946 makefiles, referred to as the system include path. To update 947 this search list, use the special target `..SSYYSSPPAATTHH' rather than 948 modifying the variable which is read-only. 949 950 _._T_A_R_G_E_T_S 951 The list of targets explicitly specified on the command line, if 952 any. 953 954 _V_P_A_T_H The colon-separated (":") list of directories that bbmmaakkee searches 955 for files. This variable is supported for compatibility with old 956 make programs only, use `_._P_A_T_H' instead. 957 958 VVaarriiaabbllee mmooddiiffiieerrss 959 The general format of a variable expansion is: 960 961 $${{_v_a_r_i_a_b_l_e[::_m_o_d_i_f_i_e_r[::...]]}} 962 963 Each modifier begins with a colon. To escape a colon, precede it with a 964 backslash `\'. 965 966 A list of indirect modifiers can be specified via a variable, as follows: 967 968 _m_o_d_i_f_i_e_r___v_a_r_i_a_b_l_e = _m_o_d_i_f_i_e_r[::...] 969 970 $${{_v_a_r_i_a_b_l_e::$${{_m_o_d_i_f_i_e_r___v_a_r_i_a_b_l_e}}[::...]}} 971 972 In this case, the first modifier in the _m_o_d_i_f_i_e_r___v_a_r_i_a_b_l_e does not start 973 with a colon, since that colon already occurs in the referencing 974 variable. If any of the modifiers in the _m_o_d_i_f_i_e_r___v_a_r_i_a_b_l_e contains a 975 dollar sign (`$'), these must be doubled to avoid early expansion. 976 977 Some modifiers interpret the expression value as a single string, others 978 treat the expression value as a whitespace-separated list of words. When 979 splitting a string into words, whitespace can be escaped using double 980 quotes, single quotes and backslashes, like in the shell. The quotes and 981 backslashes are retained in the words. 982 983 The supported modifiers are: 984 985 ::EE Replaces each word with its suffix. 986 987 ::HH Replaces each word with its dirname. 988 989 ::MM_p_a_t_t_e_r_n 990 Selects only those words that match _p_a_t_t_e_r_n. The standard shell 991 wildcard characters (`*', `?', and `[]') may be used. Braces can be 992 used to list alternate patterns. For example, 993 `${.ALLSRC:M*{Makefile*,.mk}}' could be used to match any 994 `*Makefile*' or `*.mk' in _._A_L_L_S_R_C. The wildcard characters and 995 braces may be escaped with a backslash (`\'). As a consequence of 996 the way values are split into words, matched, and then joined, the 997 construct `${VAR:M*}' removes all leading and trailing whitespace 998 and normalizes the inter-word spacing to a single space. 999 1000 ::NN_p_a_t_t_e_r_n 1001 This is the opposite of `::MM', selecting all words which do _n_o_t match 1002 _p_a_t_t_e_r_n. 1003 1004 ::OO Orders the words lexicographically. 1005 1006 ::OOnn Orders the words numerically. A number followed by one of `k', `M' 1007 or `G' is multiplied by the appropriate factor, which is 1024 for 1008 `k', 1048576 for `M', or 1073741824 for `G'. Both upper- and lower- 1009 case letters are accepted. 1010 1011 ::OOrr Orders the words in reverse lexicographical order. 1012 1013 ::OOrrnn 1014 Orders the words in reverse numerical order. 1015 1016 ::OOxx Shuffles the words. The results are different each time you are 1017 referring to the modified variable; use the assignment with 1018 expansion `::==' to prevent such behavior. For example, 1019 1020 LIST= uno due tre quattro 1021 RANDOM_LIST= ${LIST:Ox} 1022 STATIC_RANDOM_LIST:= ${LIST:Ox} 1023 1024 all: 1025 @echo "${RANDOM_LIST}" 1026 @echo "${RANDOM_LIST}" 1027 @echo "${STATIC_RANDOM_LIST}" 1028 @echo "${STATIC_RANDOM_LIST}" 1029 may produce output similar to: 1030 1031 quattro due tre uno 1032 tre due quattro uno 1033 due uno quattro tre 1034 due uno quattro tre 1035 1036 ::QQ Quotes every shell meta-character in the value, so that it can be 1037 passed safely to the shell. 1038 1039 ::qq Quotes every shell meta-character in the value, and also doubles `$' 1040 characters so that it can be passed safely through recursive 1041 invocations of bbmmaakkee. This is equivalent to `::SS//\\$$//&&&&//gg::QQ'. 1042 1043 ::RR Replaces each word with everything but its suffix. 1044 1045 ::rraannggee[==_c_o_u_n_t] 1046 The value is an integer sequence representing the words of the 1047 original value, or the supplied _c_o_u_n_t. 1048 1049 ::ggmmttiimmee[==_t_i_m_e_s_t_a_m_p] 1050 The value is interpreted as a format string for strftime(3), using 1051 gmtime(3), producing the formatted timestamp. Note: the `%s' format 1052 should only be used with `::llooccaallttiimmee'. If a _t_i_m_e_s_t_a_m_p value is not 1053 provided or is 0, the current time is used. 1054 1055 ::hhaasshh 1056 Computes a 32-bit hash of the value and encodes it as 8 hex digits. 1057 1058 ::llooccaallttiimmee[==_t_i_m_e_s_t_a_m_p] 1059 The value is interpreted as a format string for strftime(3), using 1060 localtime(3), producing the formatted timestamp. If a _t_i_m_e_s_t_a_m_p 1061 value is not provided or is 0, the current time is used. 1062 1063 ::mmttiimmee[==_t_i_m_e_s_t_a_m_p] 1064 Call stat(2) with each word as pathname; use `st_mtime' as the new 1065 value. If stat(2) fails; use _t_i_m_e_s_t_a_m_p or current time. If 1066 _t_i_m_e_s_t_a_m_p is set to `error', then stat(2) failure will cause an 1067 error. 1068 1069 ::ttAA Attempts to convert the value to an absolute path using realpath(3). 1070 If that fails, the value is unchanged. 1071 1072 ::ttll Converts the value to lower-case letters. 1073 1074 ::ttss_c 1075 When joining the words after a modifier that treats the value as 1076 words, the words are normally separated by a space. This modifier 1077 changes the separator to the character _c. If _c is omitted, no 1078 separator is used. The common escapes (including octal numeric 1079 codes) work as expected. 1080 1081 ::tttt Converts the first character of each word to upper-case, and the 1082 rest to lower-case letters. 1083 1084 ::ttuu Converts the value to upper-case letters. 1085 1086 ::ttWW Causes subsequent modifiers to treat the value as a single word 1087 (possibly containing embedded whitespace). See also `::[[**]]'. 1088 1089 ::ttww Causes the value to be treated as a list of words. See also `::[[@@]]'. 1090 1091 ::SS/[^^]_o_l_d___s_t_r_i_n_g[$$]/_n_e_w___s_t_r_i_n_g/[11ggWW] 1092 Modifies the first occurrence of _o_l_d___s_t_r_i_n_g in each word of the 1093 value, replacing it with _n_e_w___s_t_r_i_n_g. 1094 1095 If _o_l_d___s_t_r_i_n_g is preceded by a caret (`^'), _o_l_d___s_t_r_i_n_g is anchored 1096 at the beginning of each word. If _o_l_d___s_t_r_i_n_g is followed by a 1097 dollar sign (`$'), it is anchored at the end of each word. Inside 1098 _n_e_w___s_t_r_i_n_g, an ampersand (`&') is replaced by _o_l_d___s_t_r_i_n_g. Both 1099 _o_l_d___s_t_r_i_n_g and _n_e_w___s_t_r_i_n_g may contain nested expressions. 1100 1101 Further options: 1102 1103 11 Only the word of the first occurrence is affected. 1104 1105 gg All occurrences in each affected word are replaced. 1106 1107 WW The expression value is treated as a single word. 1108 1109 Any character may be used as the delimiter for the parts of the 1110 modifier string. The anchoring, ampersand, dollar and delimiter 1111 characters can be escaped with a backslash (`\'). 1112 1113 ::CC/_p_a_t_t_e_r_n/_r_e_p_l_a_c_e_m_e_n_t/[11ggWW] 1114 Modifies the first occurrence of the extended regular expression 1115 _p_a_t_t_e_r_n (see regex(3)) in each word of the value, replacing it with 1116 an ed(1)-style _r_e_p_l_a_c_e_m_e_n_t. 1117 1118 Both _p_a_t_t_e_r_n and _r_e_p_l_a_c_e_m_e_n_t may contain nested expressions. 1119 1120 Further options: 1121 1122 11 Only the word of the first occurrence is affected. 1123 1124 gg All occurrences in each affected word are replaced. 1125 1126 WW The expression value is treated as a single word. 1127 1128 Any character may be used as the delimiter for the parts of the 1129 modifier string. The anchoring, ampersand, dollar and delimiter 1130 characters can be escaped with a backslash (`\'). 1131 1132 ::TT Replaces each word with its last path component (basename). 1133 1134 ::uu Removes adjacent duplicate words (like uniq(1)). 1135 1136 ::??_t_r_u_e___s_t_r_i_n_g::_f_a_l_s_e___s_t_r_i_n_g 1137 If the variable name (not its value), when parsed as a ..iiff 1138 conditional expression, evaluates to true, return as its value the 1139 _t_r_u_e___s_t_r_i_n_g, otherwise return the _f_a_l_s_e___s_t_r_i_n_g. Since the variable 1140 name is used as the expression, :? must be the first modifier after 1141 the variable name itself--which, of course, usually contains 1142 variable expansions. A common error is trying to use expressions 1143 like 1144 ${NUMBERS:M42:?match:no} 1145 which actually tests defined(NUMBERS). To determine if any words 1146 match "42", you need to use something like: 1147 ${"${NUMBERS:M42}" != "":?match:no}. 1148 1149 ::_o_l_d___s_t_r_i_n_g==_n_e_w___s_t_r_i_n_g 1150 This is the AT&T System V UNIX style substitution. It can only be 1151 the last modifier specified, as a `:' in either _o_l_d___s_t_r_i_n_g or 1152 _n_e_w___s_t_r_i_n_g is treated as a regular character, not as the end of the 1153 modifier. 1154 1155 If _o_l_d___s_t_r_i_n_g does not contain the pattern matching character `%', 1156 and the word ends with _o_l_d___s_t_r_i_n_g or equals it, that suffix is 1157 replaced with _n_e_w___s_t_r_i_n_g. 1158 1159 Otherwise, the first `%' in _o_l_d___s_t_r_i_n_g matches a possibly empty 1160 substring of arbitrary characters, and if the whole pattern is found 1161 in the word, the matching part is replaced with _n_e_w___s_t_r_i_n_g, and the 1162 first occurrence of `%' in _n_e_w___s_t_r_i_n_g (if any) is replaced with the 1163 substring matched by the `%'. 1164 1165 Both _o_l_d___s_t_r_i_n_g and _n_e_w___s_t_r_i_n_g may contain nested expressions. To 1166 prevent a dollar sign from starting a nested expression, escape it 1167 with a backslash. 1168 1169 ::@@_v_a_r_n_a_m_e@@_s_t_r_i_n_g@@ 1170 This is the loop expansion mechanism from the OSF Development 1171 Environment (ODE) make. Unlike ..ffoorr loops, expansion occurs at the 1172 time of reference. For each word in the value, assign the word to 1173 the variable named _v_a_r_n_a_m_e and evaluate _s_t_r_i_n_g. The ODE convention 1174 is that _v_a_r_n_a_m_e should start and end with a period, for example: 1175 ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@} 1176 1177 However, a single-letter variable is often more readable: 1178 ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@} 1179 1180 ::__[==_v_a_r] 1181 Saves the current variable value in `$_' or the named _v_a_r for later 1182 reference. Example usage: 1183 1184 M_cmpv.units = 1 1000 1000000 1185 M_cmpv = S,., ,g:_:range:@i@+ $${_:[-$$i]} \ 1186 \* $${M_cmpv.units:[$$i]}@:S,^,expr 0 ,1:sh 1187 1188 .if ${VERSION:${M_cmpv}} < ${3.1.12:L:${M_cmpv}} 1189 1190 Here `$_' is used to save the result of the `:S' modifier which is 1191 later referenced using the index values from `:range'. 1192 1193 ::UU_n_e_w_v_a_l 1194 If the variable is undefined, the optional _n_e_w_v_a_l (which may be 1195 empty) is the value. If the variable is defined, the existing value 1196 is returned. This is another ODE make feature. It is handy for 1197 setting per-target CFLAGS for instance: 1198 ${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}} 1199 If a value is only required if the variable is undefined, use: 1200 ${VAR:D:Unewval} 1201 1202 ::DD_n_e_w_v_a_l 1203 If the variable is defined, _n_e_w_v_a_l (which may be empty) is the 1204 value. 1205 1206 ::LL The name of the variable is the value. 1207 1208 ::PP The path of the node which has the same name as the variable is the 1209 value. If no such node exists or its path is null, the name of the 1210 variable is used. In order for this modifier to work, the name 1211 (node) must at least have appeared on the right-hand side of a 1212 dependency. 1213 1214 ::!!_c_m_d!! 1215 The output of running _c_m_d is the value. 1216 1217 ::sshh The value is run as a command, and the output becomes the new value. 1218 1219 ::sshh11 1220 The value is run as a command, for the first reference only, and the 1221 output is cached for subsequent references. This modifier is useful 1222 when the result is not expected to change. 1223 1224 ::::==_s_t_r 1225 The variable is assigned the value _s_t_r after substitution. This 1226 modifier and its variations are useful in obscure situations such as 1227 wanting to set a variable at a point where a target's shell commands 1228 are being parsed. These assignment modifiers always expand to 1229 nothing. 1230 1231 The `::::' helps avoid false matches with the AT&T System V UNIX style 1232 `:=' modifier and since substitution always occurs, the `::=' form 1233 is vaguely appropriate. 1234 1235 ::::??==_s_t_r 1236 As for ::::== but only if the variable does not already have a value. 1237 1238 ::::++==_s_t_r 1239 Append _s_t_r to the variable. 1240 1241 ::::!!==_c_m_d 1242 Assign the output of _c_m_d to the variable. 1243 1244 ::[[_r_a_n_g_e]] 1245 Selects one or more words from the value, or performs other 1246 operations related to the way in which the value is split into 1247 words. 1248 1249 An empty value, or a value that consists entirely of white-space, is 1250 treated as a single word. For the purposes of the `::[[]]' modifier, 1251 the words are indexed both forwards using positive integers (where 1252 index 1 represents the first word), and backwards using negative 1253 integers (where index -1 represents the last word). 1254 1255 The _r_a_n_g_e is subjected to variable expansion, and the expanded 1256 result is then interpreted as follows: 1257 1258 _i_n_d_e_x Selects a single word from the value. 1259 1260 _s_t_a_r_t...._e_n_d 1261 Selects all words from _s_t_a_r_t to _e_n_d, inclusive. For example, 1262 `::[[22....--11]]' selects all words from the second word to the last 1263 word. If _s_t_a_r_t is greater than _e_n_d, the words are output in 1264 reverse order. For example, `::[[--11....11]]' selects all the words 1265 from last to first. If the list is already ordered, this 1266 effectively reverses the list, but it is more efficient to 1267 use `::OOrr' instead of `::OO::[[--11....11]]'. 1268 1269 ** Causes subsequent modifiers to treat the value as a single 1270 word (possibly containing embedded whitespace). Analogous to 1271 the effect of $* in Bourne shell. 1272 1273 0 Means the same as `::[[**]]'. 1274 1275 @@ Causes subsequent modifiers to treat the value as a sequence 1276 of words delimited by whitespace. Analogous to the effect of 1277 $@ in Bourne shell. 1278 1279 ## Returns the number of words in the value. 1280 1281DDIIRREECCTTIIVVEESS 1282 bbmmaakkee offers directives for including makefiles, conditionals and for 1283 loops. All these directives are identified by a line beginning with a 1284 single dot (`.') character, followed by the keyword of the directive, 1285 such as iinncclluuddee or iiff. 1286 1287 FFiillee iinncclluussiioonn 1288 Files are included with either ..iinncclluuddee <<_f_i_l_e>> or ..iinncclluuddee ""_f_i_l_e"". 1289 Variables between the angle brackets or double quotes are expanded to 1290 form the file name. If angle brackets are used, the included makefile is 1291 expected to be in the system makefile directory. If double quotes are 1292 used, the including makefile's directory and any directories specified 1293 using the --II option are searched before the system makefile directory. 1294 1295 For compatibility with other make variants, `iinncclluuddee _f_i_l_e ...' (without 1296 leading dot) is also accepted. 1297 1298 If the include statement is written as ..--iinncclluuddee or as ..ssiinncclluuddee, errors 1299 locating and/or opening include files are ignored. 1300 1301 If the include statement is written as ..ddiinncclluuddee, not only are errors 1302 locating and/or opening include files ignored, but stale dependencies 1303 within the included file are ignored just like in _._M_A_K_E_._D_E_P_E_N_D_F_I_L_E. 1304 1305 EExxppoorrttiinngg vvaarriiaabblleess 1306 The directives for exporting and unexporting variables are: 1307 1308 ..eexxppoorrtt _v_a_r_i_a_b_l_e ... 1309 Export the specified global variable. 1310 1311 For compatibility with other make programs, eexxppoorrtt _v_a_r_i_a_b_l_e==_v_a_l_u_e 1312 (without leading dot) is also accepted. 1313 1314 Appending a variable name to _._M_A_K_E_._E_X_P_O_R_T_E_D is equivalent to 1315 exporting a variable. 1316 1317 ..eexxppoorrtt--aallll 1318 Export all globals except for internal variables (those that 1319 start with `.'). This is not affected by the --XX flag, so should 1320 be used with caution. 1321 1322 ..eexxppoorrtt--eennvv _v_a_r_i_a_b_l_e ... 1323 The same as `.export', except that the variable is not appended 1324 to _._M_A_K_E_._E_X_P_O_R_T_E_D. This allows exporting a value to the 1325 environment which is different from that used by bbmmaakkee 1326 internally. 1327 1328 ..eexxppoorrtt--lliitteerraall _v_a_r_i_a_b_l_e ... 1329 The same as `.export-env', except that variables in the value are 1330 not expanded. 1331 1332 ..uunneexxppoorrtt _v_a_r_i_a_b_l_e ... 1333 The opposite of `.export'. The specified global _v_a_r_i_a_b_l_e is 1334 removed from _._M_A_K_E_._E_X_P_O_R_T_E_D. If no variable list is provided, 1335 all globals are unexported, and _._M_A_K_E_._E_X_P_O_R_T_E_D deleted. 1336 1337 ..uunneexxppoorrtt--eennvv 1338 Unexport all globals previously exported and clear the 1339 environment inherited from the parent. This operation causes a 1340 memory leak of the original environment, so should be used 1341 sparingly. Testing for _._M_A_K_E_._L_E_V_E_L being 0 would make sense. 1342 Also note that any variables which originated in the parent 1343 environment should be explicitly preserved if desired. For 1344 example: 1345 1346 .if ${.MAKE.LEVEL} == 0 1347 PATH := ${PATH} 1348 .unexport-env 1349 .export PATH 1350 .endif 1351 1352 Would result in an environment containing only `PATH', which is 1353 the minimal useful environment. Actually `_._M_A_K_E_._L_E_V_E_L' is also 1354 pushed into the new environment. 1355 1356 MMeessssaaggeess 1357 The directives for printing messages to the output are: 1358 1359 ..iinnffoo _m_e_s_s_a_g_e 1360 The message is printed along with the name of the makefile and 1361 line number. 1362 1363 ..wwaarrnniinngg _m_e_s_s_a_g_e 1364 The message prefixed by `warning:' is printed along with the name 1365 of the makefile and line number. 1366 1367 ..eerrrroorr _m_e_s_s_a_g_e 1368 The message is printed along with the name of the makefile and 1369 line number, bbmmaakkee exits immediately. 1370 1371 CCoonnddiittiioonnaallss 1372 The directives for conditionals are: 1373 1374 ..iiff [!!]_e_x_p_r_e_s_s_i_o_n [_o_p_e_r_a_t_o_r _e_x_p_r_e_s_s_i_o_n ...] 1375 Test the value of an expression. 1376 1377 ..iiffddeeff [!!]_v_a_r_i_a_b_l_e [_o_p_e_r_a_t_o_r _v_a_r_i_a_b_l_e ...] 1378 Test whether a variable is defined. 1379 1380 ..iiffnnddeeff [!!]_v_a_r_i_a_b_l_e [_o_p_e_r_a_t_o_r _v_a_r_i_a_b_l_e ...] 1381 Test whether a variable is not defined. 1382 1383 ..iiffmmaakkee [!!]_t_a_r_g_e_t [_o_p_e_r_a_t_o_r _t_a_r_g_e_t ...] 1384 Test the target being requested. 1385 1386 ..iiffnnmmaakkee [!!]_t_a_r_g_e_t [_o_p_e_r_a_t_o_r _t_a_r_g_e_t ...] 1387 Test the target being requested. 1388 1389 ..eellssee Reverse the sense of the last conditional. 1390 1391 ..eelliiff [!!]_e_x_p_r_e_s_s_i_o_n [_o_p_e_r_a_t_o_r _e_x_p_r_e_s_s_i_o_n ...] 1392 A combination of `..eellssee' followed by `..iiff'. 1393 1394 ..eelliiffddeeff [!!]_v_a_r_i_a_b_l_e [_o_p_e_r_a_t_o_r _v_a_r_i_a_b_l_e ...] 1395 A combination of `..eellssee' followed by `..iiffddeeff'. 1396 1397 ..eelliiffnnddeeff [!!]_v_a_r_i_a_b_l_e [_o_p_e_r_a_t_o_r _v_a_r_i_a_b_l_e ...] 1398 A combination of `..eellssee' followed by `..iiffnnddeeff'. 1399 1400 ..eelliiffmmaakkee [!!]_t_a_r_g_e_t [_o_p_e_r_a_t_o_r _t_a_r_g_e_t ...] 1401 A combination of `..eellssee' followed by `..iiffmmaakkee'. 1402 1403 ..eelliiffnnmmaakkee [!!]_t_a_r_g_e_t [_o_p_e_r_a_t_o_r _t_a_r_g_e_t ...] 1404 A combination of `..eellssee' followed by `..iiffnnmmaakkee'. 1405 1406 ..eennddiiff End the body of the conditional. 1407 1408 The _o_p_e_r_a_t_o_r may be any one of the following: 1409 1410 |||| Logical OR. 1411 1412 &&&& Logical AND; of higher precedence than `||||'. 1413 1414 bbmmaakkee only evaluates a conditional as far as is necessary to determine 1415 its value. Parentheses can be used to override the operator precedence. 1416 The boolean operator `!!' may be used to logically negate an expression, 1417 typically a function call. It is of higher precedence than `&&&&'. 1418 1419 The value of _e_x_p_r_e_s_s_i_o_n may be any of the following function call 1420 expressions: 1421 1422 ddeeffiinneedd(_v_a_r_n_a_m_e) 1423 Evaluates to true if the variable _v_a_r_n_a_m_e has been defined. 1424 1425 mmaakkee(_t_a_r_g_e_t) 1426 Evaluates to true if the target was specified as part of bbmmaakkee's 1427 command line or was declared the default target (either 1428 implicitly or explicitly, see _._M_A_I_N) before the line containing 1429 the conditional. 1430 1431 eemmppttyy(_v_a_r_n_a_m_e[:_m_o_d_i_f_i_e_r_s]) 1432 Evaluates to true if the expansion of the variable, after 1433 applying the modifiers, results in an empty string. 1434 1435 eexxiissttss(_p_a_t_h_n_a_m_e) 1436 Evaluates to true if the given pathname exists. If relative, the 1437 pathname is searched for on the system search path (see _._P_A_T_H). 1438 1439 ttaarrggeett(_t_a_r_g_e_t) 1440 Evaluates to true if the target has been defined. 1441 1442 ccoommmmaannddss(_t_a_r_g_e_t) 1443 Evaluates to true if the target has been defined and has commands 1444 associated with it. 1445 1446 _E_x_p_r_e_s_s_i_o_n may also be an arithmetic or string comparison. Variable 1447 expansion is performed on both sides of the comparison. If both sides 1448 are numeric and neither is enclosed in quotes, the comparison is done 1449 numerically, otherwise lexicographically. A string is interpreted as a 1450 hexadecimal integer if it is preceded by 0x, otherwise it is interpreted 1451 as a decimal floating-point number; octal numbers are not supported. 1452 1453 All comparisons may use the operators `====' and `!!=='. Numeric comparisons 1454 may also use the operators `<<', `<<==', `>>' and `>>=='. 1455 1456 If the comparison has neither a comparison operator nor a right side, the 1457 expression evaluates to true if it is nonempty and its numeric value (if 1458 any) is not zero. 1459 1460 When bbmmaakkee is evaluating one of these conditional expressions, and it 1461 encounters a (whitespace-separated) word it doesn't recognize, either the 1462 "make" or "defined" function is applied to it, depending on the form of 1463 the conditional. If the form is `..iiffddeeff', `..iiffnnddeeff' or `..iiff', the 1464 "defined" function is applied. Similarly, if the form is `..iiffmmaakkee' or 1465 `..iiffnnmmaakkee', the "make" function is applied. 1466 1467 If the conditional evaluates to true, parsing of the makefile continues 1468 as before. If it evaluates to false, the following lines until the 1469 corresponding `..eelliiff' variant, `..eellssee' or `..eennddiiff' are skipped. 1470 1471 FFoorr llooooppss 1472 For loops are typically used to apply a set of rules to a list of files. 1473 The syntax of a for loop is: 1474 1475 ..ffoorr _v_a_r_i_a_b_l_e [_v_a_r_i_a_b_l_e ...] iinn _e_x_p_r_e_s_s_i_o_n 1476 <_m_a_k_e_-_l_i_n_e_s> 1477 ..eennddffoorr 1478 1479 The _e_x_p_r_e_s_s_i_o_n is expanded and then split into words. On each iteration 1480 of the loop, one word is taken and assigned to each _v_a_r_i_a_b_l_e, in order, 1481 and these _v_a_r_i_a_b_l_e_s are substituted into the _m_a_k_e_-_l_i_n_e_s inside the body 1482 of the for loop. The number of words must come out even; that is, if 1483 there are three iteration variables, the number of words provided must be 1484 a multiple of three. 1485 1486 If `..bbrreeaakk' is encountered within a ..ffoorr loop, it causes early 1487 termination of the loop, otherwise a parse error. 1488 1489 OOtthheerr ddiirreeccttiivveess 1490 ..uunnddeeff _v_a_r_i_a_b_l_e ... 1491 Un-define the specified global variables. Only global variables 1492 can be un-defined. 1493 1494CCOOMMMMEENNTTSS 1495 Comments begin with a hash (`#') character, anywhere but in a shell 1496 command line, and continue to the end of an unescaped new line. 1497 1498SSPPEECCIIAALL SSOOUURRCCEESS ((AATTTTRRIIBBUUTTEESS)) 1499 ..EEXXEECC Target is never out of date, but always execute commands 1500 anyway. 1501 1502 ..IIGGNNOORREE Ignore any errors from the commands associated with this 1503 target, exactly as if they all were preceded by a dash (`-'). 1504 1505 ..MMAADDEE Mark the target(s) up to date. 1506 1507 ..MMAAKKEE Execute the commands associated with this target even if the --nn 1508 or --tt options were specified. Normally used to mark recursive 1509 bbmmaakkees. 1510 1511 ..MMEETTAA Create a meta file for the target, even if it is flagged as 1512 ..PPHHOONNYY, ..MMAAKKEE, or ..SSPPEECCIIAALL. Usage in conjunction with ..MMAAKKEE is 1513 the most likely case. In "meta" mode, the target is out-of- 1514 date if the meta file is missing. 1515 1516 ..NNOOMMEETTAA Do not create a meta file for the target. Meta files are also 1517 not created for ..PPHHOONNYY, ..MMAAKKEE, or ..SSPPEECCIIAALL targets. 1518 1519 ..NNOOMMEETTAA__CCMMPP 1520 Ignore differences in commands when deciding if target is out 1521 of date. This is useful if the command contains a value which 1522 always changes. If the number of commands change, though, the 1523 target is still considered out of date. The same effect 1524 applies to any command line that uses the variable _._O_O_D_A_T_E, 1525 which can be used for that purpose even when not otherwise 1526 needed or desired: 1527 1528 1529 skip-compare-for-some: 1530 @echo this is compared 1531 @echo this is not ${.OODATE:M.NOMETA_CMP} 1532 @echo this is also compared 1533 1534 The ::MM pattern suppresses any expansion of the unwanted 1535 variable. 1536 1537 ..NNOOPPAATTHH Do not search for the target in the directories specified by 1538 _._P_A_T_H. 1539 1540 ..NNOOTTMMAAIINN Normally bbmmaakkee selects the first target it encounters as the 1541 default target to be built if no target was specified. This 1542 source prevents this target from being selected. 1543 1544 ..OOPPTTIIOONNAALL 1545 If a target is marked with this attribute and bbmmaakkee can't 1546 figure out how to create it, it ignores this fact and assumes 1547 the file isn't needed or already exists. 1548 1549 ..PPHHOONNYY The target does not correspond to an actual file; it is always 1550 considered to be out of date, and is not created with the --tt 1551 option. Suffix-transformation rules are not applied to ..PPHHOONNYY 1552 targets. 1553 1554 ..PPRREECCIIOOUUSS 1555 When bbmmaakkee is interrupted, it normally removes any partially 1556 made targets. This source prevents the target from being 1557 removed. 1558 1559 ..RREECCUURRSSIIVVEE 1560 Synonym for ..MMAAKKEE. 1561 1562 ..SSIILLEENNTT Do not echo any of the commands associated with this target, 1563 exactly as if they all were preceded by an at sign (`@'). 1564 1565 ..UUSSEE Turn the target into bbmmaakkee's version of a macro. When the 1566 target is used as a source for another target, the other target 1567 acquires the commands, sources, and attributes (except for 1568 ..UUSSEE) of the source. If the target already has commands, the 1569 ..UUSSEE target's commands are appended to them. 1570 1571 ..UUSSEEBBEEFFOORREE 1572 Like ..UUSSEE, but instead of appending, prepend the ..UUSSEEBBEEFFOORREE 1573 target commands to the target. 1574 1575 ..WWAAIITT If ..WWAAIITT appears in a dependency line, the sources that precede 1576 it are made before the sources that succeed it in the line. 1577 Since the dependents of files are not made until the file 1578 itself could be made, this also stops the dependents being 1579 built unless they are needed for another branch of the 1580 dependency tree. So given: 1581 1582 x: a .WAIT b 1583 echo x 1584 a: 1585 echo a 1586 b: b1 1587 echo b 1588 b1: 1589 echo b1 1590 1591 the output is always `a', `b1', `b', `x'. 1592 1593 The ordering imposed by ..WWAAIITT is only relevant for parallel 1594 makes. 1595 1596SSPPEECCIIAALL TTAARRGGEETTSS 1597 Special targets may not be included with other targets, i.e. they must be 1598 the only target specified. 1599 1600 ..BBEEGGIINN Any command lines attached to this target are executed before 1601 anything else is done. 1602 1603 ..DDEEFFAAUULLTT 1604 This is sort of a ..UUSSEE rule for any target (that was used only 1605 as a source) that bbmmaakkee can't figure out any other way to 1606 create. Only the shell script is used. The _._I_M_P_S_R_C variable of 1607 a target that inherits ..DDEEFFAAUULLTT's commands is set to the 1608 target's own name. 1609 1610 ..DDEELLEETTEE__OONN__EERRRROORR 1611 If this target is present in the makefile, it globally causes 1612 make to delete targets whose commands fail. (By default, only 1613 targets whose commands are interrupted during execution are 1614 deleted. This is the historical behavior.) This setting can be 1615 used to help prevent half-finished or malformed targets from 1616 being left around and corrupting future rebuilds. 1617 1618 ..EENNDD Any command lines attached to this target are executed after 1619 everything else is done successfully. 1620 1621 ..EERRRROORR Any command lines attached to this target are executed when 1622 another target fails. See _M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R for the 1623 variables that will be set. 1624 1625 ..IIGGNNOORREE Mark each of the sources with the ..IIGGNNOORREE attribute. If no 1626 sources are specified, this is the equivalent of specifying the 1627 --ii option. 1628 1629 ..IINNTTEERRRRUUPPTT 1630 If bbmmaakkee is interrupted, the commands for this target are 1631 executed. 1632 1633 ..MMAAIINN If no target is specified when bbmmaakkee is invoked, this target is 1634 built. 1635 1636 ..MMAAKKEEFFLLAAGGSS 1637 This target provides a way to specify flags for bbmmaakkee at the 1638 time when the makefiles are read. The flags are as if typed to 1639 the shell, though the --ff option has no effect. 1640 1641 ..NNOOPPAATTHH Apply the ..NNOOPPAATTHH attribute to any specified sources. 1642 1643 ..NNOOTTPPAARRAALLLLEELL 1644 Disable parallel mode. 1645 1646 ..NNOO__PPAARRAALLLLEELL 1647 Synonym for ..NNOOTTPPAARRAALLLLEELL, for compatibility with other pmake 1648 variants. 1649 1650 ..NNOORREEAADDOONNLLYY 1651 clear the read-only attribute from the global variables 1652 specified as sources. 1653 1654 ..OOBBJJDDIIRR The source is a new value for `_._O_B_J_D_I_R'. If it exists, bbmmaakkee 1655 changes the current working directory to it and updates the 1656 value of `_._O_B_J_D_I_R'. 1657 1658 ..OORRDDEERR In parallel mode, the named targets are made in sequence. This 1659 ordering does not add targets to the list of targets to be made. 1660 1661 Since the dependents of a target do not get built until the 1662 target itself could be built, unless `a' is built by another 1663 part of the dependency graph, the following is a dependency 1664 loop: 1665 1666 .ORDER: b a 1667 b: a 1668 1669 ..PPAATTHH The sources are directories which are to be searched for files 1670 not found in the current directory. If no sources are 1671 specified, any previously specified directories are removed from 1672 the search path. If the source is the special ..DDOOTTLLAASSTT target, 1673 the current working directory is searched last. 1674 1675 ..PPAATTHH.._s_u_f_f_i_x 1676 Like ..PPAATTHH but applies only to files with a particular suffix. 1677 The suffix must have been previously declared with ..SSUUFFFFIIXXEESS. 1678 1679 ..PPHHOONNYY Apply the ..PPHHOONNYY attribute to any specified sources. 1680 1681 ..PPOOSSIIXX If this is the first non-comment line in the main makefile, the 1682 variable _%_P_O_S_I_X is set to the value `1003.2' and the makefile 1683 `<posix.mk>' is included if it exists, to provide POSIX- 1684 compatible default rules. If bbmmaakkee is run with the --rr flag, 1685 only `posix.mk' contributes to the default rules. In POSIX- 1686 compatible mode, the AT&T System V UNIX style substitution 1687 modifier is checked first rather than as a fallback. 1688 1689 ..PPRREECCIIOOUUSS 1690 Apply the ..PPRREECCIIOOUUSS attribute to any specified sources. If no 1691 sources are specified, the ..PPRREECCIIOOUUSS attribute is applied to 1692 every target in the file. 1693 1694 ..RREEAADDOONNLLYY 1695 set the read-only attribute on the global variables specified as 1696 sources. 1697 1698 ..SSHHEELLLL Sets the shell that bbmmaakkee uses to execute commands. The sources 1699 are a set of _f_i_e_l_d==_v_a_l_u_e pairs. 1700 1701 name This is the minimal specification, used to select 1702 one of the built-in shell specs; sh, ksh, and csh. 1703 1704 path Specifies the absolute path to the shell. 1705 1706 hasErrCtl Indicates whether the shell supports exit on error. 1707 1708 check The command to turn on error checking. 1709 1710 ignore The command to disable error checking. 1711 1712 echo The command to turn on echoing of commands executed. 1713 1714 quiet The command to turn off echoing of commands 1715 executed. 1716 1717 filter The output to filter after issuing the quiet 1718 command. It is typically identical to quiet. 1719 1720 errFlag The flag to pass the shell to enable error checking. 1721 1722 echoFlag The flag to pass the shell to enable command 1723 echoing. 1724 1725 newline The string literal to pass the shell that results in 1726 a single newline character when used outside of any 1727 quoting characters. 1728 Example: 1729 1730 .SHELL: name=ksh path=/bin/ksh hasErrCtl=true \ 1731 check="set -e" ignore="set +e" \ 1732 echo="set -v" quiet="set +v" filter="set +v" \ 1733 echoFlag=v errFlag=e newline="'\n'" 1734 1735 ..SSIILLEENNTT Apply the ..SSIILLEENNTT attribute to any specified sources. If no 1736 sources are specified, the ..SSIILLEENNTT attribute is applied to every 1737 command in the file. 1738 1739 ..SSTTAALLEE This target gets run when a dependency file contains stale 1740 entries, having _._A_L_L_S_R_C set to the name of that dependency file. 1741 1742 ..SSUUFFFFIIXXEESS 1743 Each source specifies a suffix to bbmmaakkee. If no sources are 1744 specified, any previously specified suffixes are deleted. It 1745 allows the creation of suffix-transformation rules. 1746 1747 Example: 1748 1749 .SUFFIXES: .c .o 1750 .c.o: 1751 cc -o ${.TARGET} -c ${.IMPSRC} 1752 1753 ..SSYYSSPPAATTHH 1754 The sources are directories which are to be added to the system 1755 include path which bbmmaakkee searches for makefiles. If no sources 1756 are specified, any previously specified directories are removed 1757 from the system include path. 1758 1759EENNVVIIRROONNMMEENNTT 1760 bbmmaakkee uses the following environment variables, if they exist: MACHINE, 1761 MACHINE_ARCH, MAKE, MAKEFLAGS, MAKEOBJDIR, MAKEOBJDIRPREFIX, MAKESYSPATH, 1762 MAKE_STACK_TRACE, PWD, and TMPDIR. 1763 1764 MAKEOBJDIRPREFIX and MAKEOBJDIR should be set in the environment or on 1765 the command line to bbmmaakkee and not as makefile variables; see the 1766 description of `_._O_B_J_D_I_R' for more details. It is possible to set these 1767 via makefile variables but unless done very early and the `..OOBBJJDDIIRR' 1768 target is used to reset `_._O_B_J_D_I_R', there may be unexpected side effects. 1769 1770 If the MAKE_STACK_TRACE environment variable is set to "yes", any stack 1771 traces include the call chain of the parent processes. 1772 1773FFIILLEESS 1774 .depend list of dependencies 1775 makefile first default makefile if no makefile is specified on the 1776 command line 1777 Makefile second default makefile if no makefile is specified on the 1778 command line 1779 sys.mk system makefile 1780 /usr/share/mk system makefile directory 1781 1782DDIIAAGGNNOOSSTTIICCSS 1783 Invalid internal option "-J" in "_d_i_r_e_c_t_o_r_y" 1784 The internal --JJ option coordinates the main bbmmaakkee process with 1785 the sub-make processes to limit the number of jobs that run in 1786 parallel. The option is passed to all child processes via the 1787 MAKEFLAGS environment variable. To become valid, this option 1788 requires that the target running the sub-make is marked with the 1789 .MAKE special source, or that one of the target's commands 1790 directly contains the word "make" or one of the expressions 1791 "${MAKE}", "${.MAKE}", "$(MAKE)", "$(.MAKE)". If that's not the 1792 case, make issues the above warning and falls back to compat 1793 mode. 1794 1795 To see the chain of sub-makes that leads to the invalid option, 1796 set the MAKE_STACK_TRACE environment variable to "yes". 1797 1798 To run the sub-make in parallel mode, even in dry-run mode (see 1799 the --nn option), add the .MAKE pseudo source to the target. This 1800 is appropriate when the sub-make runs the same target in a 1801 subdirectory. 1802 1803 To run the sub-make in parallel mode but not in dry-mode, add a 1804 "${:D make}" marker to one of the target's commands. This marker 1805 expands to an empty string and thus does not affect the executed 1806 commands. 1807 1808 To run the sub-make in compat mode, add the --BB option to its 1809 invocation. This is appropriate when the sub-make is only used 1810 to print a variable's value using the --vv or --VV options. 1811 1812 To make the sub-make independent from the parent make, unset the 1813 MAKEFLAGS environment variable in the target's commands. 1814 1815CCOOMMPPAATTIIBBIILLIITTYY 1816 The basic make syntax is compatible between different make variants; 1817 however the special variables, variable modifiers and conditionals are 1818 not. 1819 1820 OOllddeerr vveerrssiioonnss 1821 An incomplete list of changes in older versions of bbmmaakkee: 1822 1823 The way that .for loop variables are substituted changed after NetBSD 5.0 1824 so that they still appear to be variable expansions. In particular this 1825 stops them being treated as syntax, and removes some obscure problems 1826 using them in .if statements. 1827 1828 The way that parallel makes are scheduled changed in NetBSD 4.0 so that 1829 .ORDER and .WAIT apply recursively to the dependent nodes. The 1830 algorithms used may change again in the future. 1831 1832 OOtthheerr mmaakkee ddiiaalleeccttss 1833 Other make dialects (GNU make, SVR4 make, POSIX make, etc.) do not 1834 support most of the features of bbmmaakkee as described in this manual. Most 1835 notably: 1836 1837 ++oo The ..WWAAIITT and ..OORRDDEERR declarations and most functionality 1838 pertaining to parallelization. (GNU make supports 1839 parallelization but lacks the features needed to control it 1840 effectively.) 1841 1842 ++oo Directives, including for loops and conditionals and most of 1843 the forms of include files. (GNU make has its own incompatible 1844 and less powerful syntax for conditionals.) 1845 1846 ++oo All built-in variables that begin with a dot. 1847 1848 ++oo Most of the special sources and targets that begin with a dot, 1849 with the notable exception of ..PPHHOONNYY, ..PPRREECCIIOOUUSS, and ..SSUUFFFFIIXXEESS. 1850 1851 ++oo Variable modifiers, except for the `:old=new' string 1852 substitution, which does not portably support globbing with `%' 1853 and historically only works on declared suffixes. 1854 1855 ++oo The $$>> variable even in its short form; most makes support this 1856 functionality but its name varies. 1857 1858 Some features are somewhat more portable, such as assignment with ++==, ??==, 1859 and !!==. The _._P_A_T_H functionality is based on an older feature VVPPAATTHH found 1860 in GNU make and many versions of SVR4 make; however, historically its 1861 behavior is too ill-defined (and too buggy) to rely upon. 1862 1863 The $$@@ and $$<< variables are more or less universally portable, as is the 1864 $$((MMAAKKEE)) variable. Basic use of suffix rules (for files only in the 1865 current directory, not trying to chain transformations together, etc.) is 1866 also reasonably portable. 1867 1868SSEEEE AALLSSOO 1869 mkdep(1) 1870 1871HHIISSTTOORRYY 1872 bbmmaakkee is derived from NetBSD make(1). It uses autoconf to facilitate 1873 portability to other platforms. 1874 1875 A make command appeared in Version 7 AT&T UNIX. This make implementation 1876 is based on Adam de Boor's pmake program, which was written for Sprite at 1877 Berkeley. It was designed to be a parallel distributed make running jobs 1878 on different machines using a daemon called "customs". 1879 1880 Historically the target/dependency FFRRCC has been used to FoRCe rebuilding 1881 (since the target/dependency does not exist ... unless someone creates an 1882 _F_R_C file). 1883 1884BBUUGGSS 1885 The bbmmaakkee syntax is difficult to parse. For instance, finding the end of 1886 a variable's use should involve scanning each of the modifiers, using the 1887 correct terminator for each field. In many places bbmmaakkee just counts {} 1888 and () in order to find the end of a variable expansion. 1889 1890 There is no way of escaping a space character in a filename. 1891 1892 In jobs mode, when a target fails; bbmmaakkee will put an error token into the 1893 job token pool. This will cause all other instances of bbmmaakkee using that 1894 token pool to abort the build and exit with error code 6. Sometimes the 1895 attempt to suppress a cascade of unnecessary errors, can result in a 1896 seemingly unexplained `*** Error code 6' 1897 1898FreeBSD 14.4-RELEASE-p3 July 3, 2026 BMAKE(1) 1899