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 510 as `_>'. 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 516 (the "implied" source); also known as `_<'. It is not 517 defined 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 522 out-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 ::ttuu Converts the value to upper-case letters. 1025 1026 ::ttWW Causes subsequent modifiers to treat the value as a single word 1027 (possibly containing embedded whitespace). See also `::[[**]]'. 1028 1029 ::ttww Causes the value to be treated as a list of words. See also `::[[@@]]'. 1030 1031 ::SS/_o_l_d___s_t_r_i_n_g/_n_e_w___s_t_r_i_n_g/[11ggWW] 1032 Modifies the first occurrence of _o_l_d___s_t_r_i_n_g in each word of the 1033 value, replacing it with _n_e_w___s_t_r_i_n_g. If a `g' is appended to the 1034 last delimiter of the pattern, all occurrences in each word are 1035 replaced. If a `1' is appended to the last delimiter of the 1036 pattern, only the first occurrence is affected. If a `W' is 1037 appended to the last delimiter of the pattern, the value is treated 1038 as a single word. If _o_l_d___s_t_r_i_n_g begins with a caret (`^'), 1039 _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 1040 ends with a dollar sign (`$'), it is anchored at the end of each 1041 word. Inside _n_e_w___s_t_r_i_n_g, an ampersand (`&') is replaced by 1042 _o_l_d___s_t_r_i_n_g (without the anchoring `^' or `$'). Any character may be 1043 used as the delimiter for the parts of the modifier string. The 1044 anchoring, ampersand and delimiter characters can be escaped with a 1045 backslash (`\'). 1046 1047 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 1048 prevent a dollar sign from starting a nested expression, escape it 1049 with a backslash. 1050 1051 ::CC/_p_a_t_t_e_r_n/_r_e_p_l_a_c_e_m_e_n_t/[11ggWW] 1052 The ::CC modifier works like the ::SS modifier except that the old and 1053 new strings, instead of being simple strings, are an extended 1054 regular expression _p_a_t_t_e_r_n (see regex(3)) and an ed(1)-style 1055 _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 1056 in each word of the value is substituted with _r_e_p_l_a_c_e_m_e_n_t. The `1' 1057 modifier causes the substitution to apply to at most one word; the 1058 `g' modifier causes the substitution to apply to as many instances 1059 of the search pattern _p_a_t_t_e_r_n as occur in the word or words it is 1060 found in; the `W' modifier causes the value to be treated as a 1061 single word (possibly containing embedded whitespace). 1062 1063 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 1064 variable expansion before being parsed as regular expressions. 1065 1066 ::TT Replaces each word with its last path component (basename). 1067 1068 ::uu Removes adjacent duplicate words (like uniq(1)). 1069 1070 ::??_t_r_u_e___s_t_r_i_n_g::_f_a_l_s_e___s_t_r_i_n_g 1071 If the variable name (not its value), when parsed as a ..iiff 1072 conditional expression, evaluates to true, return as its value the 1073 _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 1074 name is used as the expression, :? must be the first modifier after 1075 the variable name itself--which, of course, usually contains 1076 variable expansions. A common error is trying to use expressions 1077 like 1078 ${NUMBERS:M42:?match:no} 1079 which actually tests defined(NUMBERS). To determine if any words 1080 match "42", you need to use something like: 1081 ${"${NUMBERS:M42}" != "":?match:no}. 1082 1083 ::_o_l_d___s_t_r_i_n_g==_n_e_w___s_t_r_i_n_g 1084 This is the AT&T System V UNIX style substitution. It can only be 1085 the last modifier specified, as a `:' in either _o_l_d___s_t_r_i_n_g or 1086 _n_e_w___s_t_r_i_n_g is treated as a regular character, not as the end of the 1087 modifier. 1088 1089 If _o_l_d___s_t_r_i_n_g does not contain the pattern matching character `%', 1090 and the word ends with _o_l_d___s_t_r_i_n_g or equals it, that suffix is 1091 replaced with _n_e_w___s_t_r_i_n_g. 1092 1093 Otherwise, the first `%' in _o_l_d___s_t_r_i_n_g matches a possibly empty 1094 substring of arbitrary characters, and if the whole pattern is found 1095 in the word, the matching part is replaced with _n_e_w___s_t_r_i_n_g, and the 1096 first occurrence of `%' in _n_e_w___s_t_r_i_n_g (if any) is replaced with the 1097 substring matched by the `%'. 1098 1099 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 1100 prevent a dollar sign from starting a nested expression, escape it 1101 with a backslash. 1102 1103 ::@@_v_a_r_n_a_m_e@@_s_t_r_i_n_g@@ 1104 This is the loop expansion mechanism from the OSF Development 1105 Environment (ODE) make. Unlike ..ffoorr loops, expansion occurs at the 1106 time of reference. For each word in the value, assign the word to 1107 the variable named _v_a_r_n_a_m_e and evaluate _s_t_r_i_n_g. The ODE convention 1108 is that _v_a_r_n_a_m_e should start and end with a period, for example: 1109 ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@} 1110 1111 However, a single-letter variable is often more readable: 1112 ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@} 1113 1114 ::__[==_v_a_r] 1115 Saves the current variable value in `$_' or the named _v_a_r for later 1116 reference. Example usage: 1117 1118 M_cmpv.units = 1 1000 1000000 1119 M_cmpv = S,., ,g:_:range:@i@+ $${_:[-$$i]} \ 1120 \* $${M_cmpv.units:[$$i]}@:S,^,expr 0 ,1:sh 1121 1122 .if ${VERSION:${M_cmpv}} < ${3.1.12:L:${M_cmpv}} 1123 1124 Here `$_' is used to save the result of the `:S' modifier which is 1125 later referenced using the index values from `:range'. 1126 1127 ::UU_n_e_w_v_a_l 1128 If the variable is undefined, the optional _n_e_w_v_a_l (which may be 1129 empty) is the value. If the variable is defined, the existing value 1130 is returned. This is another ODE make feature. It is handy for 1131 setting per-target CFLAGS for instance: 1132 ${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}} 1133 If a value is only required if the variable is undefined, use: 1134 ${VAR:D:Unewval} 1135 1136 ::DD_n_e_w_v_a_l 1137 If the variable is defined, _n_e_w_v_a_l (which may be empty) is the 1138 value. 1139 1140 ::LL The name of the variable is the value. 1141 1142 ::PP The path of the node which has the same name as the variable is the 1143 value. If no such node exists or its path is null, the name of the 1144 variable is used. In order for this modifier to work, the name 1145 (node) must at least have appeared on the right-hand side of a 1146 dependency. 1147 1148 ::!!_c_m_d!! 1149 The output of running _c_m_d is the value. 1150 1151 ::sshh The value is run as a command, and the output becomes the new value. 1152 1153 ::::==_s_t_r 1154 The variable is assigned the value _s_t_r after substitution. This 1155 modifier and its variations are useful in obscure situations such as 1156 wanting to set a variable at a point where a target's shell commands 1157 are being parsed. These assignment modifiers always expand to 1158 nothing. 1159 1160 The `::::' helps avoid false matches with the AT&T System V UNIX style 1161 `:=' modifier and since substitution always occurs, the `::=' form 1162 is vaguely appropriate. 1163 1164 ::::??==_s_t_r 1165 As for ::::== but only if the variable does not already have a value. 1166 1167 ::::++==_s_t_r 1168 Append _s_t_r to the variable. 1169 1170 ::::!!==_c_m_d 1171 Assign the output of _c_m_d to the variable. 1172 1173 ::[[_r_a_n_g_e]] 1174 Selects one or more words from the value, or performs other 1175 operations related to the way in which the value is split into 1176 words. 1177 1178 An empty value, or a value that consists entirely of white-space, is 1179 treated as a single word. For the purposes of the `::[[]]' modifier, 1180 the words are indexed both forwards using positive integers (where 1181 index 1 represents the first word), and backwards using negative 1182 integers (where index -1 represents the last word). 1183 1184 The _r_a_n_g_e is subjected to variable expansion, and the expanded 1185 result is then interpreted as follows: 1186 1187 _i_n_d_e_x Selects a single word from the value. 1188 1189 _s_t_a_r_t...._e_n_d 1190 Selects all words from _s_t_a_r_t to _e_n_d, inclusive. For example, 1191 `::[[22....--11]]' selects all words from the second word to the last 1192 word. If _s_t_a_r_t is greater than _e_n_d, the words are output in 1193 reverse order. For example, `::[[--11....11]]' selects all the words 1194 from last to first. If the list is already ordered, this 1195 effectively reverses the list, but it is more efficient to 1196 use `::OOrr' instead of `::OO::[[--11....11]]'. 1197 1198 ** Causes subsequent modifiers to treat the value as a single 1199 word (possibly containing embedded whitespace). Analogous to 1200 the effect of $* in Bourne shell. 1201 1202 0 Means the same as `::[[**]]'. 1203 1204 @@ Causes subsequent modifiers to treat the value as a sequence 1205 of words delimited by whitespace. Analogous to the effect of 1206 $@ in Bourne shell. 1207 1208 ## Returns the number of words in the value. 1209 1210DDIIRREECCTTIIVVEESS 1211 bbmmaakkee offers directives for including makefiles, conditionals and for 1212 loops. All these directives are identified by a line beginning with a 1213 single dot (`.') character, followed by the keyword of the directive, 1214 such as iinncclluuddee or iiff. 1215 1216 FFiillee iinncclluussiioonn 1217 Files are included with either ..iinncclluuddee <<_f_i_l_e>> or ..iinncclluuddee ""_f_i_l_e"". 1218 Variables between the angle brackets or double quotes are expanded to 1219 form the file name. If angle brackets are used, the included makefile is 1220 expected to be in the system makefile directory. If double quotes are 1221 used, the including makefile's directory and any directories specified 1222 using the --II option are searched before the system makefile directory. 1223 1224 For compatibility with other make variants, `iinncclluuddee _f_i_l_e ...' (without 1225 leading dot) is also accepted. 1226 1227 If the include statement is written as ..--iinncclluuddee or as ..ssiinncclluuddee, errors 1228 locating and/or opening include files are ignored. 1229 1230 If the include statement is written as ..ddiinncclluuddee, not only are errors 1231 locating and/or opening include files ignored, but stale dependencies 1232 within the included file are ignored just like in _._M_A_K_E_._D_E_P_E_N_D_F_I_L_E. 1233 1234 EExxppoorrttiinngg vvaarriiaabblleess 1235 The directives for exporting and unexporting variables are: 1236 1237 ..eexxppoorrtt _v_a_r_i_a_b_l_e ... 1238 Export the specified global variable. 1239 1240 For compatibility with other make programs, eexxppoorrtt _v_a_r_i_a_b_l_e==_v_a_l_u_e 1241 (without leading dot) is also accepted. 1242 1243 Appending a variable name to _._M_A_K_E_._E_X_P_O_R_T_E_D is equivalent to 1244 exporting a variable. 1245 1246 ..eexxppoorrtt--aallll 1247 Export all globals except for internal variables (those that 1248 start with `.'). This is not affected by the --XX flag, so should 1249 be used with caution. 1250 1251 ..eexxppoorrtt--eennvv _v_a_r_i_a_b_l_e ... 1252 The same as `.export', except that the variable is not appended 1253 to _._M_A_K_E_._E_X_P_O_R_T_E_D. This allows exporting a value to the 1254 environment which is different from that used by bbmmaakkee 1255 internally. 1256 1257 ..eexxppoorrtt--lliitteerraall _v_a_r_i_a_b_l_e ... 1258 The same as `.export-env', except that variables in the value are 1259 not expanded. 1260 1261 ..uunneexxppoorrtt _v_a_r_i_a_b_l_e ... 1262 The opposite of `.export'. The specified global _v_a_r_i_a_b_l_e is 1263 removed from _._M_A_K_E_._E_X_P_O_R_T_E_D. If no variable list is provided, 1264 all globals are unexported, and _._M_A_K_E_._E_X_P_O_R_T_E_D deleted. 1265 1266 ..uunneexxppoorrtt--eennvv 1267 Unexport all globals previously exported and clear the 1268 environment inherited from the parent. This operation causes a 1269 memory leak of the original environment, so should be used 1270 sparingly. Testing for _._M_A_K_E_._L_E_V_E_L being 0 would make sense. 1271 Also note that any variables which originated in the parent 1272 environment should be explicitly preserved if desired. For 1273 example: 1274 1275 .if ${.MAKE.LEVEL} == 0 1276 PATH := ${PATH} 1277 .unexport-env 1278 .export PATH 1279 .endif 1280 1281 Would result in an environment containing only `PATH', which is 1282 the minimal useful environment. Actually `_._M_A_K_E_._L_E_V_E_L' is also 1283 pushed into the new environment. 1284 1285 MMeessssaaggeess 1286 The directives for printing messages to the output are: 1287 1288 ..iinnffoo _m_e_s_s_a_g_e 1289 The message is printed along with the name of the makefile and 1290 line number. 1291 1292 ..wwaarrnniinngg _m_e_s_s_a_g_e 1293 The message prefixed by `warning:' is printed along with the name 1294 of the makefile and line number. 1295 1296 ..eerrrroorr _m_e_s_s_a_g_e 1297 The message is printed along with the name of the makefile and 1298 line number, bbmmaakkee exits immediately. 1299 1300 CCoonnddiittiioonnaallss 1301 The directives for conditionals are: 1302 1303 ..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 ...] 1304 Test the value of an expression. 1305 1306 ..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 ...] 1307 Test whether a variable is defined. 1308 1309 ..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 ...] 1310 Test whether a variable is not defined. 1311 1312 ..iiffmmaakkee [!!]_t_a_r_g_e_t [_o_p_e_r_a_t_o_r _t_a_r_g_e_t ...] 1313 Test the target being requested. 1314 1315 ..iiffnnmmaakkee [!!]_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 ..eellssee Reverse the sense of the last conditional. 1319 1320 ..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 ...] 1321 A combination of `..eellssee' followed by `..iiff'. 1322 1323 ..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 ...] 1324 A combination of `..eellssee' followed by `..iiffddeeff'. 1325 1326 ..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 ...] 1327 A combination of `..eellssee' followed by `..iiffnnddeeff'. 1328 1329 ..eelliiffmmaakkee [!!]_t_a_r_g_e_t [_o_p_e_r_a_t_o_r _t_a_r_g_e_t ...] 1330 A combination of `..eellssee' followed by `..iiffmmaakkee'. 1331 1332 ..eelliiffnnmmaakkee [!!]_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 `..iiffnnmmaakkee'. 1334 1335 ..eennddiiff End the body of the conditional. 1336 1337 The _o_p_e_r_a_t_o_r may be any one of the following: 1338 1339 |||| Logical OR. 1340 1341 &&&& Logical AND; of higher precedence than `||||'. 1342 1343 bbmmaakkee only evaluates a conditional as far as is necessary to determine 1344 its value. Parentheses can be used to override the operator precedence. 1345 The boolean operator `!!' may be used to logically negate an expression, 1346 typically a function call. It is of higher precedence than `&&&&'. 1347 1348 The value of _e_x_p_r_e_s_s_i_o_n may be any of the following function call 1349 expressions: 1350 1351 ddeeffiinneedd(_v_a_r_n_a_m_e) 1352 Evaluates to true if the variable _v_a_r_n_a_m_e has been defined. 1353 1354 mmaakkee(_t_a_r_g_e_t) 1355 Evaluates to true if the target was specified as part of bbmmaakkee's 1356 command line or was declared the default target (either 1357 implicitly or explicitly, see _._M_A_I_N) before the line containing 1358 the conditional. 1359 1360 eemmppttyy(_v_a_r_n_a_m_e[:_m_o_d_i_f_i_e_r_s]) 1361 Evaluates to true if the expansion of the variable, after 1362 applying the modifiers, results in an empty string. 1363 1364 eexxiissttss(_p_a_t_h_n_a_m_e) 1365 Evaluates to true if the given pathname exists. If relative, the 1366 pathname is searched for on the system search path (see _._P_A_T_H). 1367 1368 ttaarrggeett(_t_a_r_g_e_t) 1369 Evaluates to true if the target has been defined. 1370 1371 ccoommmmaannddss(_t_a_r_g_e_t) 1372 Evaluates to true if the target has been defined and has commands 1373 associated with it. 1374 1375 _E_x_p_r_e_s_s_i_o_n may also be an arithmetic or string comparison. Variable 1376 expansion is performed on both sides of the comparison. If both sides 1377 are numeric and neither is enclosed in quotes, the comparison is done 1378 numerically, otherwise lexicographically. A string is interpreted as a 1379 hexadecimal integer if it is preceded by 0x, otherwise it is interpreted 1380 as a decimal floating-point number; octal numbers are not supported. 1381 1382 All comparisons may use the operators `====' and `!!=='. Numeric comparisons 1383 may also use the operators `<<', `<<==', `>>' and `>>=='. 1384 1385 If the comparison has neither a comparison operator nor a right side, the 1386 expression evaluates to true if it is nonempty and its numeric value (if 1387 any) is not zero. 1388 1389 When bbmmaakkee is evaluating one of these conditional expressions, and it 1390 encounters a (whitespace-separated) word it doesn't recognize, either the 1391 "make" or "defined" function is applied to it, depending on the form of 1392 the conditional. If the form is `..iiffddeeff', `..iiffnnddeeff' or `..iiff', the 1393 "defined" function is applied. Similarly, if the form is `..iiffmmaakkee' or 1394 `..iiffnnmmaakkee', the "make" function is applied. 1395 1396 If the conditional evaluates to true, parsing of the makefile continues 1397 as before. If it evaluates to false, the following lines until the 1398 corresponding `..eelliiff' variant, `..eellssee' or `..eennddiiff' are skipped. 1399 1400 FFoorr llooooppss 1401 For loops are typically used to apply a set of rules to a list of files. 1402 The syntax of a for loop is: 1403 1404 ..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 1405 <_m_a_k_e_-_l_i_n_e_s> 1406 ..eennddffoorr 1407 1408 The _e_x_p_r_e_s_s_i_o_n is expanded and then split into words. On each iteration 1409 of the loop, one word is taken and assigned to each _v_a_r_i_a_b_l_e, in order, 1410 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 1411 of the for loop. The number of words must come out even; that is, if 1412 there are three iteration variables, the number of words provided must be 1413 a multiple of three. 1414 1415 If `..bbrreeaakk' is encountered within a ..ffoorr loop, it causes early 1416 termination of the loop, otherwise a parse error. 1417 1418 OOtthheerr ddiirreeccttiivveess 1419 ..uunnddeeff _v_a_r_i_a_b_l_e ... 1420 Un-define the specified global variables. Only global variables 1421 can be un-defined. 1422 1423CCOOMMMMEENNTTSS 1424 Comments begin with a hash (`#') character, anywhere but in a shell 1425 command line, and continue to the end of an unescaped new line. 1426 1427SSPPEECCIIAALL SSOOUURRCCEESS ((AATTTTRRIIBBUUTTEESS)) 1428 ..EEXXEECC Target is never out of date, but always execute commands 1429 anyway. 1430 1431 ..IIGGNNOORREE Ignore any errors from the commands associated with this 1432 target, exactly as if they all were preceded by a dash (`-'). 1433 1434 ..MMAADDEE Mark all sources of this target as being up to date. 1435 1436 ..MMAAKKEE Execute the commands associated with this target even if the --nn 1437 or --tt options were specified. Normally used to mark recursive 1438 bbmmaakkees. 1439 1440 ..MMEETTAA Create a meta file for the target, even if it is flagged as 1441 ..PPHHOONNYY, ..MMAAKKEE, or ..SSPPEECCIIAALL. Usage in conjunction with ..MMAAKKEE is 1442 the most likely case. In "meta" mode, the target is out-of- 1443 date if the meta file is missing. 1444 1445 ..NNOOMMEETTAA Do not create a meta file for the target. Meta files are also 1446 not created for ..PPHHOONNYY, ..MMAAKKEE, or ..SSPPEECCIIAALL targets. 1447 1448 ..NNOOMMEETTAA__CCMMPP 1449 Ignore differences in commands when deciding if target is out 1450 of date. This is useful if the command contains a value which 1451 always changes. If the number of commands change, though, the 1452 target is still considered out of date. The same effect 1453 applies to any command line that uses the variable _._O_O_D_A_T_E, 1454 which can be used for that purpose even when not otherwise 1455 needed or desired: 1456 1457 1458 skip-compare-for-some: 1459 @echo this is compared 1460 @echo this is not ${.OODATE:M.NOMETA_CMP} 1461 @echo this is also compared 1462 1463 The ::MM pattern suppresses any expansion of the unwanted 1464 variable. 1465 1466 ..NNOOPPAATTHH Do not search for the target in the directories specified by 1467 _._P_A_T_H. 1468 1469 ..NNOOTTMMAAIINN Normally bbmmaakkee selects the first target it encounters as the 1470 default target to be built if no target was specified. This 1471 source prevents this target from being selected. 1472 1473 ..OOPPTTIIOONNAALL 1474 If a target is marked with this attribute and bbmmaakkee can't 1475 figure out how to create it, it ignores this fact and assumes 1476 the file isn't needed or already exists. 1477 1478 ..PPHHOONNYY The target does not correspond to an actual file; it is always 1479 considered to be out of date, and is not created with the --tt 1480 option. Suffix-transformation rules are not applied to ..PPHHOONNYY 1481 targets. 1482 1483 ..PPRREECCIIOOUUSS 1484 When bbmmaakkee is interrupted, it normally removes any partially 1485 made targets. This source prevents the target from being 1486 removed. 1487 1488 ..RREECCUURRSSIIVVEE 1489 Synonym for ..MMAAKKEE. 1490 1491 ..SSIILLEENNTT Do not echo any of the commands associated with this target, 1492 exactly as if they all were preceded by an at sign (`@'). 1493 1494 ..UUSSEE Turn the target into bbmmaakkee's version of a macro. When the 1495 target is used as a source for another target, the other target 1496 acquires the commands, sources, and attributes (except for 1497 ..UUSSEE) of the source. If the target already has commands, the 1498 ..UUSSEE target's commands are appended to them. 1499 1500 ..UUSSEEBBEEFFOORREE 1501 Like ..UUSSEE, but instead of appending, prepend the ..UUSSEEBBEEFFOORREE 1502 target commands to the target. 1503 1504 ..WWAAIITT If ..WWAAIITT appears in a dependency line, the sources that precede 1505 it are made before the sources that succeed it in the line. 1506 Since the dependents of files are not made until the file 1507 itself could be made, this also stops the dependents being 1508 built unless they are needed for another branch of the 1509 dependency tree. So given: 1510 1511 x: a .WAIT b 1512 echo x 1513 a: 1514 echo a 1515 b: b1 1516 echo b 1517 b1: 1518 echo b1 1519 1520 the output is always `a', `b1', `b', `x'. 1521 1522 The ordering imposed by ..WWAAIITT is only relevant for parallel 1523 makes. 1524 1525SSPPEECCIIAALL TTAARRGGEETTSS 1526 Special targets may not be included with other targets, i.e. they must be 1527 the only target specified. 1528 1529 ..BBEEGGIINN Any command lines attached to this target are executed before 1530 anything else is done. 1531 1532 ..DDEEFFAAUULLTT 1533 This is sort of a ..UUSSEE rule for any target (that was used only 1534 as a source) that bbmmaakkee can't figure out any other way to 1535 create. Only the shell script is used. The _._I_M_P_S_R_C variable of 1536 a target that inherits ..DDEEFFAAUULLTT's commands is set to the 1537 target's own name. 1538 1539 ..DDEELLEETTEE__OONN__EERRRROORR 1540 If this target is present in the makefile, it globally causes 1541 make to delete targets whose commands fail. (By default, only 1542 targets whose commands are interrupted during execution are 1543 deleted. This is the historical behavior.) This setting can be 1544 used to help prevent half-finished or malformed targets from 1545 being left around and corrupting future rebuilds. 1546 1547 ..EENNDD Any command lines attached to this target are executed after 1548 everything else is done successfully. 1549 1550 ..EERRRROORR Any command lines attached to this target are executed when 1551 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 1552 variables that will be set. 1553 1554 ..IIGGNNOORREE Mark each of the sources with the ..IIGGNNOORREE attribute. If no 1555 sources are specified, this is the equivalent of specifying the 1556 --ii option. 1557 1558 ..IINNTTEERRRRUUPPTT 1559 If bbmmaakkee is interrupted, the commands for this target are 1560 executed. 1561 1562 ..MMAAIINN If no target is specified when bbmmaakkee is invoked, this target is 1563 built. 1564 1565 ..MMAAKKEEFFLLAAGGSS 1566 This target provides a way to specify flags for bbmmaakkee at the 1567 time when the makefiles are read. The flags are as if typed to 1568 the shell, though the --ff option has no effect. 1569 1570 ..NNOOPPAATTHH Apply the ..NNOOPPAATTHH attribute to any specified sources. 1571 1572 ..NNOOTTPPAARRAALLLLEELL 1573 Disable parallel mode. 1574 1575 ..NNOO__PPAARRAALLLLEELL 1576 Synonym for ..NNOOTTPPAARRAALLLLEELL, for compatibility with other pmake 1577 variants. 1578 1579 ..NNOORREEAADDOONNLLYY 1580 clear the read-only attribute from the global variables 1581 specified as sources. 1582 1583 ..OOBBJJDDIIRR The source is a new value for `_._O_B_J_D_I_R'. If it exists, bbmmaakkee 1584 changes the current working directory to it and updates the 1585 value of `_._O_B_J_D_I_R'. 1586 1587 ..OORRDDEERR In parallel mode, the named targets are made in sequence. This 1588 ordering does not add targets to the list of targets to be made. 1589 1590 Since the dependents of a target do not get built until the 1591 target itself could be built, unless `a' is built by another 1592 part of the dependency graph, the following is a dependency 1593 loop: 1594 1595 .ORDER: b a 1596 b: a 1597 1598 ..PPAATTHH The sources are directories which are to be searched for files 1599 not found in the current directory. If no sources are 1600 specified, any previously specified directories are removed from 1601 the search path. If the source is the special ..DDOOTTLLAASSTT target, 1602 the current working directory is searched last. 1603 1604 ..PPAATTHH.._s_u_f_f_i_x 1605 Like ..PPAATTHH but applies only to files with a particular suffix. 1606 The suffix must have been previously declared with ..SSUUFFFFIIXXEESS. 1607 1608 ..PPHHOONNYY Apply the ..PPHHOONNYY attribute to any specified sources. 1609 1610 ..PPOOSSIIXX If this is the first non-comment line in the main makefile, the 1611 variable _%_P_O_S_I_X is set to the value `1003.2' and the makefile 1612 `<posix.mk>' is included if it exists, to provide POSIX- 1613 compatible default rules. If bbmmaakkee is run with the --rr flag, 1614 only `posix.mk' contributes to the default rules. 1615 1616 ..PPRREECCIIOOUUSS 1617 Apply the ..PPRREECCIIOOUUSS attribute to any specified sources. If no 1618 sources are specified, the ..PPRREECCIIOOUUSS attribute is applied to 1619 every target in the file. 1620 1621 ..RREEAADDOONNLLYY 1622 set the read-only attribute on the global variables specified as 1623 sources. 1624 1625 ..SSHHEELLLL Sets the shell that bbmmaakkee uses to execute commands. The sources 1626 are a set of _f_i_e_l_d==_v_a_l_u_e pairs. 1627 1628 name This is the minimal specification, used to 1629 select one of the built-in shell specs; sh, ksh, 1630 and csh. 1631 1632 path Specifies the absolute path to the shell. 1633 1634 hasErrCtl Indicates whether the shell supports exit on 1635 error. 1636 1637 check The command to turn on error checking. 1638 1639 ignore The command to disable error checking. 1640 1641 echo The command to turn on echoing of commands 1642 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 1651 checking. 1652 1653 echoFlag The flag to pass the shell to enable command 1654 echoing. 1655 1656 newline The string literal to pass the shell that 1657 results in a single newline character when used 1658 outside of any quoting characters. 1659 Example: 1660 1661 .SHELL: name=ksh path=/bin/ksh hasErrCtl=true \ 1662 check="set -e" ignore="set +e" \ 1663 echo="set -v" quiet="set +v" filter="set +v" \ 1664 echoFlag=v errFlag=e newline="'\n'" 1665 1666 ..SSIILLEENNTT Apply the ..SSIILLEENNTT attribute to any specified sources. If no 1667 sources are specified, the ..SSIILLEENNTT attribute is applied to every 1668 command in the file. 1669 1670 ..SSTTAALLEE This target gets run when a dependency file contains stale 1671 entries, having _._A_L_L_S_R_C set to the name of that dependency file. 1672 1673 ..SSUUFFFFIIXXEESS 1674 Each source specifies a suffix to bbmmaakkee. If no sources are 1675 specified, any previously specified suffixes are deleted. It 1676 allows the creation of suffix-transformation rules. 1677 1678 Example: 1679 1680 .SUFFIXES: .c .o 1681 .c.o: 1682 cc -o ${.TARGET} -c ${.IMPSRC} 1683 1684 ..SSYYSSPPAATTHH 1685 The sources are directories which are to be added to the system 1686 include path which bbmmaakkee searches for makefiles. If no sources 1687 are specified, any previously specified directories are removed 1688 from the system include path. 1689 1690EENNVVIIRROONNMMEENNTT 1691 bbmmaakkee uses the following environment variables, if they exist: MACHINE, 1692 MACHINE_ARCH, MAKE, MAKEFLAGS, MAKEOBJDIR, MAKEOBJDIRPREFIX, MAKESYSPATH, 1693 PWD, and TMPDIR. 1694 1695 MAKEOBJDIRPREFIX and MAKEOBJDIR may only be set in the environment or on 1696 the command line to bbmmaakkee and not as makefile variables; see the 1697 description of `_._O_B_J_D_I_R' for more details. 1698 1699FFIILLEESS 1700 .depend list of dependencies 1701 makefile first default makefile if no makefile is specified on the 1702 command line 1703 Makefile second default makefile if no makefile is specified on the 1704 command line 1705 sys.mk system makefile 1706 /usr/share/mk system makefile directory 1707 1708CCOOMMPPAATTIIBBIILLIITTYY 1709 The basic make syntax is compatible between different make variants; 1710 however the special variables, variable modifiers and conditionals are 1711 not. 1712 1713 OOllddeerr vveerrssiioonnss 1714 An incomplete list of changes in older versions of bbmmaakkee: 1715 1716 The way that .for loop variables are substituted changed after NetBSD 5.0 1717 so that they still appear to be variable expansions. In particular this 1718 stops them being treated as syntax, and removes some obscure problems 1719 using them in .if statements. 1720 1721 The way that parallel makes are scheduled changed in NetBSD 4.0 so that 1722 .ORDER and .WAIT apply recursively to the dependent nodes. The 1723 algorithms used may change again in the future. 1724 1725 OOtthheerr mmaakkee ddiiaalleeccttss 1726 Other make dialects (GNU make, SVR4 make, POSIX make, etc.) do not 1727 support most of the features of bbmmaakkee as described in this manual. Most 1728 notably: 1729 1730 ++oo The ..WWAAIITT and ..OORRDDEERR declarations and most functionality 1731 pertaining to parallelization. (GNU make supports 1732 parallelization but lacks the features needed to control it 1733 effectively.) 1734 1735 ++oo Directives, including for loops and conditionals and most of 1736 the forms of include files. (GNU make has its own incompatible 1737 and less powerful syntax for conditionals.) 1738 1739 ++oo All built-in variables that begin with a dot. 1740 1741 ++oo Most of the special sources and targets that begin with a dot, 1742 with the notable exception of ..PPHHOONNYY, ..PPRREECCIIOOUUSS, and ..SSUUFFFFIIXXEESS. 1743 1744 ++oo Variable modifiers, except for the `:old=new' string 1745 substitution, which does not portably support globbing with `%' 1746 and historically only works on declared suffixes. 1747 1748 ++oo The $$>> variable even in its short form; most makes support this 1749 functionality but its name varies. 1750 1751 Some features are somewhat more portable, such as assignment with ++==, ??==, 1752 and !!==. The _._P_A_T_H functionality is based on an older feature VVPPAATTHH found 1753 in GNU make and many versions of SVR4 make; however, historically its 1754 behavior is too ill-defined (and too buggy) to rely upon. 1755 1756 The $$@@ and $$<< variables are more or less universally portable, as is the 1757 $$((MMAAKKEE)) variable. Basic use of suffix rules (for files only in the 1758 current directory, not trying to chain transformations together, etc.) is 1759 also reasonably portable. 1760 1761SSEEEE AALLSSOO 1762 mkdep(1) 1763 1764HHIISSTTOORRYY 1765 bbmmaakkee is derived from NetBSD make(1). It uses autoconf to facilitate 1766 portability to other platforms. 1767 1768 A make command appeared in Version 7 AT&T UNIX. This make implementation 1769 is based on Adam de Boor's pmake program, which was written for Sprite at 1770 Berkeley. It was designed to be a parallel distributed make running jobs 1771 on different machines using a daemon called "customs". 1772 1773 Historically the target/dependency FFRRCC has been used to FoRCe rebuilding 1774 (since the target/dependency does not exist ... unless someone creates an 1775 _F_R_C file). 1776 1777BBUUGGSS 1778 The make syntax is difficult to parse. For instance, finding the end of 1779 a variable's use should involve scanning each of the modifiers, using the 1780 correct terminator for each field. In many places make just counts {} 1781 and () in order to find the end of a variable expansion. 1782 1783 There is no way of escaping a space character in a filename. 1784 1785 In jobs mode, when a target fails; make will put an error token into the 1786 job token pool. This will cause all other instances of make using that 1787 token pool to abort the build and exit with error code 6. Sometimes the 1788 attempt to suppress a cascade of unnecessary errors, can result in a 1789 seemingly unexplained `*** Error code 6' 1790 1791FreeBSD 13.2-RELEASE-p11 June 1, 2024 FreeBSD 13.2-RELEASE-p11 1792