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