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 (very rarely!) be useful to filter command 679 lines before comparison. This variable can be set to a set of 680 modifiers that are applied to each line of the old and new 681 command that differ, if the filtered commands still differ, the 682 target is considered out-of-date. 683 684 _._M_A_K_E_._M_E_T_A_._C_R_E_A_T_E_D 685 In "meta" mode, this variable contains a list of all the meta 686 files updated. If not empty, it can be used to trigger 687 processing of _._M_A_K_E_._M_E_T_A_._F_I_L_E_S. 688 689 _._M_A_K_E_._M_E_T_A_._F_I_L_E_S 690 In "meta" mode, this variable contains a list of all the meta 691 files used (updated or not). This list can be used to process 692 the meta files to extract dependency information. 693 694 _._M_A_K_E_._M_E_T_A_._I_G_N_O_R_E___F_I_L_T_E_R 695 Provides a list of variable modifiers to apply to each pathname. 696 Ignore if the expansion is an empty string. 697 698 _._M_A_K_E_._M_E_T_A_._I_G_N_O_R_E___P_A_T_H_S 699 Provides a list of path prefixes that should be ignored; because 700 the contents are expected to change over time. The default list 701 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' 702 703 _._M_A_K_E_._M_E_T_A_._I_G_N_O_R_E___P_A_T_T_E_R_N_S 704 Provides a list of patterns to match against pathnames. Ignore 705 any that match. 706 707 _._M_A_K_E_._M_E_T_A_._P_R_E_F_I_X 708 Defines the message printed for each meta file updated in "meta 709 verbose" mode. The default value is: 710 Building ${.TARGET:H:tA}/${.TARGET:T} 711 712 _._M_A_K_E_._M_O_D_E 713 Processed after reading all makefiles. Affects the mode that 714 bbmmaakkee runs in. It can contain these keywords: 715 716 ccoommppaatt Like --BB, puts bbmmaakkee into "compat" mode. 717 718 mmeettaa Puts bbmmaakkee into "meta" mode, where meta files are created 719 for each target to capture the commands run, the output 720 generated, and if filemon(4) is available, the system 721 calls which are of interest to bbmmaakkee. The captured 722 output can be useful when diagnosing errors. 723 724 bbmmaakkee will use the information in the meta file to help 725 determine if a target is out-of-date when the normal 726 dependency rules indicate it is not. 727 728 First, the commands to be executed, will be compared to 729 those captured previously, if any differ, the target is 730 out-of-date. 731 732 This allows for a huge improvement in the reliability and 733 efficiency of update builds. It is no longer necessary 734 for targets to depend on makefiles just in-case they set 735 a variable that might be relevant. Mechanisms such as 736 _._M_A_K_E_._M_E_T_A_._C_M_P___F_I_L_T_E_R and ..NNOOMMEETTAA__CCMMPP, allow limiting or 737 disabling that comparison on a per target basis. A 738 reference to the variable _._O_O_D_A_T_E can be leveraged to 739 block comparison of certain commands. For example: 740 `${.OODATE:M}' will expand to nothing and have no impact 741 on the target, its side-effect though, will be to prevent 742 comparison of any command line it appears on. For 743 documentation purposes `${.OODATE:MNOMETA_CMP}' is 744 useful. 745 746 If necessary, bbmmaakkee will then use the information 747 captured by filemon(4), to check the modification time of 748 any file used in generating the target, if any is newer, 749 the target is out-of-date. 750 751 Such deep inspection can easily lead to cases where a 752 target is _a_l_w_a_y_s considered out-of-date, which is why 753 _._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 754 _._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 755 inspection when necessary. 756 757 ccuurrddiirrOOkk==_b_f 758 By default, bbmmaakkee does not create _._m_e_t_a files in 759 `_._C_U_R_D_I_R'. This can be overridden by setting _b_f to a 760 value which represents true. 761 762 mmiissssiinngg--mmeettaa==_b_f 763 If _b_f is true, a missing _._m_e_t_a file makes the target out- 764 of-date. 765 766 mmiissssiinngg--ffiilleemmoonn==_b_f 767 If _b_f is true, missing filemon data makes the target out- 768 of-date. 769 770 nnooffiilleemmoonn 771 Do not use filemon(4). 772 773 eennvv For debugging, it can be useful to include the 774 environment in the _._m_e_t_a file. 775 776 vveerrbboossee 777 If in "meta" mode, print a clue about the target being 778 built. This is useful if the build is otherwise running 779 silently. The message printed is the expanded value of 780 _._M_A_K_E_._M_E_T_A_._P_R_E_F_I_X. 781 782 iiggnnoorree--ccmmdd 783 Some makefiles have commands which are simply not stable. 784 This keyword causes them to be ignored for determining 785 whether a target is out of date in "meta" mode. See also 786 ..NNOOMMEETTAA__CCMMPP. 787 788 ssiilleenntt==_b_f 789 If _b_f is true, when a .meta file is created, mark the 790 target ..SSIILLEENNTT. 791 792 rraannddoommiizzee--ttaarrggeettss 793 In both compat and parallel mode, do not make the targets 794 in the usual order, but instead randomize their order. 795 This mode can be used to detect undeclared dependencies 796 between files. 797 798 _M_A_K_E_O_B_J_D_I_R 799 Used to create files in a separate directory, see _._O_B_J_D_I_R. 800 801 _M_A_K_E___O_B_J_D_I_R___C_H_E_C_K___W_R_I_T_A_B_L_E 802 When true, bbmmaakkee will check that _._O_B_J_D_I_R is writable, and issue a 803 warning if not. 804 805 _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 806 When true and bbmmaakkee is warning about an unwritable _._O_B_J_D_I_R, 807 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 808 debug. 809 810 _M_A_K_E_O_B_J_D_I_R_P_R_E_F_I_X 811 Used to create files in a separate directory, see _._O_B_J_D_I_R. It 812 should be an absolute path. 813 814 _._M_A_K_E_._O_S 815 The name of the operating system, see uname(1). It is read-only. 816 817 _._M_A_K_E_O_V_E_R_R_I_D_E_S 818 This variable is used to record the names of variables assigned 819 to on the command line, so that they may be exported as part of 820 `MAKEFLAGS'. This behavior can be disabled by assigning an empty 821 value to `_._M_A_K_E_O_V_E_R_R_I_D_E_S' within a makefile. Extra variables can 822 be exported from a makefile by appending their names to 823 `_._M_A_K_E_O_V_E_R_R_I_D_E_S'. `MAKEFLAGS' is re-exported whenever 824 `_._M_A_K_E_O_V_E_R_R_I_D_E_S' is modified. 825 826 _._M_A_K_E_._P_A_T_H___F_I_L_E_M_O_N 827 If bbmmaakkee was built with filemon(4) support, this is set to the 828 path of the device node. This allows makefiles to test for this 829 support. 830 831 _._M_A_K_E_._P_I_D 832 The process ID of bbmmaakkee. It is read-only. 833 834 _._M_A_K_E_._P_P_I_D 835 The parent process ID of bbmmaakkee. It is read-only. 836 837 _M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R 838 When bbmmaakkee stops due to an error, it sets `_._E_R_R_O_R___T_A_R_G_E_T' to the 839 name of the target that failed, `_._E_R_R_O_R___E_X_I_T' to the exit status 840 of the failed target, `_._E_R_R_O_R___C_M_D' to the commands of the failed 841 target, and in "meta" mode, it also sets `_._E_R_R_O_R___C_W_D' to the 842 getcwd(3), and `_._E_R_R_O_R___M_E_T_A___F_I_L_E' to the path of the meta file 843 (if any) describing the failed target. It then prints its name 844 and the value of `_._C_U_R_D_I_R' as well as the value of any variables 845 named in `_M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R'. 846 847 _._M_A_K_E_._S_A_V_E___D_O_L_L_A_R_S 848 If true, `$$' are preserved when doing `:=' assignments. The 849 default is false, for backwards compatibility. Set to true for 850 compatability with other makes. If set to false, `$$' becomes 851 `$' per normal evaluation rules. 852 853 _._M_A_K_E_._T_A_R_G_E_T___L_O_C_A_L___V_A_R_I_A_B_L_E_S 854 If set to `false', apparent variable assignments in dependency 855 lines are treated as normal sources. 856 857 _._M_A_K_E_._U_I_D 858 The numeric ID of the user running bbmmaakkee. It is read-only. 859 860 _._n_e_w_l_i_n_e 861 This variable is simply assigned a newline character as its 862 value. It is read-only. This allows expansions using the ::@@ 863 modifier to put a newline between iterations of the loop rather 864 than a space. For example, in case of an error, bbmmaakkee prints the 865 variable names and their values using: 866 ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@} 867 868 _._O_B_J_D_I_R 869 A path to the directory where the targets are built. Its value 870 is determined by trying to chdir(2) to the following directories 871 in order and using the first match: 872 873 1. $${{MMAAKKEEOOBBJJDDIIRRPPRREEFFIIXX}}$${{..CCUURRDDIIRR}} 874 875 (Only if `MAKEOBJDIRPREFIX' is set in the environment or on 876 the command line.) 877 878 2. $${{MMAAKKEEOOBBJJDDIIRR}} 879 880 (Only if `MAKEOBJDIR' is set in the environment or on the 881 command line.) 882 883 3. $${{..CCUURRDDIIRR}}_/_o_b_j_.$${{MMAACCHHIINNEE}} 884 885 4. $${{..CCUURRDDIIRR}}_/_o_b_j 886 887 5. _/_u_s_r_/_o_b_j_/$${{..CCUURRDDIIRR}} 888 889 6. $${{..CCUURRDDIIRR}} 890 891 Variable expansion is performed on the value before it is used, 892 so expressions such as $${{..CCUURRDDIIRR::SS,,^^//uussrr//ssrrcc,,//vvaarr//oobbjj,,}} may be 893 used. This is especially useful with `MAKEOBJDIR'. 894 895 `_._O_B_J_D_I_R' may be modified in the makefile via the special target 896 `..OOBBJJDDIIRR'. In all cases, bbmmaakkee changes to the specified 897 directory if it exists, and sets `_._O_B_J_D_I_R' and `_P_W_D' to that 898 directory before executing any targets. 899 900 Except in the case of an explicit `..OOBBJJDDIIRR' target, bbmmaakkee checks 901 that the specified directory is writable and ignores it if not. 902 This check can be skipped by setting the environment variable 903 `MAKE_OBJDIR_CHECK_WRITABLE' to "no". 904 905 _._P_A_R_S_E_D_I_R 906 The directory name of the current makefile being parsed. 907 908 _._P_A_R_S_E_F_I_L_E 909 The basename of the current makefile being parsed. This variable 910 and `_._P_A_R_S_E_D_I_R' are both set only while the makefiles are being 911 parsed. To retain their current values, assign them to a 912 variable using assignment with expansion `::=='. 913 914 _._P_A_T_H The space-separated list of directories that bbmmaakkee searches for 915 files. To update this search list, use the special target 916 `..PPAATTHH' rather than modifying the variable directly. 917 918 _%_P_O_S_I_X Is set in POSIX mode, see the special `_._P_O_S_I_X' target. 919 920 _P_W_D Alternate path to the current directory. bbmmaakkee normally sets 921 `_._C_U_R_D_I_R' to the canonical path given by getcwd(3). However, if 922 the environment variable `PWD' is set and gives a path to the 923 current directory, bbmmaakkee sets `_._C_U_R_D_I_R' to the value of `PWD' 924 instead. This behavior is disabled if `MAKEOBJDIRPREFIX' is set 925 or `MAKEOBJDIR' contains a variable transform. `_P_W_D' is set to 926 the value of `_._O_B_J_D_I_R' for all programs which bbmmaakkee executes. 927 928 _._S_H_E_L_L The pathname of the shell used to run target scripts. It is 929 read-only. 930 931 _._S_U_F_F_I_X_E_S 932 The list of known suffixes. It is read-only. 933 934 _._S_Y_S_P_A_T_H 935 The space-separated list of directories that bbmmaakkee searches for 936 makefiles, referred to as the system include path. To update 937 this search list, use the special target `..SSYYSSPPAATTHH' rather than 938 modifying the variable which is read-only. 939 940 _._T_A_R_G_E_T_S 941 The list of targets explicitly specified on the command line, if 942 any. 943 944 _V_P_A_T_H The colon-separated (":") list of directories that bbmmaakkee searches 945 for files. This variable is supported for compatibility with old 946 make programs only, use `_._P_A_T_H' instead. 947 948 VVaarriiaabbllee mmooddiiffiieerrss 949 The general format of a variable expansion is: 950 951 $${{_v_a_r_i_a_b_l_e[::_m_o_d_i_f_i_e_r[::...]]}} 952 953 Each modifier begins with a colon. To escape a colon, precede it with a 954 backslash `\'. 955 956 A list of indirect modifiers can be specified via a variable, as follows: 957 958 _m_o_d_i_f_i_e_r___v_a_r_i_a_b_l_e = _m_o_d_i_f_i_e_r[::...] 959 960 $${{_v_a_r_i_a_b_l_e::$${{_m_o_d_i_f_i_e_r___v_a_r_i_a_b_l_e}}[::...]}} 961 962 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 963 with a colon, since that colon already occurs in the referencing 964 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 965 dollar sign (`$'), these must be doubled to avoid early expansion. 966 967 Some modifiers interpret the expression value as a single string, others 968 treat the expression value as a whitespace-separated list of words. When 969 splitting a string into words, whitespace can be escaped using double 970 quotes, single quotes and backslashes, like in the shell. The quotes and 971 backslashes are retained in the words. 972 973 The supported modifiers are: 974 975 ::EE Replaces each word with its suffix. 976 977 ::HH Replaces each word with its dirname. 978 979 ::MM_p_a_t_t_e_r_n 980 Selects only those words that match _p_a_t_t_e_r_n. The standard shell 981 wildcard characters (`*', `?', and `[]') may be used. The wildcard 982 characters may be escaped with a backslash (`\'). As a consequence 983 of the way values are split into words, matched, and then joined, 984 the construct `${VAR:M*}' removes all leading and trailing 985 whitespace and normalizes the inter-word spacing to a single space. 986 987 ::NN_p_a_t_t_e_r_n 988 This is the opposite of `::MM', selecting all words which do _n_o_t match 989 _p_a_t_t_e_r_n. 990 991 ::OO Orders the words lexicographically. 992 993 ::OOnn Orders the words numerically. A number followed by one of `k', `M' 994 or `G' is multiplied by the appropriate factor, which is 1024 for 995 `k', 1048576 for `M', or 1073741824 for `G'. Both upper- and lower- 996 case letters are accepted. 997 998 ::OOrr Orders the words in reverse lexicographical order. 999 1000 ::OOrrnn 1001 Orders the words in reverse numerical order. 1002 1003 ::OOxx Shuffles the words. The results are different each time you are 1004 referring to the modified variable; use the assignment with 1005 expansion `::==' to prevent such behavior. For example, 1006 1007 LIST= uno due tre quattro 1008 RANDOM_LIST= ${LIST:Ox} 1009 STATIC_RANDOM_LIST:= ${LIST:Ox} 1010 1011 all: 1012 @echo "${RANDOM_LIST}" 1013 @echo "${RANDOM_LIST}" 1014 @echo "${STATIC_RANDOM_LIST}" 1015 @echo "${STATIC_RANDOM_LIST}" 1016 may produce output similar to: 1017 1018 quattro due tre uno 1019 tre due quattro uno 1020 due uno quattro tre 1021 due uno quattro tre 1022 1023 ::QQ Quotes every shell meta-character in the value, so that it can be 1024 passed safely to the shell. 1025 1026 ::qq Quotes every shell meta-character in the value, and also doubles `$' 1027 characters so that it can be passed safely through recursive 1028 invocations of bbmmaakkee. This is equivalent to `::SS//\\$$//&&&&//gg::QQ'. 1029 1030 ::RR Replaces each word with everything but its suffix. 1031 1032 ::rraannggee[==_c_o_u_n_t] 1033 The value is an integer sequence representing the words of the 1034 original value, or the supplied _c_o_u_n_t. 1035 1036 ::ggmmttiimmee[==_t_i_m_e_s_t_a_m_p] 1037 The value is interpreted as a format string for strftime(3), using 1038 gmtime(3), producing the formatted timestamp. Note: the `%s' format 1039 should only be used with `::llooccaallttiimmee'. If a _t_i_m_e_s_t_a_m_p value is not 1040 provided or is 0, the current time is used. 1041 1042 ::hhaasshh 1043 Computes a 32-bit hash of the value and encodes it as 8 hex digits. 1044 1045 ::llooccaallttiimmee[==_t_i_m_e_s_t_a_m_p] 1046 The value is interpreted as a format string for strftime(3), using 1047 localtime(3), producing the formatted timestamp. If a _t_i_m_e_s_t_a_m_p 1048 value is not provided or is 0, the current time is used. 1049 1050 ::mmttiimmee[==_t_i_m_e_s_t_a_m_p] 1051 Call stat(2) with each word as pathname; use `st_mtime' as the new 1052 value. If stat(2) fails; use _t_i_m_e_s_t_a_m_p or current time. If 1053 _t_i_m_e_s_t_a_m_p is set to `error', then stat(2) failure will cause an 1054 error. 1055 1056 ::ttAA Attempts to convert the value to an absolute path using realpath(3). 1057 If that fails, the value is unchanged. 1058 1059 ::ttll Converts the value to lower-case letters. 1060 1061 ::ttss_c 1062 When joining the words after a modifier that treats the value as 1063 words, the words are normally separated by a space. This modifier 1064 changes the separator to the character _c. If _c is omitted, no 1065 separator is used. The common escapes (including octal numeric 1066 codes) work as expected. 1067 1068 ::tttt Converts the first character of each word to upper-case, and the 1069 rest to lower-case letters. 1070 1071 ::ttuu Converts the value to upper-case letters. 1072 1073 ::ttWW Causes subsequent modifiers to treat the value as a single word 1074 (possibly containing embedded whitespace). See also `::[[**]]'. 1075 1076 ::ttww Causes the value to be treated as a list of words. See also `::[[@@]]'. 1077 1078 ::SS/[^^]_o_l_d___s_t_r_i_n_g[$$]/_n_e_w___s_t_r_i_n_g/[11ggWW] 1079 Modifies the first occurrence of _o_l_d___s_t_r_i_n_g in each word of the 1080 value, replacing it with _n_e_w___s_t_r_i_n_g. 1081 1082 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 1083 at the beginning of each word. If _o_l_d___s_t_r_i_n_g is followed by a 1084 dollar sign (`$'), it is anchored at the end of each word. Inside 1085 _n_e_w___s_t_r_i_n_g, an ampersand (`&') is replaced by _o_l_d___s_t_r_i_n_g. Both 1086 _o_l_d___s_t_r_i_n_g and _n_e_w___s_t_r_i_n_g may contain nested expressions. 1087 1088 Further options: 1089 1090 11 Only the word of the first occurrence is affected. 1091 1092 gg All occurrences in each affected word are replaced. 1093 1094 WW The expression value is treated as a single word. 1095 1096 Any character may be used as the delimiter for the parts of the 1097 modifier string. The anchoring, ampersand, dollar and delimiter 1098 characters can be escaped with a backslash (`\'). 1099 1100 ::CC/_p_a_t_t_e_r_n/_r_e_p_l_a_c_e_m_e_n_t/[11ggWW] 1101 Modifies the first occurrence of the extended regular expression 1102 _p_a_t_t_e_r_n (see regex(3)) in each word of the value, replacing it with 1103 an ed(1)-style _r_e_p_l_a_c_e_m_e_n_t. 1104 1105 Both _p_a_t_t_e_r_n and _r_e_p_l_a_c_e_m_e_n_t may contain nested expressions. 1106 1107 Further options: 1108 1109 11 Only the word of the first occurrence is affected. 1110 1111 gg All occurrences in each affected word are replaced. 1112 1113 WW The expression value is treated as a single word. 1114 1115 Any character may be used as the delimiter for the parts of the 1116 modifier string. The anchoring, ampersand, dollar and delimiter 1117 characters can be escaped with a backslash (`\'). 1118 1119 ::TT Replaces each word with its last path component (basename). 1120 1121 ::uu Removes adjacent duplicate words (like uniq(1)). 1122 1123 ::??_t_r_u_e___s_t_r_i_n_g::_f_a_l_s_e___s_t_r_i_n_g 1124 If the variable name (not its value), when parsed as a ..iiff 1125 conditional expression, evaluates to true, return as its value the 1126 _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 1127 name is used as the expression, :? must be the first modifier after 1128 the variable name itself--which, of course, usually contains 1129 variable expansions. A common error is trying to use expressions 1130 like 1131 ${NUMBERS:M42:?match:no} 1132 which actually tests defined(NUMBERS). To determine if any words 1133 match "42", you need to use something like: 1134 ${"${NUMBERS:M42}" != "":?match:no}. 1135 1136 ::_o_l_d___s_t_r_i_n_g==_n_e_w___s_t_r_i_n_g 1137 This is the AT&T System V UNIX style substitution. It can only be 1138 the last modifier specified, as a `:' in either _o_l_d___s_t_r_i_n_g or 1139 _n_e_w___s_t_r_i_n_g is treated as a regular character, not as the end of the 1140 modifier. 1141 1142 If _o_l_d___s_t_r_i_n_g does not contain the pattern matching character `%', 1143 and the word ends with _o_l_d___s_t_r_i_n_g or equals it, that suffix is 1144 replaced with _n_e_w___s_t_r_i_n_g. 1145 1146 Otherwise, the first `%' in _o_l_d___s_t_r_i_n_g matches a possibly empty 1147 substring of arbitrary characters, and if the whole pattern is found 1148 in the word, the matching part is replaced with _n_e_w___s_t_r_i_n_g, and the 1149 first occurrence of `%' in _n_e_w___s_t_r_i_n_g (if any) is replaced with the 1150 substring matched by the `%'. 1151 1152 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 1153 prevent a dollar sign from starting a nested expression, escape it 1154 with a backslash. 1155 1156 ::@@_v_a_r_n_a_m_e@@_s_t_r_i_n_g@@ 1157 This is the loop expansion mechanism from the OSF Development 1158 Environment (ODE) make. Unlike ..ffoorr loops, expansion occurs at the 1159 time of reference. For each word in the value, assign the word to 1160 the variable named _v_a_r_n_a_m_e and evaluate _s_t_r_i_n_g. The ODE convention 1161 is that _v_a_r_n_a_m_e should start and end with a period, for example: 1162 ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@} 1163 1164 However, a single-letter variable is often more readable: 1165 ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@} 1166 1167 ::__[==_v_a_r] 1168 Saves the current variable value in `$_' or the named _v_a_r for later 1169 reference. Example usage: 1170 1171 M_cmpv.units = 1 1000 1000000 1172 M_cmpv = S,., ,g:_:range:@i@+ $${_:[-$$i]} \ 1173 \* $${M_cmpv.units:[$$i]}@:S,^,expr 0 ,1:sh 1174 1175 .if ${VERSION:${M_cmpv}} < ${3.1.12:L:${M_cmpv}} 1176 1177 Here `$_' is used to save the result of the `:S' modifier which is 1178 later referenced using the index values from `:range'. 1179 1180 ::UU_n_e_w_v_a_l 1181 If the variable is undefined, the optional _n_e_w_v_a_l (which may be 1182 empty) is the value. If the variable is defined, the existing value 1183 is returned. This is another ODE make feature. It is handy for 1184 setting per-target CFLAGS for instance: 1185 ${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}} 1186 If a value is only required if the variable is undefined, use: 1187 ${VAR:D:Unewval} 1188 1189 ::DD_n_e_w_v_a_l 1190 If the variable is defined, _n_e_w_v_a_l (which may be empty) is the 1191 value. 1192 1193 ::LL The name of the variable is the value. 1194 1195 ::PP The path of the node which has the same name as the variable is the 1196 value. If no such node exists or its path is null, the name of the 1197 variable is used. In order for this modifier to work, the name 1198 (node) must at least have appeared on the right-hand side of a 1199 dependency. 1200 1201 ::!!_c_m_d!! 1202 The output of running _c_m_d is the value. 1203 1204 ::sshh The value is run as a command, and the output becomes the new value. 1205 1206 ::sshh11 1207 The value is run as a command, for the first reference only, and the 1208 output is cached for subsequent references. This modifier is useful 1209 when the result is not expected to change. 1210 1211 ::::==_s_t_r 1212 The variable is assigned the value _s_t_r after substitution. This 1213 modifier and its variations are useful in obscure situations such as 1214 wanting to set a variable at a point where a target's shell commands 1215 are being parsed. These assignment modifiers always expand to 1216 nothing. 1217 1218 The `::::' helps avoid false matches with the AT&T System V UNIX style 1219 `:=' modifier and since substitution always occurs, the `::=' form 1220 is vaguely appropriate. 1221 1222 ::::??==_s_t_r 1223 As for ::::== but only if the variable does not already have a value. 1224 1225 ::::++==_s_t_r 1226 Append _s_t_r to the variable. 1227 1228 ::::!!==_c_m_d 1229 Assign the output of _c_m_d to the variable. 1230 1231 ::[[_r_a_n_g_e]] 1232 Selects one or more words from the value, or performs other 1233 operations related to the way in which the value is split into 1234 words. 1235 1236 An empty value, or a value that consists entirely of white-space, is 1237 treated as a single word. For the purposes of the `::[[]]' modifier, 1238 the words are indexed both forwards using positive integers (where 1239 index 1 represents the first word), and backwards using negative 1240 integers (where index -1 represents the last word). 1241 1242 The _r_a_n_g_e is subjected to variable expansion, and the expanded 1243 result is then interpreted as follows: 1244 1245 _i_n_d_e_x Selects a single word from the value. 1246 1247 _s_t_a_r_t...._e_n_d 1248 Selects all words from _s_t_a_r_t to _e_n_d, inclusive. For example, 1249 `::[[22....--11]]' selects all words from the second word to the last 1250 word. If _s_t_a_r_t is greater than _e_n_d, the words are output in 1251 reverse order. For example, `::[[--11....11]]' selects all the words 1252 from last to first. If the list is already ordered, this 1253 effectively reverses the list, but it is more efficient to 1254 use `::OOrr' instead of `::OO::[[--11....11]]'. 1255 1256 ** Causes subsequent modifiers to treat the value as a single 1257 word (possibly containing embedded whitespace). Analogous to 1258 the effect of $* in Bourne shell. 1259 1260 0 Means the same as `::[[**]]'. 1261 1262 @@ Causes subsequent modifiers to treat the value as a sequence 1263 of words delimited by whitespace. Analogous to the effect of 1264 $@ in Bourne shell. 1265 1266 ## Returns the number of words in the value. 1267 1268DDIIRREECCTTIIVVEESS 1269 bbmmaakkee offers directives for including makefiles, conditionals and for 1270 loops. All these directives are identified by a line beginning with a 1271 single dot (`.') character, followed by the keyword of the directive, 1272 such as iinncclluuddee or iiff. 1273 1274 FFiillee iinncclluussiioonn 1275 Files are included with either ..iinncclluuddee <<_f_i_l_e>> or ..iinncclluuddee ""_f_i_l_e"". 1276 Variables between the angle brackets or double quotes are expanded to 1277 form the file name. If angle brackets are used, the included makefile is 1278 expected to be in the system makefile directory. If double quotes are 1279 used, the including makefile's directory and any directories specified 1280 using the --II option are searched before the system makefile directory. 1281 1282 For compatibility with other make variants, `iinncclluuddee _f_i_l_e ...' (without 1283 leading dot) is also accepted. 1284 1285 If the include statement is written as ..--iinncclluuddee or as ..ssiinncclluuddee, errors 1286 locating and/or opening include files are ignored. 1287 1288 If the include statement is written as ..ddiinncclluuddee, not only are errors 1289 locating and/or opening include files ignored, but stale dependencies 1290 within the included file are ignored just like in _._M_A_K_E_._D_E_P_E_N_D_F_I_L_E. 1291 1292 EExxppoorrttiinngg vvaarriiaabblleess 1293 The directives for exporting and unexporting variables are: 1294 1295 ..eexxppoorrtt _v_a_r_i_a_b_l_e ... 1296 Export the specified global variable. 1297 1298 For compatibility with other make programs, eexxppoorrtt _v_a_r_i_a_b_l_e==_v_a_l_u_e 1299 (without leading dot) is also accepted. 1300 1301 Appending a variable name to _._M_A_K_E_._E_X_P_O_R_T_E_D is equivalent to 1302 exporting a variable. 1303 1304 ..eexxppoorrtt--aallll 1305 Export all globals except for internal variables (those that 1306 start with `.'). This is not affected by the --XX flag, so should 1307 be used with caution. 1308 1309 ..eexxppoorrtt--eennvv _v_a_r_i_a_b_l_e ... 1310 The same as `.export', except that the variable is not appended 1311 to _._M_A_K_E_._E_X_P_O_R_T_E_D. This allows exporting a value to the 1312 environment which is different from that used by bbmmaakkee 1313 internally. 1314 1315 ..eexxppoorrtt--lliitteerraall _v_a_r_i_a_b_l_e ... 1316 The same as `.export-env', except that variables in the value are 1317 not expanded. 1318 1319 ..uunneexxppoorrtt _v_a_r_i_a_b_l_e ... 1320 The opposite of `.export'. The specified global _v_a_r_i_a_b_l_e is 1321 removed from _._M_A_K_E_._E_X_P_O_R_T_E_D. If no variable list is provided, 1322 all globals are unexported, and _._M_A_K_E_._E_X_P_O_R_T_E_D deleted. 1323 1324 ..uunneexxppoorrtt--eennvv 1325 Unexport all globals previously exported and clear the 1326 environment inherited from the parent. This operation causes a 1327 memory leak of the original environment, so should be used 1328 sparingly. Testing for _._M_A_K_E_._L_E_V_E_L being 0 would make sense. 1329 Also note that any variables which originated in the parent 1330 environment should be explicitly preserved if desired. For 1331 example: 1332 1333 .if ${.MAKE.LEVEL} == 0 1334 PATH := ${PATH} 1335 .unexport-env 1336 .export PATH 1337 .endif 1338 1339 Would result in an environment containing only `PATH', which is 1340 the minimal useful environment. Actually `_._M_A_K_E_._L_E_V_E_L' is also 1341 pushed into the new environment. 1342 1343 MMeessssaaggeess 1344 The directives for printing messages to the output are: 1345 1346 ..iinnffoo _m_e_s_s_a_g_e 1347 The message is printed along with the name of the makefile and 1348 line number. 1349 1350 ..wwaarrnniinngg _m_e_s_s_a_g_e 1351 The message prefixed by `warning:' is printed along with the name 1352 of the makefile and line number. 1353 1354 ..eerrrroorr _m_e_s_s_a_g_e 1355 The message is printed along with the name of the makefile and 1356 line number, bbmmaakkee exits immediately. 1357 1358 CCoonnddiittiioonnaallss 1359 The directives for conditionals are: 1360 1361 ..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 ...] 1362 Test the value of an expression. 1363 1364 ..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 ...] 1365 Test whether a variable is defined. 1366 1367 ..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 ...] 1368 Test whether a variable is not defined. 1369 1370 ..iiffmmaakkee [!!]_t_a_r_g_e_t [_o_p_e_r_a_t_o_r _t_a_r_g_e_t ...] 1371 Test the target being requested. 1372 1373 ..iiffnnmmaakkee [!!]_t_a_r_g_e_t [_o_p_e_r_a_t_o_r _t_a_r_g_e_t ...] 1374 Test the target being requested. 1375 1376 ..eellssee Reverse the sense of the last conditional. 1377 1378 ..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 ...] 1379 A combination of `..eellssee' followed by `..iiff'. 1380 1381 ..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 ...] 1382 A combination of `..eellssee' followed by `..iiffddeeff'. 1383 1384 ..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 ...] 1385 A combination of `..eellssee' followed by `..iiffnnddeeff'. 1386 1387 ..eelliiffmmaakkee [!!]_t_a_r_g_e_t [_o_p_e_r_a_t_o_r _t_a_r_g_e_t ...] 1388 A combination of `..eellssee' followed by `..iiffmmaakkee'. 1389 1390 ..eelliiffnnmmaakkee [!!]_t_a_r_g_e_t [_o_p_e_r_a_t_o_r _t_a_r_g_e_t ...] 1391 A combination of `..eellssee' followed by `..iiffnnmmaakkee'. 1392 1393 ..eennddiiff End the body of the conditional. 1394 1395 The _o_p_e_r_a_t_o_r may be any one of the following: 1396 1397 |||| Logical OR. 1398 1399 &&&& Logical AND; of higher precedence than `||||'. 1400 1401 bbmmaakkee only evaluates a conditional as far as is necessary to determine 1402 its value. Parentheses can be used to override the operator precedence. 1403 The boolean operator `!!' may be used to logically negate an expression, 1404 typically a function call. It is of higher precedence than `&&&&'. 1405 1406 The value of _e_x_p_r_e_s_s_i_o_n may be any of the following function call 1407 expressions: 1408 1409 ddeeffiinneedd(_v_a_r_n_a_m_e) 1410 Evaluates to true if the variable _v_a_r_n_a_m_e has been defined. 1411 1412 mmaakkee(_t_a_r_g_e_t) 1413 Evaluates to true if the target was specified as part of bbmmaakkee's 1414 command line or was declared the default target (either 1415 implicitly or explicitly, see _._M_A_I_N) before the line containing 1416 the conditional. 1417 1418 eemmppttyy(_v_a_r_n_a_m_e[:_m_o_d_i_f_i_e_r_s]) 1419 Evaluates to true if the expansion of the variable, after 1420 applying the modifiers, results in an empty string. 1421 1422 eexxiissttss(_p_a_t_h_n_a_m_e) 1423 Evaluates to true if the given pathname exists. If relative, the 1424 pathname is searched for on the system search path (see _._P_A_T_H). 1425 1426 ttaarrggeett(_t_a_r_g_e_t) 1427 Evaluates to true if the target has been defined. 1428 1429 ccoommmmaannddss(_t_a_r_g_e_t) 1430 Evaluates to true if the target has been defined and has commands 1431 associated with it. 1432 1433 _E_x_p_r_e_s_s_i_o_n may also be an arithmetic or string comparison. Variable 1434 expansion is performed on both sides of the comparison. If both sides 1435 are numeric and neither is enclosed in quotes, the comparison is done 1436 numerically, otherwise lexicographically. A string is interpreted as a 1437 hexadecimal integer if it is preceded by 0x, otherwise it is interpreted 1438 as a decimal floating-point number; octal numbers are not supported. 1439 1440 All comparisons may use the operators `====' and `!!=='. Numeric comparisons 1441 may also use the operators `<<', `<<==', `>>' and `>>=='. 1442 1443 If the comparison has neither a comparison operator nor a right side, the 1444 expression evaluates to true if it is nonempty and its numeric value (if 1445 any) is not zero. 1446 1447 When bbmmaakkee is evaluating one of these conditional expressions, and it 1448 encounters a (whitespace-separated) word it doesn't recognize, either the 1449 "make" or "defined" function is applied to it, depending on the form of 1450 the conditional. If the form is `..iiffddeeff', `..iiffnnddeeff' or `..iiff', the 1451 "defined" function is applied. Similarly, if the form is `..iiffmmaakkee' or 1452 `..iiffnnmmaakkee', the "make" function is applied. 1453 1454 If the conditional evaluates to true, parsing of the makefile continues 1455 as before. If it evaluates to false, the following lines until the 1456 corresponding `..eelliiff' variant, `..eellssee' or `..eennddiiff' are skipped. 1457 1458 FFoorr llooooppss 1459 For loops are typically used to apply a set of rules to a list of files. 1460 The syntax of a for loop is: 1461 1462 ..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 1463 <_m_a_k_e_-_l_i_n_e_s> 1464 ..eennddffoorr 1465 1466 The _e_x_p_r_e_s_s_i_o_n is expanded and then split into words. On each iteration 1467 of the loop, one word is taken and assigned to each _v_a_r_i_a_b_l_e, in order, 1468 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 1469 of the for loop. The number of words must come out even; that is, if 1470 there are three iteration variables, the number of words provided must be 1471 a multiple of three. 1472 1473 If `..bbrreeaakk' is encountered within a ..ffoorr loop, it causes early 1474 termination of the loop, otherwise a parse error. 1475 1476 OOtthheerr ddiirreeccttiivveess 1477 ..uunnddeeff _v_a_r_i_a_b_l_e ... 1478 Un-define the specified global variables. Only global variables 1479 can be un-defined. 1480 1481CCOOMMMMEENNTTSS 1482 Comments begin with a hash (`#') character, anywhere but in a shell 1483 command line, and continue to the end of an unescaped new line. 1484 1485SSPPEECCIIAALL SSOOUURRCCEESS ((AATTTTRRIIBBUUTTEESS)) 1486 ..EEXXEECC Target is never out of date, but always execute commands 1487 anyway. 1488 1489 ..IIGGNNOORREE Ignore any errors from the commands associated with this 1490 target, exactly as if they all were preceded by a dash (`-'). 1491 1492 ..MMAADDEE Mark all sources of this target as being up to date. 1493 1494 ..MMAAKKEE Execute the commands associated with this target even if the --nn 1495 or --tt options were specified. Normally used to mark recursive 1496 bbmmaakkees. 1497 1498 ..MMEETTAA Create a meta file for the target, even if it is flagged as 1499 ..PPHHOONNYY, ..MMAAKKEE, or ..SSPPEECCIIAALL. Usage in conjunction with ..MMAAKKEE is 1500 the most likely case. In "meta" mode, the target is out-of- 1501 date if the meta file is missing. 1502 1503 ..NNOOMMEETTAA Do not create a meta file for the target. Meta files are also 1504 not created for ..PPHHOONNYY, ..MMAAKKEE, or ..SSPPEECCIIAALL targets. 1505 1506 ..NNOOMMEETTAA__CCMMPP 1507 Ignore differences in commands when deciding if target is out 1508 of date. This is useful if the command contains a value which 1509 always changes. If the number of commands change, though, the 1510 target is still considered out of date. The same effect 1511 applies to any command line that uses the variable _._O_O_D_A_T_E, 1512 which can be used for that purpose even when not otherwise 1513 needed or desired: 1514 1515 1516 skip-compare-for-some: 1517 @echo this is compared 1518 @echo this is not ${.OODATE:M.NOMETA_CMP} 1519 @echo this is also compared 1520 1521 The ::MM pattern suppresses any expansion of the unwanted 1522 variable. 1523 1524 ..NNOOPPAATTHH Do not search for the target in the directories specified by 1525 _._P_A_T_H. 1526 1527 ..NNOOTTMMAAIINN Normally bbmmaakkee selects the first target it encounters as the 1528 default target to be built if no target was specified. This 1529 source prevents this target from being selected. 1530 1531 ..OOPPTTIIOONNAALL 1532 If a target is marked with this attribute and bbmmaakkee can't 1533 figure out how to create it, it ignores this fact and assumes 1534 the file isn't needed or already exists. 1535 1536 ..PPHHOONNYY The target does not correspond to an actual file; it is always 1537 considered to be out of date, and is not created with the --tt 1538 option. Suffix-transformation rules are not applied to ..PPHHOONNYY 1539 targets. 1540 1541 ..PPRREECCIIOOUUSS 1542 When bbmmaakkee is interrupted, it normally removes any partially 1543 made targets. This source prevents the target from being 1544 removed. 1545 1546 ..RREECCUURRSSIIVVEE 1547 Synonym for ..MMAAKKEE. 1548 1549 ..SSIILLEENNTT Do not echo any of the commands associated with this target, 1550 exactly as if they all were preceded by an at sign (`@'). 1551 1552 ..UUSSEE Turn the target into bbmmaakkee's version of a macro. When the 1553 target is used as a source for another target, the other target 1554 acquires the commands, sources, and attributes (except for 1555 ..UUSSEE) of the source. If the target already has commands, the 1556 ..UUSSEE target's commands are appended to them. 1557 1558 ..UUSSEEBBEEFFOORREE 1559 Like ..UUSSEE, but instead of appending, prepend the ..UUSSEEBBEEFFOORREE 1560 target commands to the target. 1561 1562 ..WWAAIITT If ..WWAAIITT appears in a dependency line, the sources that precede 1563 it are made before the sources that succeed it in the line. 1564 Since the dependents of files are not made until the file 1565 itself could be made, this also stops the dependents being 1566 built unless they are needed for another branch of the 1567 dependency tree. So given: 1568 1569 x: a .WAIT b 1570 echo x 1571 a: 1572 echo a 1573 b: b1 1574 echo b 1575 b1: 1576 echo b1 1577 1578 the output is always `a', `b1', `b', `x'. 1579 1580 The ordering imposed by ..WWAAIITT is only relevant for parallel 1581 makes. 1582 1583SSPPEECCIIAALL TTAARRGGEETTSS 1584 Special targets may not be included with other targets, i.e. they must be 1585 the only target specified. 1586 1587 ..BBEEGGIINN Any command lines attached to this target are executed before 1588 anything else is done. 1589 1590 ..DDEEFFAAUULLTT 1591 This is sort of a ..UUSSEE rule for any target (that was used only 1592 as a source) that bbmmaakkee can't figure out any other way to 1593 create. Only the shell script is used. The _._I_M_P_S_R_C variable of 1594 a target that inherits ..DDEEFFAAUULLTT's commands is set to the 1595 target's own name. 1596 1597 ..DDEELLEETTEE__OONN__EERRRROORR 1598 If this target is present in the makefile, it globally causes 1599 make to delete targets whose commands fail. (By default, only 1600 targets whose commands are interrupted during execution are 1601 deleted. This is the historical behavior.) This setting can be 1602 used to help prevent half-finished or malformed targets from 1603 being left around and corrupting future rebuilds. 1604 1605 ..EENNDD Any command lines attached to this target are executed after 1606 everything else is done successfully. 1607 1608 ..EERRRROORR Any command lines attached to this target are executed when 1609 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 1610 variables that will be set. 1611 1612 ..IIGGNNOORREE Mark each of the sources with the ..IIGGNNOORREE attribute. If no 1613 sources are specified, this is the equivalent of specifying the 1614 --ii option. 1615 1616 ..IINNTTEERRRRUUPPTT 1617 If bbmmaakkee is interrupted, the commands for this target are 1618 executed. 1619 1620 ..MMAAIINN If no target is specified when bbmmaakkee is invoked, this target is 1621 built. 1622 1623 ..MMAAKKEEFFLLAAGGSS 1624 This target provides a way to specify flags for bbmmaakkee at the 1625 time when the makefiles are read. The flags are as if typed to 1626 the shell, though the --ff option has no effect. 1627 1628 ..NNOOPPAATTHH Apply the ..NNOOPPAATTHH attribute to any specified sources. 1629 1630 ..NNOOTTPPAARRAALLLLEELL 1631 Disable parallel mode. 1632 1633 ..NNOO__PPAARRAALLLLEELL 1634 Synonym for ..NNOOTTPPAARRAALLLLEELL, for compatibility with other pmake 1635 variants. 1636 1637 ..NNOORREEAADDOONNLLYY 1638 clear the read-only attribute from the global variables 1639 specified as sources. 1640 1641 ..OOBBJJDDIIRR The source is a new value for `_._O_B_J_D_I_R'. If it exists, bbmmaakkee 1642 changes the current working directory to it and updates the 1643 value of `_._O_B_J_D_I_R'. 1644 1645 ..OORRDDEERR In parallel mode, the named targets are made in sequence. This 1646 ordering does not add targets to the list of targets to be made. 1647 1648 Since the dependents of a target do not get built until the 1649 target itself could be built, unless `a' is built by another 1650 part of the dependency graph, the following is a dependency 1651 loop: 1652 1653 .ORDER: b a 1654 b: a 1655 1656 ..PPAATTHH The sources are directories which are to be searched for files 1657 not found in the current directory. If no sources are 1658 specified, any previously specified directories are removed from 1659 the search path. If the source is the special ..DDOOTTLLAASSTT target, 1660 the current working directory is searched last. 1661 1662 ..PPAATTHH.._s_u_f_f_i_x 1663 Like ..PPAATTHH but applies only to files with a particular suffix. 1664 The suffix must have been previously declared with ..SSUUFFFFIIXXEESS. 1665 1666 ..PPHHOONNYY Apply the ..PPHHOONNYY attribute to any specified sources. 1667 1668 ..PPOOSSIIXX If this is the first non-comment line in the main makefile, the 1669 variable _%_P_O_S_I_X is set to the value `1003.2' and the makefile 1670 `<posix.mk>' is included if it exists, to provide POSIX- 1671 compatible default rules. If bbmmaakkee is run with the --rr flag, 1672 only `posix.mk' contributes to the default rules. In POSIX- 1673 compatible mode, the AT&T System V UNIX style substitution 1674 modifier is checked first rather than as a fallback. 1675 1676 ..PPRREECCIIOOUUSS 1677 Apply the ..PPRREECCIIOOUUSS attribute to any specified sources. If no 1678 sources are specified, the ..PPRREECCIIOOUUSS attribute is applied to 1679 every target in the file. 1680 1681 ..RREEAADDOONNLLYY 1682 set the read-only attribute on the global variables specified as 1683 sources. 1684 1685 ..SSHHEELLLL Sets the shell that bbmmaakkee uses to execute commands. The sources 1686 are a set of _f_i_e_l_d==_v_a_l_u_e pairs. 1687 1688 name This is the minimal specification, used to select 1689 one of the built-in shell specs; sh, ksh, and csh. 1690 1691 path Specifies the absolute path to the shell. 1692 1693 hasErrCtl Indicates whether the shell supports exit on error. 1694 1695 check The command to turn on error checking. 1696 1697 ignore The command to disable error checking. 1698 1699 echo The command to turn on echoing of commands executed. 1700 1701 quiet The command to turn off echoing of commands 1702 executed. 1703 1704 filter The output to filter after issuing the quiet 1705 command. It is typically identical to quiet. 1706 1707 errFlag The flag to pass the shell to enable error checking. 1708 1709 echoFlag The flag to pass the shell to enable command 1710 echoing. 1711 1712 newline The string literal to pass the shell that results in 1713 a single newline character when used outside of any 1714 quoting characters. 1715 Example: 1716 1717 .SHELL: name=ksh path=/bin/ksh hasErrCtl=true \ 1718 check="set -e" ignore="set +e" \ 1719 echo="set -v" quiet="set +v" filter="set +v" \ 1720 echoFlag=v errFlag=e newline="'\n'" 1721 1722 ..SSIILLEENNTT Apply the ..SSIILLEENNTT attribute to any specified sources. If no 1723 sources are specified, the ..SSIILLEENNTT attribute is applied to every 1724 command in the file. 1725 1726 ..SSTTAALLEE This target gets run when a dependency file contains stale 1727 entries, having _._A_L_L_S_R_C set to the name of that dependency file. 1728 1729 ..SSUUFFFFIIXXEESS 1730 Each source specifies a suffix to bbmmaakkee. If no sources are 1731 specified, any previously specified suffixes are deleted. It 1732 allows the creation of suffix-transformation rules. 1733 1734 Example: 1735 1736 .SUFFIXES: .c .o 1737 .c.o: 1738 cc -o ${.TARGET} -c ${.IMPSRC} 1739 1740 ..SSYYSSPPAATTHH 1741 The sources are directories which are to be added to the system 1742 include path which bbmmaakkee searches for makefiles. If no sources 1743 are specified, any previously specified directories are removed 1744 from the system include path. 1745 1746EENNVVIIRROONNMMEENNTT 1747 bbmmaakkee uses the following environment variables, if they exist: MACHINE, 1748 MACHINE_ARCH, MAKE, MAKEFLAGS, MAKEOBJDIR, MAKEOBJDIRPREFIX, MAKESYSPATH, 1749 MAKE_STACK_TRACE, PWD, and TMPDIR. 1750 1751 MAKEOBJDIRPREFIX and MAKEOBJDIR should be set in the environment or on 1752 the command line to bbmmaakkee and not as makefile variables; see the 1753 description of `_._O_B_J_D_I_R' for more details. It is possible to set these 1754 via makefile variables but unless done very early and the `..OOBBJJDDIIRR' 1755 target is used to reset `_._O_B_J_D_I_R', there may be unexpected side effects. 1756 1757 If the MAKE_STACK_TRACE environment variable is set to "yes", any stack 1758 traces include the call chain of the parent processes. 1759 1760FFIILLEESS 1761 .depend list of dependencies 1762 makefile first default makefile if no makefile is specified on the 1763 command line 1764 Makefile second default makefile if no makefile is specified on the 1765 command line 1766 sys.mk system makefile 1767 /usr/share/mk system makefile directory 1768 1769DDIIAAGGNNOOSSTTIICCSS 1770 Invalid internal option "-J" in "_d_i_r_e_c_t_o_r_y" 1771 The internal --JJ option coordinates the main bbmmaakkee process with 1772 the sub-make processes to limit the number of jobs that run in 1773 parallel. The option is passed to all child processes via the 1774 MAKEFLAGS environment variable. To become valid, this option 1775 requires that the target running the sub-make is marked with the 1776 .MAKE special source, or that one of the target's commands 1777 directly contains the word "make" or one of the expressions 1778 "${MAKE}", "${.MAKE}", "$(MAKE)", "$(.MAKE)". If that's not the 1779 case, make issues the above warning and falls back to compat 1780 mode. 1781 1782 To see the chain of sub-makes that leads to the invalid option, 1783 set the MAKE_STACK_TRACE environment variable to "yes". 1784 1785 To run the sub-make in parallel mode, even in dry-run mode (see 1786 the --nn option), add the .MAKE pseudo source to the target. This 1787 is appropriate when the sub-make runs the same target in a 1788 subdirectory. 1789 1790 To run the sub-make in parallel mode but not in dry-mode, add a 1791 "${:D make}" marker to one of the target's commands. This marker 1792 expands to an empty string and thus does not affect the executed 1793 commands. 1794 1795 To run the sub-make in compat mode, add the --BB option to its 1796 invocation. This is appropriate when the sub-make is only used 1797 to print a variable's value using the --vv or --VV options. 1798 1799 To make the sub-make independent from the parent make, unset the 1800 MAKEFLAGS environment variable in the target's commands. 1801 1802CCOOMMPPAATTIIBBIILLIITTYY 1803 The basic make syntax is compatible between different make variants; 1804 however the special variables, variable modifiers and conditionals are 1805 not. 1806 1807 OOllddeerr vveerrssiioonnss 1808 An incomplete list of changes in older versions of bbmmaakkee: 1809 1810 The way that .for loop variables are substituted changed after NetBSD 5.0 1811 so that they still appear to be variable expansions. In particular this 1812 stops them being treated as syntax, and removes some obscure problems 1813 using them in .if statements. 1814 1815 The way that parallel makes are scheduled changed in NetBSD 4.0 so that 1816 .ORDER and .WAIT apply recursively to the dependent nodes. The 1817 algorithms used may change again in the future. 1818 1819 OOtthheerr mmaakkee ddiiaalleeccttss 1820 Other make dialects (GNU make, SVR4 make, POSIX make, etc.) do not 1821 support most of the features of bbmmaakkee as described in this manual. Most 1822 notably: 1823 1824 ++oo The ..WWAAIITT and ..OORRDDEERR declarations and most functionality 1825 pertaining to parallelization. (GNU make supports 1826 parallelization but lacks the features needed to control it 1827 effectively.) 1828 1829 ++oo Directives, including for loops and conditionals and most of 1830 the forms of include files. (GNU make has its own incompatible 1831 and less powerful syntax for conditionals.) 1832 1833 ++oo All built-in variables that begin with a dot. 1834 1835 ++oo Most of the special sources and targets that begin with a dot, 1836 with the notable exception of ..PPHHOONNYY, ..PPRREECCIIOOUUSS, and ..SSUUFFFFIIXXEESS. 1837 1838 ++oo Variable modifiers, except for the `:old=new' string 1839 substitution, which does not portably support globbing with `%' 1840 and historically only works on declared suffixes. 1841 1842 ++oo The $$>> variable even in its short form; most makes support this 1843 functionality but its name varies. 1844 1845 Some features are somewhat more portable, such as assignment with ++==, ??==, 1846 and !!==. The _._P_A_T_H functionality is based on an older feature VVPPAATTHH found 1847 in GNU make and many versions of SVR4 make; however, historically its 1848 behavior is too ill-defined (and too buggy) to rely upon. 1849 1850 The $$@@ and $$<< variables are more or less universally portable, as is the 1851 $$((MMAAKKEE)) variable. Basic use of suffix rules (for files only in the 1852 current directory, not trying to chain transformations together, etc.) is 1853 also reasonably portable. 1854 1855SSEEEE AALLSSOO 1856 mkdep(1) 1857 1858HHIISSTTOORRYY 1859 bbmmaakkee is derived from NetBSD make(1). It uses autoconf to facilitate 1860 portability to other platforms. 1861 1862 A make command appeared in Version 7 AT&T UNIX. This make implementation 1863 is based on Adam de Boor's pmake program, which was written for Sprite at 1864 Berkeley. It was designed to be a parallel distributed make running jobs 1865 on different machines using a daemon called "customs". 1866 1867 Historically the target/dependency FFRRCC has been used to FoRCe rebuilding 1868 (since the target/dependency does not exist ... unless someone creates an 1869 _F_R_C file). 1870 1871BBUUGGSS 1872 The bbmmaakkee syntax is difficult to parse. For instance, finding the end of 1873 a variable's use should involve scanning each of the modifiers, using the 1874 correct terminator for each field. In many places bbmmaakkee just counts {} 1875 and () in order to find the end of a variable expansion. 1876 1877 There is no way of escaping a space character in a filename. 1878 1879 In jobs mode, when a target fails; bbmmaakkee will put an error token into the 1880 job token pool. This will cause all other instances of bbmmaakkee using that 1881 token pool to abort the build and exit with error code 6. Sometimes the 1882 attempt to suppress a cascade of unnecessary errors, can result in a 1883 seemingly unexplained `*** Error code 6' 1884 1885FreeBSD 14.3-RELEASE-p9 May 8, 2026 FreeBSD 14.3-RELEASE-p9 1886