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