| 1 | Release notes for Jam/MR 2.4 |
|---|
| 2 | (aka Jam - make(1) redux) |
|---|
| 3 | |
|---|
| 4 | 0. Changes between 2.4rc1 and 2.4rc2: |
|---|
| 5 | |
|---|
| 6 | THESE NOTES WILL BE REMOVED WITH THE FINAL 2.4 RELEASE, SINCE THEY |
|---|
| 7 | REFER EXCLUSIVELY TO ADJUSTMENTS IN BEHAVIORS NEW BETWEEN 2.3 and |
|---|
| 8 | 2.4: |
|---|
| 9 | |
|---|
| 10 | Make MATCH generate empty strings for () subexpressions that |
|---|
| 11 | match nothing, rather than generating nothing at all. |
|---|
| 12 | Thanks to David Abrahams. |
|---|
| 13 | |
|---|
| 14 | GLOB now applies the pattern to the directory-less filename, |
|---|
| 15 | rather than the whole path. Thanks to Niklaus Giger. |
|---|
| 16 | |
|---|
| 17 | Make Match rule do productized results, rather than |
|---|
| 18 | using just $(1[1]) as pattern and $(2[1]) as the string. |
|---|
| 19 | |
|---|
| 20 | 1. Release info: |
|---|
| 21 | |
|---|
| 22 | Jam/MR 2.4 |
|---|
| 23 | March, 21, 2002 |
|---|
| 24 | VERSION 2.4 |
|---|
| 25 | |
|---|
| 26 | 2. Compatibility |
|---|
| 27 | |
|---|
| 28 | Jam 2.4 is upward compatible with Jam 2.3 |
|---|
| 29 | |
|---|
| 30 | The Jam 2.4 language is a superset of the 2.3 language; |
|---|
| 31 | Jamfiles, Jambase, and other rulesets used in 2.3 can be used |
|---|
| 32 | with the 2.4 language support. |
|---|
| 33 | |
|---|
| 34 | 3. Changes since 2.3. |
|---|
| 35 | |
|---|
| 36 | 3.1. Changes to Jam Language |
|---|
| 37 | |
|---|
| 38 | The mechanism for calling rules that return values - "[ rule |
|---|
| 39 | args ...]", (and 'return' in the rule body), is now a |
|---|
| 40 | documented part of the language. |
|---|
| 41 | |
|---|
| 42 | Add "on <target> <rulename> <field1> ..." syntax, to invoke a |
|---|
| 43 | rule under the influence of a target's specific variables. |
|---|
| 44 | |
|---|
| 45 | Add "[ on targ rule ... ]" to call a rule returning a value, |
|---|
| 46 | under the influence of a target's specific variables. |
|---|
| 47 | |
|---|
| 48 | New 'Glob' builtin that returns a list of files in a list of |
|---|
| 49 | directories, given a list of patterns. |
|---|
| 50 | |
|---|
| 51 | New 'while expr { block }' construct. |
|---|
| 52 | |
|---|
| 53 | New :E=value modifier provides default value if variable unset. |
|---|
| 54 | |
|---|
| 55 | New :J=joinval modifier concatenates list elements into single |
|---|
| 56 | element, separated by joinval. |
|---|
| 57 | |
|---|
| 58 | \ can now be used to escape a space (or any single whitespace |
|---|
| 59 | character), so that you don't have to resort to quotes. |
|---|
| 60 | |
|---|
| 61 | New 'Match regexp : string' rule matches regexp against string |
|---|
| 62 | and returns list of results. |
|---|
| 63 | |
|---|
| 64 | Rules can now be invoked indirectly, through variable names. |
|---|
| 65 | If the variable expands to an empty list, no rule is run. |
|---|
| 66 | If the variable expands to multiple entries, each rule is |
|---|
| 67 | run with the same arguments. The result of the rule invocation |
|---|
| 68 | is the concatenation of the results of the rules invoked. |
|---|
| 69 | |
|---|
| 70 | 'Echo' and 'Exit' now have aliases 'echo' and 'exit', since it |
|---|
| 71 | is really hard to tell that these are built-in rules and not |
|---|
| 72 | part of the language, like 'include'. Real rules continue to |
|---|
| 73 | start with a capital. |
|---|
| 74 | |
|---|
| 75 | 3.2. Jambase Changes |
|---|
| 76 | |
|---|
| 77 | Support for YACCGEN, the suffix used on generated yacc output. |
|---|
| 78 | |
|---|
| 79 | Fix ups to have jam and p4 build with borland C 5.5, |
|---|
| 80 | and minor win98 jam support for jam clean |
|---|
| 81 | |
|---|
| 82 | SubDirHdrs now takes directory names in the same format as |
|---|
| 83 | SubInclude : one directory element per word. |
|---|
| 84 | |
|---|
| 85 | More portable support for specifying includes and #defines: |
|---|
| 86 | New ASHDRS, CCHDRS, CCDEFS, DEFINES, ObjectDefines, FQuote, |
|---|
| 87 | FIncludes, FDefines. Ordering of cc and c++ flags grossly |
|---|
| 88 | rearranged. |
|---|
| 89 | |
|---|
| 90 | Jambase has been compacted by applying the new E: and J: |
|---|
| 91 | expansion modifiers. |
|---|
| 92 | |
|---|
| 93 | New SoftLink rule, courtesy of David Lindes. It currently |
|---|
| 94 | assumes you can pass a -s flag to $(LN). |
|---|
| 95 | |
|---|
| 96 | 3.3 'jam' Changes (See Jam.html) |
|---|
| 97 | |
|---|
| 98 | Added '-q' (quit quick) option; jam will exit promptly (as if it |
|---|
| 99 | received an interrupt), as soon as any target fails. |
|---|
| 100 | |
|---|
| 101 | Added experimental '-g' (build newest sources first) option: |
|---|
| 102 | all things being equal, normally targets are simply built in |
|---|
| 103 | the order they appear in the Jamfiles. With this flag, targets |
|---|
| 104 | with the newest sources are built first. From an idea by Arnt |
|---|
| 105 | Gulbrandsen. Undocumented (outside this note). |
|---|
| 106 | |
|---|
| 107 | 3.4. Jam internal code changes |
|---|
| 108 | |
|---|
| 109 | jamgram.yy now defines YYMAXDEPTH to 10000, what it is on |
|---|
| 110 | FreeBSD, for older yaccs that left it at 150 or so. This is |
|---|
| 111 | needed for the right-recursion now used in the grammar. |
|---|
| 112 | |
|---|
| 113 | Optimize rule compilation, with right-recursion instead of left. |
|---|
| 114 | |
|---|
| 115 | Split jam's built-in rules out to builtins.c from compile.c, |
|---|
| 116 | so that compile.c only deals with the language. |
|---|
| 117 | |
|---|
| 118 | Split jam's pathsys.h from filesys.h, since they are really |
|---|
| 119 | two different pieces. |
|---|
| 120 | |
|---|
| 121 | evaluate_if(), which evaluated the condition tree for 'if' and |
|---|
| 122 | returned an int, has been replaced with compile_eval(), which does |
|---|
| 123 | essentially the same but returns a LIST. |
|---|
| 124 | |
|---|
| 125 | 4. Fixed bugs |
|---|
| 126 | |
|---|
| 127 | Missing TEMPORARY targets with multiple parents no longer spoil one |
|---|
| 128 | parent's time with another. The parents' time is used for comparison |
|---|
| 129 | with dependents, but no longer taken on as the target's own time. |
|---|
| 130 | |
|---|
| 131 | 'actions updated', not 'actions together', now protects targets |
|---|
| 132 | from being deleted on failed/interrupted updates. |
|---|
| 133 | |
|---|
| 134 | Fixed broken $(v[1-]), which always returned an empty expansion. |
|---|
| 135 | Thanks to Ian Godin <ian@sgrail.com>. |
|---|
| 136 | |
|---|
| 137 | Defining a rule within another rule, and invoking the enclosing |
|---|
| 138 | rule more than once, would result in giving the first rule a |
|---|
| 139 | null definition. Fixed. |
|---|
| 140 | |
|---|
| 141 | $(d:P) now works properly on the mac, climbing up directories. |
|---|
| 142 | Thanks to Miklos Fazekas <boga@mac.com>. |
|---|
| 143 | |
|---|
| 144 | No longer (sometimes) treat \ as a directory separator on |
|---|
| 145 | UNIX. It isn't supposed to be, but was due to bungled ifdefs. |
|---|
| 146 | |
|---|
| 147 | Applying just :U or :D (or :E, :J) mods no longer causes the |
|---|
| 148 | variable value to be treated as a filename (parsed and rebuilt |
|---|
| 149 | using the OS specific pathsys routines). Previously, if _any_ |
|---|
| 150 | mods were present then the value was parsed and rebuilt as if |
|---|
| 151 | a filename, and that could in certain cases munge the value. |
|---|
| 152 | Only the file modifiers (:GDBSM) treat the value as a |
|---|
| 153 | filename. |
|---|
| 154 | |
|---|
| 155 | Four rules makeCommon, makeGrist, makeString, makeSubDir from |
|---|
| 156 | jam 2.2 missing in 2.3 have been re-added, with apologies to |
|---|
| 157 | dtb@cisco.com. |
|---|
| 158 | |
|---|
| 159 | Return status more likely to be correct when using -d0, now that |
|---|
| 160 | targets are could as being built even with no debugging output. |
|---|
| 161 | Thanks to Miklos Fazekas <boga@mac.com>. |
|---|
| 162 | |
|---|
| 163 | yyacc now suffixes all terminals it defines with _t, so that they |
|---|
| 164 | don't conflict with other symbols (like RULE with the typedef |
|---|
| 165 | in rules.h). Thanks to Michael Allard. |
|---|
| 166 | |
|---|
| 167 | InstallInto now handles multiple sources properly, rather than |
|---|
| 168 | acting as if each installed target depended on all sources to |
|---|
| 169 | be installed. $(INSTALLGRIST) is now the default grist for |
|---|
| 170 | installed targets, rather than the hardcoded 'installed'. Thanks |
|---|
| 171 | to Stephen Goodson. |
|---|
| 172 | |
|---|
| 173 | 5. Porting |
|---|
| 174 | |
|---|
| 175 | [MACINTOSH] Paths are now downshifted (internally) so as to |
|---|
| 176 | handle its case insensitivity. Thanks to Miklos Fazekas |
|---|
| 177 | <boga@mac.com>. |
|---|
| 178 | |
|---|
| 179 | [NT] MS changed the macro for the IA64 Windows NT 64bit |
|---|
| 180 | compiler. |
|---|
| 181 | |
|---|
| 182 | [CYGWIN] Cygwin jam porting: dance around bison and yyacc. |
|---|
| 183 | Use bison's -y flag to use yacc's output file naming |
|---|
| 184 | conventions, and don't use yyacc on systems whose SUFEXE is |
|---|
| 185 | set. |
|---|
| 186 | |
|---|
| 187 | [VMS] The Jambase itself was not formatting the CCHDRS and |
|---|
| 188 | CCDEFS properly: on VMS they can't be appended to, because |
|---|
| 189 | multiple /define or /include directives don't work. Instead |
|---|
| 190 | now CCHDRS and CCDEFS is reformatted from HDRS and DEFINES |
|---|
| 191 | anytime those latter two change. This requires the recent |
|---|
| 192 | change to jam to allow access to target-specific variables |
|---|
| 193 | when setting other variables. |
|---|
| 194 | |
|---|
| 195 | [VMS] Remove exception call when file_dirscan() can't, for |
|---|
| 196 | some reason, scan a directory. Use a better set of #ifdefs to |
|---|
| 197 | determine if we're on a vax, rather than relying on the C |
|---|
| 198 | compiler being a specific version: we're able to build with |
|---|
| 199 | the C++ compiler now. |
|---|
| 200 | |
|---|
| 201 | [VMS] Port new jam to run with just cxx compiler. |
|---|
| 202 | (The C compiler being a extra-cost item). |
|---|
| 203 | |
|---|
| 204 | [NT] Add entry for DevStudio when the settings are already in the |
|---|
| 205 | system environment. |
|---|
| 206 | |
|---|
| 207 | [NT] default $(MV) to "move /y" in Jambase. |
|---|
| 208 | |
|---|
| 209 | [MINGW] Mingw port by Max Blagai. |
|---|
| 210 | |
|---|
| 211 | =============================================================================== |
|---|
| 212 | =============================================================================== |
|---|
| 213 | |
|---|
| 214 | |
|---|
| 215 | ======= end |
|---|
| 216 | Release notes for Jam/MR 2.3 |
|---|
| 217 | (aka Jam - make(1) redux) |
|---|
| 218 | |
|---|
| 219 | 0. Bugs fixed since 2.3.1 |
|---|
| 220 | |
|---|
| 221 | PATCHLEVEL 2 - 3/12/2001 |
|---|
| 222 | |
|---|
| 223 | NOCARE changed back: it once again does not applies to targets |
|---|
| 224 | with sources and/or actions. In 2.3 it was changed to apply to |
|---|
| 225 | such targets, but that broke header file builds: files that are |
|---|
| 226 | #included get marked with NOCARE, but if they have source or |
|---|
| 227 | actions, they still should get built. |
|---|
| 228 | |
|---|
| 229 | 1. Release info: |
|---|
| 230 | |
|---|
| 231 | Jam/MR 2.3 |
|---|
| 232 | November 16, 2000 |
|---|
| 233 | VERSION 2.3 |
|---|
| 234 | PATCHLEVEL 1 |
|---|
| 235 | |
|---|
| 236 | 2. Compatibility |
|---|
| 237 | |
|---|
| 238 | Jam 2.3 is upward compatible with Jam 2.2. |
|---|
| 239 | |
|---|
| 240 | The Jam 2.3 language is a superset of the 2.2 language; |
|---|
| 241 | Jamfiles, Jambase, and other rulesets used in 2.2 can be used |
|---|
| 242 | with the 2.3 language support. |
|---|
| 243 | |
|---|
| 244 | 3. Changes since 2.2 |
|---|
| 245 | |
|---|
| 246 | 3.1. Changes to Jam Language |
|---|
| 247 | |
|---|
| 248 | Rules now can have values, which can expanded into a list with |
|---|
| 249 | the new "[ rule args ... ]" syntax. A rule's value is the value |
|---|
| 250 | of its last statement, though only the following statements have |
|---|
| 251 | values: if (value of the leg chosen), switch (ditto), set (value |
|---|
| 252 | of the resulting variable), return (its arguments). Note that |
|---|
| 253 | 'return' doesn't actually return. This support is EXPERIEMENTAL |
|---|
| 254 | and otherwise undocumented. (2.3.1) |
|---|
| 255 | |
|---|
| 256 | Because of the new way lists are processed, if a rule has no |
|---|
| 257 | targets a warning message is no longer issued. |
|---|
| 258 | |
|---|
| 259 | NOCARE now applies to targets with sources and/or actions, |
|---|
| 260 | rather than just those without. |
|---|
| 261 | |
|---|
| 262 | 3.2. Jambase Changes |
|---|
| 263 | |
|---|
| 264 | The HDRPATTERN variable now allows for leading blanks before |
|---|
| 265 | the #include, to keep up with ANSI. By john@nanaon-sha.co.jp |
|---|
| 266 | (John Belmonte) (2.2.3). |
|---|
| 267 | |
|---|
| 268 | HDRPATTERN has been adjusted to avoid mistaking cases like: |
|---|
| 269 | |
|---|
| 270 | # include <time.h> /* could be <sys/time.h> */ |
|---|
| 271 | |
|---|
| 272 | MkDir now NOUPDATE's $(DOT), so that there are no dependencies |
|---|
| 273 | on the current directory's timestamp. By john@nanaon-sha.co.jp |
|---|
| 274 | (John Belmonte). |
|---|
| 275 | |
|---|
| 276 | The old mock functions like makeDirName, which assigned their |
|---|
| 277 | results to the variable named as their first argument, have |
|---|
| 278 | been replaced with real functions using the new [] synxtax. |
|---|
| 279 | E.g. "makeDirName foo : bar ola" is now "foo = [ fDirName bar ]" |
|---|
| 280 | |
|---|
| 281 | Install now always does a cp/chmod/etc, rather than using |
|---|
| 282 | the system's install(1), which invariably seems broken. |
|---|
| 283 | |
|---|
| 284 | 3.3. Jam internal code changes |
|---|
| 285 | |
|---|
| 286 | $JAMUNAME is set on UNIX. (2.2.4). |
|---|
| 287 | |
|---|
| 288 | Jam ANSI-fied (2.3.0). |
|---|
| 289 | |
|---|
| 290 | jam.h now defines a bunch of symbols used by the other source |
|---|
| 291 | files, so as minimize compiler- and platform-specific ifdefs. |
|---|
| 292 | |
|---|
| 293 | OSVER is no longer set by jam.h (it was only set for AIX). |
|---|
| 294 | Jam does not depend on this variable at all, except to set |
|---|
| 295 | $(OSFULL), which is used to determine jam's build directory. |
|---|
| 296 | If the user needs to distinguish between various revs of |
|---|
| 297 | OSs, he must set OSVER in the environment. |
|---|
| 298 | |
|---|
| 299 | 4. Fixed bugs |
|---|
| 300 | |
|---|
| 301 | Redefining a rule while it was executing could cause jam to |
|---|
| 302 | crash. Reference counts are now used to prevent that, thanks |
|---|
| 303 | to Matt Armstrong. |
|---|
| 304 | |
|---|
| 305 | Logic for computing chunk size when executing PIECEMEAL rules |
|---|
| 306 | has been reworked to be a little more accurate, without danger |
|---|
| 307 | of overflow, at the cost of being a little more compute intensive. |
|---|
| 308 | Instead of computing an estimate chunksize in the (now gone) |
|---|
| 309 | make1chunk(), make1cmds() now just goes full bore and tries to |
|---|
| 310 | use all args. When that fails, it backs off by 10% of the source |
|---|
| 311 | args until the command fits. It takes a little bit more compute |
|---|
| 312 | time compared to the old logic, but when you're executing actions |
|---|
| 313 | to build all of Shinola it's still pretty small in the scheme |
|---|
| 314 | of things. |
|---|
| 315 | |
|---|
| 316 | The NT handle leak in execunix.c has been fixed, thanks to |
|---|
| 317 | Gurusamy Sarathy. (2.2.1). |
|---|
| 318 | |
|---|
| 319 | 5. Porting |
|---|
| 320 | |
|---|
| 321 | Platforms newly supported or updated: |
|---|
| 322 | |
|---|
| 323 | AmigaOS (with gcc), courtesy of Alain Penders (2.2.2). |
|---|
| 324 | |
|---|
| 325 | Beos |
|---|
| 326 | |
|---|
| 327 | CYGWIN 1.1.4, courtesy of John Belmonte <john@nanaon-sha.co.jp>. |
|---|
| 328 | |
|---|
| 329 | IBM AS400 via Visual Age on NT (primitive) |
|---|
| 330 | |
|---|
| 331 | IBM OS/390 Unix System Services |
|---|
| 332 | |
|---|
| 333 | Linux SuSE on OS390 |
|---|
| 334 | |
|---|
| 335 | Linux Mips, ARM |
|---|
| 336 | |
|---|
| 337 | Lynx |
|---|
| 338 | |
|---|
| 339 | HPUX 11, IA64 |
|---|
| 340 | |
|---|
| 341 | Mac OS X Server, courtesy of Jeff_Sickel@sickel.com (2.2.5). |
|---|
| 342 | |
|---|
| 343 | Mac Rhapsody |
|---|
| 344 | |
|---|
| 345 | MPE IX 6.0 |
|---|
| 346 | |
|---|
| 347 | NetBSD |
|---|
| 348 | |
|---|
| 349 | QNX RTP (QNX 6.0) |
|---|
| 350 | |
|---|
| 351 | Siemens Sinix |
|---|
| 352 | |
|---|
| 353 | UNICOS |
|---|
| 354 | |
|---|
| 355 | VMS 6.2, 7.1 |
|---|
| 356 | |
|---|
| 357 | Windows NT IA64 |
|---|
| 358 | |
|---|
| 359 | 5.1. NT Porting Notes |
|---|
| 360 | |
|---|
| 361 | Always create tmp .bat file for actions if JAMSHELL is set. |
|---|
| 362 | That way, if JAMSHELL is a .bat file itself, it can handle |
|---|
| 363 | single-command actions with more than 9 cmd line args. |
|---|
| 364 | |
|---|
| 365 | COMSPEC is no longer examined: cmd.exe is always used |
|---|
| 366 | instead. Only cmd.exe can execute the Jambase rules anyhow. |
|---|
| 367 | |
|---|
| 368 | Jam can be built with Borland C++ 5.5. |
|---|
| 369 | |
|---|
| 370 | OS2 fixes: InstallBin now works. Filenames are now downshifted, |
|---|
| 371 | so mixed case works better there, too. file_dirscan() can now scan |
|---|
| 372 | the root ("c:\" or "\") directory, which it couldn't handle before. |
|---|
| 373 | |
|---|
| 374 | var_defines now ignores OS=Windows_NT, because it conflicts |
|---|
| 375 | with Jam's setting of OS (to NT). |
|---|
| 376 | |
|---|
| 377 | 5.2. Mac OS 8/9 Notes |
|---|
| 378 | |
|---|
| 379 | The support for Mac is curious at best. It runs under MPW. |
|---|
| 380 | |
|---|
| 381 | It requires CodeWarrior Pro 5, but no longer requires GUSI. |
|---|
| 382 | |
|---|
| 383 | Use Build.mpw to bootstrap the build. |
|---|
| 384 | |
|---|
| 385 | The Mac specific definitions in the Jambase are not intended |
|---|
| 386 | to be of general purpose, but are sufficient to have Jam build |
|---|
| 387 | itself. |
|---|
| 388 | |
|---|
| 389 | =============================================================================== |
|---|
| 390 | =============================================================================== |
|---|
| 391 | |
|---|
| 392 | |
|---|
| 393 | Release Notes for Jam 2.2 |
|---|
| 394 | |
|---|
| 395 | 1. Release info: |
|---|
| 396 | |
|---|
| 397 | Jam 2.2 |
|---|
| 398 | October 22, 1997 |
|---|
| 399 | VERSION 2.2 |
|---|
| 400 | PATCHLEVEL 1 |
|---|
| 401 | |
|---|
| 402 | 2. Compatibility |
|---|
| 403 | |
|---|
| 404 | Jam 2.2 is a roll-up of 'Jam - make(1) redux' release 2.1+. |
|---|
| 405 | Most of the changes described below were available before this, |
|---|
| 406 | in the jam.2.1.plus.tar ball. |
|---|
| 407 | |
|---|
| 408 | The Jam 2.2 language is a superset of the 2.1 language; |
|---|
| 409 | Jamfiles, Jambase, and other rulesets used in 2.1 can be used |
|---|
| 410 | with the 2.2 language support. |
|---|
| 411 | |
|---|
| 412 | See 'Jambase Changes', below, to see if your Jamfiles need any |
|---|
| 413 | changes to work with the 2.2 Jambase. |
|---|
| 414 | |
|---|
| 415 | |
|---|
| 416 | 3. Changes Since 2.1 |
|---|
| 417 | |
|---|
| 418 | New product name: Jam. (Executable program is still named 'jam'.) |
|---|
| 419 | |
|---|
| 420 | Documentation rewritten; HTML versions supplied. |
|---|
| 421 | |
|---|
| 422 | |
|---|
| 423 | 3.1 Changes to Jam Language |
|---|
| 424 | |
|---|
| 425 | Rules may now have more fields than just $(<) and $(>). |
|---|
| 426 | |
|---|
| 427 | Local variables are now supported. |
|---|
| 428 | |
|---|
| 429 | The expression 'if $(A) in $(B)' is now supported. |
|---|
| 430 | |
|---|
| 431 | New variable modifiers :U and :L result in uppercased or lowercased |
|---|
| 432 | values. |
|---|
| 433 | |
|---|
| 434 | New variable modifier :P reliably results in parent directory |
|---|
| 435 | of either a file or directory. (Previously, :D was used, but on VMS |
|---|
| 436 | :D of a directory name is just the directory name.) |
|---|
| 437 | |
|---|
| 438 | The :S variable modifier now results in the _last_ suffix if a |
|---|
| 439 | filename has more than one dot (.) in it. |
|---|
| 440 | |
|---|
| 441 | New predefined $(JAMDATE) variable is initialized at runtime for |
|---|
| 442 | simple date stamping. |
|---|
| 443 | |
|---|
| 444 | New predefined variables $(OSVER) and $(OSPLAT) are used to |
|---|
| 445 | distinguish among operating system versions and hardware platforms, |
|---|
| 446 | when possible. |
|---|
| 447 | |
|---|
| 448 | New 'bind' qualifier on action definitions allows variables |
|---|
| 449 | other than $(<) and $(>) to be bound with SEARCH and LOCATE paths. |
|---|
| 450 | |
|---|
| 451 | Action buffer size is no longer limited by MAXCMD. Instead, each |
|---|
| 452 | line in an action is limited by MAXLINE, defined for each OS, and |
|---|
| 453 | the entire action size is limited by CMDBUF. |
|---|
| 454 | |
|---|
| 455 | |
|---|
| 456 | 3.2 Jambase Changes (See Jamfile.html) |
|---|
| 457 | |
|---|
| 458 | Jambase has been reworked to incorporate new language features. |
|---|
| 459 | |
|---|
| 460 | A handful of new utility rules has been added: makeString, |
|---|
| 461 | makeDirName, etc. |
|---|
| 462 | |
|---|
| 463 | New HDRGRIST variable in Jambase allows for headers with the same |
|---|
| 464 | name to be distinguished. |
|---|
| 465 | |
|---|
| 466 | LOCATE_TARGET now has a new flavor, LOCATE_SOURCE, that is used by |
|---|
| 467 | rules that generate source files (e.g., Yacc and Lex). |
|---|
| 468 | |
|---|
| 469 | Header file includes now happen in the proper order. The limit of |
|---|
| 470 | 10 include files has been eliminated. |
|---|
| 471 | |
|---|
| 472 | The old "Install" rule is no longer available. Use InstallBin, |
|---|
| 473 | InstallFile, InstallLib, InstallMan, or InstallShell instead. |
|---|
| 474 | |
|---|
| 475 | |
|---|
| 476 | 3.3 'jam' Changes (See Jam.html) |
|---|
| 477 | |
|---|
| 478 | 'jam' can now be built as a stand-alone program, with Jambase |
|---|
| 479 | compiled into the executable. An external or alternate Jambase can |
|---|
| 480 | still be referenced explicitly with -f. |
|---|
| 481 | |
|---|
| 482 | On command failure, 'jam' now emits the text of the command that |
|---|
| 483 | failed. This is a compromise between the normal -d1 behavior (where |
|---|
| 484 | commands were never seen) and -d2 (where commands are always seen). |
|---|
| 485 | |
|---|
| 486 | 'jam' now exits non-zero if it doesn't have a total success. A parse |
|---|
| 487 | error, sources that can't be found, and targets that can't be built |
|---|
| 488 | all generate non-zero exit status. |
|---|
| 489 | |
|---|
| 490 | The debugging levels (-d flags) have been slightly redefined. |
|---|
| 491 | |
|---|
| 492 | The supplied Jamfile now builds 'jam' into a platform specific |
|---|
| 493 | subdirectory. This lets you use the same source directory to |
|---|
| 494 | build 'jam' for more than one platform. |
|---|
| 495 | |
|---|
| 496 | The supplied Jamfile does not rebuild generated source files by |
|---|
| 497 | default. (They are supplied with the distribution.) See Jamfile |
|---|
| 498 | for more information. |
|---|
| 499 | |
|---|
| 500 | |
|---|
| 501 | 4. Fixed Bugs |
|---|
| 502 | |
|---|
| 503 | The 'include' bug has finally been fixed, so that include |
|---|
| 504 | statements take effect exactly when they are executed, |
|---|
| 505 | rather than after the current statement block. This also |
|---|
| 506 | corrects the problem where an 'include' within an 'if' |
|---|
| 507 | block would wind up including the file one token after the |
|---|
| 508 | 'if' block's closing brace. Credit goes to Thomas Woods |
|---|
| 509 | for suggesting that the parse tree generation and parse |
|---|
| 510 | tree execution be paired in their own loop, rather than |
|---|
| 511 | having the parser execute the tree directly. |
|---|
| 512 | |
|---|
| 513 | The setting and extracting of grist has been regularized: |
|---|
| 514 | normally, if you set a component of a filename (using the |
|---|
| 515 | :DBSMG= modifiers), you are supposed to include the delimiters |
|---|
| 516 | that set off the component: that is, you say "$(x:S=.suffix)", |
|---|
| 517 | including the ".". But with grist it was inconsistent |
|---|
| 518 | between setting and getting: setting grist required no |
|---|
| 519 | <>'s, while getting grist included them. Getting grist |
|---|
| 520 | continues to return the <>'s, but now setting grist can |
|---|
| 521 | either include them (the new way) or not (the old way). |
|---|
| 522 | |
|---|
| 523 | 'actions together' now suppresses duplicate sources from |
|---|
| 524 | showing up in $(>). |
|---|
| 525 | |
|---|
| 526 | Accessing variables whose names contained ['s (as happens with |
|---|
| 527 | MkDir on VMS) wasn't working, because it treated the [ as an |
|---|
| 528 | array subscript. Now [ and ] are, like :, handled specially so |
|---|
| 529 | that they can appear in variable values. |
|---|
| 530 | |
|---|
| 531 | The 'if' statement now compares all elements in expressions; |
|---|
| 532 | previously, it only compared the first element of each list. |
|---|
| 533 | |
|---|
| 534 | If a command line in an action is longer than MAXLINE (formerly |
|---|
| 535 | MAXCMD), 'jam' now issues an error and exits rather than dumping |
|---|
| 536 | core. |
|---|
| 537 | |
|---|
| 538 | If a Jamfile ended without a trailing newline, jam dumped core. |
|---|
| 539 | This has been fixed. |
|---|
| 540 | |
|---|
| 541 | |
|---|
| 542 | 5. Porting |
|---|
| 543 | |
|---|
| 544 | See jam.h for the definitive list of supported platforms. |
|---|
| 545 | Since 2.1, support has been added for: |
|---|
| 546 | |
|---|
| 547 | Macintosh MPW |
|---|
| 548 | Alpha VMS |
|---|
| 549 | Alpha NT |
|---|
| 550 | NT PowerPC |
|---|
| 551 | BeOS |
|---|
| 552 | MVS OE |
|---|
| 553 | UNIXWARE |
|---|
| 554 | QNX |
|---|
| 555 | SINIX (Nixdorf) |
|---|
| 556 | OS/2 |
|---|
| 557 | Interactive UNIX (ISC), courtesy of Matthew Newhook |
|---|
| 558 | |
|---|
| 559 | |
|---|
| 560 | 5.1 NT Support Fixes |
|---|
| 561 | |
|---|
| 562 | The NT command executor now handles multiple line actions, by writing |
|---|
| 563 | multi-line actions to a batch file and executing that. |
|---|
| 564 | |
|---|
| 565 | Targets are universally lowercased on NT. (Matthew Newhook) |
|---|
| 566 | |
|---|
| 567 | Concurrent process support is fully enabled for NT. |
|---|
| 568 | (Gurusamy Sarathy <gsar@engin.umich.edu>) |
|---|
| 569 | |
|---|
| 570 | Path handling: Jam now knows that the directory component of "D:\" |
|---|
| 571 | is "D:\", just as on unix it knows that the directory component of |
|---|
| 572 | "/" is "/". It also now successfully gets the timestamp for "D:\" |
|---|
| 573 | or just plain "\". |
|---|
| 574 | |
|---|
| 575 | |
|---|
| 576 | 5.2 VMS Support Fixes |
|---|
| 577 | |
|---|
| 578 | VMS support is much, much better now. The path name manipulation |
|---|
| 579 | routines (in pathvms.c) were more or less rewritten, and they now |
|---|
| 580 | handle the vagaries of combining directory and file names properly. |
|---|
| 581 | |
|---|
| 582 | Targets are universally lowercased on VMS. |
|---|
| 583 | |
|---|
| 584 | Multi-line command blocks on VMS are now executed in a single system() |
|---|
| 585 | call rather than separate ones for each line, so that actions can |
|---|
| 586 | be DCL scripts. |
|---|
| 587 | |
|---|
| 588 | =============================================================================== |
|---|
| 589 | =============================================================================== |
|---|
| 590 | |
|---|
| 591 | |
|---|
| 592 | Release notes for Jam 2.1. |
|---|
| 593 | |
|---|
| 594 | 1. Release info: |
|---|
| 595 | Jam 2.1 |
|---|
| 596 | February 1, 1996 |
|---|
| 597 | VERSION 2.1 |
|---|
| 598 | PATCHLEVEL 0 |
|---|
| 599 | |
|---|
| 600 | 2. Porting |
|---|
| 601 | |
|---|
| 602 | Linux is now supported. |
|---|
| 603 | |
|---|
| 604 | FREEBSD is now supported. |
|---|
| 605 | |
|---|
| 606 | SCO ("M_XENIX") now supported. |
|---|
| 607 | |
|---|
| 608 | NCR now supported. |
|---|
| 609 | |
|---|
| 610 | NEXT support from karthy@dannug.dk (Karsten Thygesen) |
|---|
| 611 | |
|---|
| 612 | DECC support from zinser@axp614.gsi.de (Martin P.J. Zinser) |
|---|
| 613 | |
|---|
| 614 | I have changes for OS/2, but no way to test them. Volunteers? |
|---|
| 615 | I have VMS multiprocess support, but no way to test it. Volunteers? |
|---|
| 616 | |
|---|
| 617 | 2.1. NT Support fixes. |
|---|
| 618 | |
|---|
| 619 | The NT support is considerably more real than it was in 2.0. |
|---|
| 620 | Filent.c had its syntax error corrected, it no longer skips the |
|---|
| 621 | first entry when scanning directories, and it handles string |
|---|
| 622 | tables in archives (for long object file names). |
|---|
| 623 | |
|---|
| 624 | The Jambase was changed a bit to support the various C/C++ |
|---|
| 625 | compilers on NT, although it has only been thorougly tested |
|---|
| 626 | with MSVC20. |
|---|
| 627 | |
|---|
| 628 | You still need to set MSVCNT or BCCROOT to the root of the |
|---|
| 629 | the compiler's directory tree, and you'll get an error if you |
|---|
| 630 | don't set it (rather than getting a pile of mysterious errors). |
|---|
| 631 | |
|---|
| 632 | 2.2. Other porting fixes. |
|---|
| 633 | |
|---|
| 634 | SPLITPATH now set up for UNIX (:), NT (;), VMS (,) |
|---|
| 635 | |
|---|
| 636 | Jambase support for Solaris works better now: the location of |
|---|
| 637 | AR is hardwired to /usr/ccs/bin/ar and it knowns "install" |
|---|
| 638 | doesn't take -c. Solaris -- how the mighty have fallen. |
|---|
| 639 | |
|---|
| 640 | To handle Linux's wacko yacc, jamgram.h is now included after |
|---|
| 641 | scan.h so that YYSTYPE is define. |
|---|
| 642 | |
|---|
| 643 | 3. Jambase Changes (see Jamfile.html) |
|---|
| 644 | |
|---|
| 645 | SubDir now computes the root directory for the source tree, if |
|---|
| 646 | the variable naming the root directory isn't set in the environment. |
|---|
| 647 | It counts the number of directory elements leading from the root |
|---|
| 648 | to the current directory (as passed to SubDir) and uses that many |
|---|
| 649 | "../"'s to identify the root. This means that to use SubDir you |
|---|
| 650 | no longer have to have anything special set in the environment. |
|---|
| 651 | |
|---|
| 652 | InstallFile is now an alias for InstallLib. |
|---|
| 653 | |
|---|
| 654 | 'first' is now dependency of all pseudo-targets (all, files, |
|---|
| 655 | exe, lib, shell), so that jamming any of these pseudo-targets |
|---|
| 656 | also builds any dependencies of 'first'. |
|---|
| 657 | |
|---|
| 658 | The File rule definition in the Jambase was missing an &. |
|---|
| 659 | |
|---|
| 660 | The File rule now calls the Clean rule, so that installed files |
|---|
| 661 | get cleaned. |
|---|
| 662 | |
|---|
| 663 | 4. Jam changes (see Jam.html) |
|---|
| 664 | |
|---|
| 665 | Variables may now be set on the command line with -svar=value. |
|---|
| 666 | |
|---|
| 667 | Targets marked with NOUPDATE are now immune to the -a (anyhow) |
|---|
| 668 | flag. Previously, the MkDir rule would try to recreate directories |
|---|
| 669 | that already exist when jam was invoked with -a. |
|---|
| 670 | |
|---|
| 671 | A new variable, $(JAMVERSION), joins the small list of built-in |
|---|
| 672 | variables. It it set to the release of jam, currently "2.1". |
|---|
| 673 | |
|---|
| 674 | If an actions fails, jam now deletes the target(s). It won't |
|---|
| 675 | delete libraries or other targets that are composites. This is |
|---|
| 676 | now consistent with jam's behavior on interrupts (it deletes the |
|---|
| 677 | targets). |
|---|
| 678 | |
|---|
| 679 | Jam had a nasty bug when setting multiple variables to the same |
|---|
| 680 | value: if the first two variable names were the same, the variable |
|---|
| 681 | value got trashed. This also affected "on target" variables if |
|---|
| 682 | the first two targets were the same. For example: |
|---|
| 683 | |
|---|
| 684 | FOO on bar.c bar.c foo.c = a b c ; |
|---|
| 685 | |
|---|
| 686 | This would mangle the value of FOO for bar.c and foo.c. This has |
|---|
| 687 | been fixed. |
|---|
| 688 | |
|---|
| 689 | Jam would generate bogus numbers when reporting the number of |
|---|
| 690 | targets updated after an interrupt. It now is more careful about |
|---|
| 691 | counting. |
|---|
| 692 | |
|---|
| 693 | The debugging flag -d has been extended. In addition to supporting |
|---|
| 694 | -dx (turn on debugging for all levels up to x) there is also now |
|---|
| 695 | -d+x (turn on debugging at only level x). The default output |
|---|
| 696 | level is -d1 (-or d2 if -n is given); this can be turned off with |
|---|
| 697 | -d0. The debug levels are listed in jam.1 and jam.h. |
|---|
| 698 | |
|---|
| 699 | The parsing debug output now uses indenting to indicate when |
|---|
| 700 | one rule invokes another. |
|---|
| 701 | |
|---|
| 702 | =============================================================================== |
|---|
| 703 | =============================================================================== |
|---|
| 704 | |
|---|
| 705 | |
|---|
| 706 | Release notes for Jam 2.0. |
|---|
| 707 | |
|---|
| 708 | 1. Release info: |
|---|
| 709 | Jam 2.0 |
|---|
| 710 | March 10, 1994 |
|---|
| 711 | VERSION 2.0 |
|---|
| 712 | PATCHLEVEL 5 |
|---|
| 713 | |
|---|
| 714 | 2. Porting |
|---|
| 715 | |
|---|
| 716 | Windows/NT is now (crudely) supported, courtesy of Brett Taylor |
|---|
| 717 | and Laura Wingerd. |
|---|
| 718 | |
|---|
| 719 | COHERENT/386 is now supported, courtesy of Fred Smith. |
|---|
| 720 | |
|---|
| 721 | Solaris archive string table for long archive names is now |
|---|
| 722 | supported, thanks to Mike Matrigali. |
|---|
| 723 | |
|---|
| 724 | 3. Compatibility |
|---|
| 725 | |
|---|
| 726 | Jam 2.0 syntax is a superset of Jam 1.0 syntax, and thus it can |
|---|
| 727 | interpret a Jam 1.0 Jambase. |
|---|
| 728 | |
|---|
| 729 | The Jam 2.0 Jambase is a superset of the Jam 1.0 Jambase, and |
|---|
| 730 | thus it can include a Jamfile written for Jam 1.0. |
|---|
| 731 | |
|---|
| 732 | 4. Changes from Jam 1.0 to Jam 2.0 |
|---|
| 733 | |
|---|
| 734 | 4.1. Documentation changes |
|---|
| 735 | |
|---|
| 736 | New Jamfile.5 manual page, with lots of examples and easy |
|---|
| 737 | reading. It replaces both the old "Examples" file as well as |
|---|
| 738 | the old Jambase.5 manual page. |
|---|
| 739 | |
|---|
| 740 | jam.1 edited by Stephen W. Liddle and Diane Holt. |
|---|
| 741 | |
|---|
| 742 | 4.2. Jambase Changes (see Jamfile.5) |
|---|
| 743 | |
|---|
| 744 | 4.2.1. New rules: |
|---|
| 745 | |
|---|
| 746 | There are new rules to make handling subdirectories easier: |
|---|
| 747 | SubDir, SubInclude, SubDirCcFlags, SubDirHdrs. |
|---|
| 748 | |
|---|
| 749 | There are new rules to handle file-specific CCFLAGS and HDRS: |
|---|
| 750 | ObjectCcFlags and ObjectHdrs. |
|---|
| 751 | |
|---|
| 752 | Misc new rules: HardLink, InstallShell, MkDir. |
|---|
| 753 | |
|---|
| 754 | New rule "clean" that deletes exactly what jam has built, and |
|---|
| 755 | "uninstall" that deletes exactly what was installed. |
|---|
| 756 | |
|---|
| 757 | New rules for handling suffixes .s, .f, .cc, .cpp, .C. |
|---|
| 758 | |
|---|
| 759 | 4.2.2. Old rules: |
|---|
| 760 | |
|---|
| 761 | The InstallBin, Lib, Man, and the new Shell rules now take the |
|---|
| 762 | destination directory as the target and the files to be copied |
|---|
| 763 | as sources. These rules formerly took the files to be copied |
|---|
| 764 | as targets, and used built-in destination directories of |
|---|
| 765 | $(BINDIR), $(LIBDIR), $(MANDIR), and $(BINDIR). |
|---|
| 766 | |
|---|
| 767 | The InstallBin, Lib, Man, and Shell rules use the install(1) |
|---|
| 768 | program now, instead of doing their own copying. |
|---|
| 769 | |
|---|
| 770 | The Cc rule now uses -o when possible, rather than moving the |
|---|
| 771 | result. Some platforms (Pyramid?) have a broken -o. |
|---|
| 772 | |
|---|
| 773 | Jambase rules taking libraries, objects, and executables now |
|---|
| 774 | all ignore the suffixes provided and use the one defined in the |
|---|
| 775 | Jambase for the platform. |
|---|
| 776 | |
|---|
| 777 | Stupid yyacc support moved out of Jambase, as jam is its only |
|---|
| 778 | likely user. |
|---|
| 779 | |
|---|
| 780 | Jambase now purturbs library sources with a "grist" of |
|---|
| 781 | SOURCE_GRIST. |
|---|
| 782 | |
|---|
| 783 | 4.2.3. Misc: |
|---|
| 784 | |
|---|
| 785 | The names of the default rules defined in Jambase have been |
|---|
| 786 | lowercased and un-abbreviated, to be more imake(1) like. |
|---|
| 787 | |
|---|
| 788 | The Jambase has been reorganized and sorted, with VMS and NT |
|---|
| 789 | support moved in from their own files. |
|---|
| 790 | |
|---|
| 791 | The Jambase has been relocated on UNIX from /usr/local/lib/jam |
|---|
| 792 | to /usr/local/lib. |
|---|
| 793 | |
|---|
| 794 | 4.3. Jam changes (see jam.1) |
|---|
| 795 | |
|---|
| 796 | 4.3.1. Flags: |
|---|
| 797 | |
|---|
| 798 | New -a (anyhow) flag: means build everything. |
|---|
| 799 | |
|---|
| 800 | New -j<x> flag: run jobs in parallel. |
|---|
| 801 | |
|---|
| 802 | Old -t now rebuilds the touched target, rather that just the |
|---|
| 803 | target's parents. |
|---|
| 804 | |
|---|
| 805 | -n now implies -d2, so that you see what's happening. The |
|---|
| 806 | debug level can be subsequently overridden. |
|---|
| 807 | |
|---|
| 808 | New -v to dump version. |
|---|
| 809 | |
|---|
| 810 | 4.3.2. Rules: |
|---|
| 811 | |
|---|
| 812 | New ALWAYS rule behaves like -t: always builds target. |
|---|
| 813 | |
|---|
| 814 | New EXIT rule makes it possible to raise a fatal error. |
|---|
| 815 | |
|---|
| 816 | New LEAVES rule which say target depends only on the update |
|---|
| 817 | times of the leaf sources. |
|---|
| 818 | |
|---|
| 819 | New NOUPDATE rule says built targets only if they don't exist. |
|---|
| 820 | |
|---|
| 821 | NOTIME has been renamed NOTFILE, to more accurately reflect its |
|---|
| 822 | meaning (it says a target is not to be bound to a file). |
|---|
| 823 | |
|---|
| 824 | 4.3.3. Variables: |
|---|
| 825 | |
|---|
| 826 | New special variable JAMSHELL: argv template for command execution |
|---|
| 827 | shell. |
|---|
| 828 | |
|---|
| 829 | Variables, both normal and target-specific, can have their |
|---|
| 830 | value appended with the syntax "var += value" or "var on target |
|---|
| 831 | += value". |
|---|
| 832 | |
|---|
| 833 | "?=" is now synonymous with "default =". |
|---|
| 834 | |
|---|
| 835 | Imported enviroment variable values are now split at blanks |
|---|
| 836 | (:'s if the variable name ends in PATH), so that they become |
|---|
| 837 | proper list values. |
|---|
| 838 | |
|---|
| 839 | 4.3.4. Misc: |
|---|
| 840 | |
|---|
| 841 | Files to be sourced with "include" are now bound first, so |
|---|
| 842 | $(SEARCH) and $(LOCATE) affect them. They still can't be |
|---|
| 843 | built, though. |
|---|
| 844 | |
|---|
| 845 | New modifier on "actions": "existing" causes $(>) to expand |
|---|
| 846 | only those files that currently exist. |
|---|
| 847 | |
|---|
| 848 | 4.3.5. Bug fixes: |
|---|
| 849 | |
|---|
| 850 | When scanning tokens known to be argument lists (such as the |
|---|
| 851 | arguments to rule invocations and variable assignment), the |
|---|
| 852 | parser now tells the scanner to ignore alphabetic keywords, as |
|---|
| 853 | all such lists terminate with punctuation keywords (like : or |
|---|
| 854 | ;). This way, alphabetic keywords don't need to be quoted when |
|---|
| 855 | they appear as arguments. |
|---|
| 856 | |
|---|
| 857 | The scanner has been fixed to handle oversized tokens, |
|---|
| 858 | unterminated quotes, unterminated action blocks, and tokens |
|---|
| 859 | abutting EOF (i.e. a token with no white space before EOF). |
|---|
| 860 | |
|---|
| 861 | The progress report "...on xth target..." used to count all |
|---|
| 862 | targets, rather than just those with updating actions. Since |
|---|
| 863 | the original pronouncement of targets to be udpated included |
|---|
| 864 | only those with updating actions, the progress report has been |
|---|
| 865 | changed to match. |
|---|
| 866 | |
|---|
| 867 | 'If' conditionals now must be single arguments. Previously, |
|---|
| 868 | they could be zero or more arguments, which didn't make much |
|---|
| 869 | sense, and made things like 'foo == bar' true. The comparison |
|---|
| 870 | operator is '=', and '==' just looked like the second of three |
|---|
| 871 | arguments in the unary "non-empty argument list" conditional. |
|---|
| 872 | |
|---|
| 873 | Header files indirectly including themselves were mistakenly |
|---|
| 874 | reported as being dependent on themselves. Recursing through |
|---|
| 875 | header file dependencies is now done after determining the fate |
|---|
| 876 | of the target. |
|---|
| 877 | |
|---|
| 878 | The variable expansion support was expanding $(X)$(UNDEF) as if |
|---|
| 879 | it were $(X). It now expands to an empty list, like it |
|---|
| 880 | should. |
|---|
| 881 | |
|---|
| 882 | The UNIX version of file_build() didn't handle "dir/.suffix" |
|---|
| 883 | right. Now it does. |
|---|
| 884 | |
|---|
| 885 | The VMS command buffer was assumed to be as large as 1024 bytes, |
|---|
| 886 | which isn't the case everywhere as it is related to some weird |
|---|
| 887 | quota. It has been lowered to 256. |
|---|
| 888 | |
|---|
| 889 | $(>) and $(<) wouldn't expand in action blocks if the targets |
|---|
| 890 | were marked with NOTIME. Now they expand properly. |
|---|
| 891 | |
|---|
| 892 | Malloc() return values are now checked. |
|---|
| 893 | |
|---|
| 894 | The variable expansion routine var_expand() is now a little |
|---|
| 895 | faster, by taking a few often needed shortcuts. |
|---|
| 896 | |
|---|
| 897 | The VMS version of file_build() used the wrong length when |
|---|
| 898 | re-rooting file names that already had directory compoents. |
|---|
| 899 | This was fixed. |
|---|
| 900 | |
|---|
| 901 | Various tracing adjustments were made. |
|---|
| 902 | |
|---|
| 903 | 5. Limitations/Known Bugs |
|---|
| 904 | |
|---|
| 905 | The new Windows/NT support has only been marginally tested. It |
|---|
| 906 | is dependent on certain variables being set depending on which |
|---|
| 907 | compiler you are using. You'll need to look in the file |
|---|
| 908 | Jambase and see what variables are expected to be set. |
|---|
| 909 | |
|---|
| 910 | The VMS support has been tested, courtesy of the DEC guest |
|---|
| 911 | machine, but has not been hammered fully in release 2.0. It |
|---|
| 912 | was used quite a bit in Jam 1.0. |
|---|
| 913 | |
|---|
| 914 | Jam clean when there is nothing to clean claims it is updating |
|---|
| 915 | a target. |
|---|
| 916 | |
|---|
| 917 | Because the include statement works by pushing a new file in |
|---|
| 918 | the input stream of the scanner rather than recursively |
|---|
| 919 | invoking the parser on the new file, multiple include |
|---|
| 920 | statements in a rule's procedure causes the files to be |
|---|
| 921 | included in reverse order. |
|---|
| 922 | |
|---|
| 923 | If the include statement appears inside an if block, the |
|---|
| 924 | parser's attempt to find the else will cause the text of the |
|---|
| 925 | included file to appear after the first token following the |
|---|
| 926 | statement block. This is rarely what is intended. |
|---|
| 927 | |
|---|
| 928 | In a rule's actions, only $(<) and $(>) refer to the bound file |
|---|
| 929 | names: all other variable references get the unbound names. |
|---|
| 930 | This is a pain for $(NEEDLIBS), because it means that library |
|---|
| 931 | path can't be bound using $(SEARCH) and $(LOCATE). |
|---|
| 932 | |
|---|
| 933 | With the -j flag, errors from failed commands can get |
|---|
| 934 | staggeringly mixed up. Also, because targets tend to get built |
|---|
| 935 | in a quickest-first ordering, dependency information must be |
|---|
| 936 | quite exact. Finally, beware of parallelizing commands that |
|---|
| 937 | drop fixed-named files into the current directory, like yacc(1) |
|---|
| 938 | does. |
|---|
| 939 | |
|---|
| 940 | A poorly set $(JAMSHELL) is likely to result in silent |
|---|
| 941 | failure. |
|---|