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