1=============================================================================== 2=============================================================================== 3 4 5Release notes for Jam 2.5 6(aka Jam - make(1) redux) 7 80. Changes between 2.5rc1 and 2.5rc2: 9 10 Several uninitialized memory accesses have been corrected in 11 var_expand() and file_archscan(), thanks to Matt Armstrong. 12 13 Fix 'actions updated' broken by change 2487. (See the 14 description to change 2612 for details). 15 16 Fix "includes of includes not being considered", broken by 2499. 17 (See the description to change 2614 for details). 18 19 Remove NT FQuote rule, as, \" is required to pass quotes on 20 the command line. 21 22 Porting change: allow jam to build with BorlandC 5.5 23 24 Porting change: for WinXP IA64; set MSVCNT to the root of the 25 SDK and MSVCVer to Win64; change handle type to long long (too 26 much to include windows.h?); bury IA64 in the library path in 27 Jambase. 28 29 Porting change: Mac classic MPW Codewarrior 7 upgrades: minor 30 compiling issues, new paths in Jambase for libraries and 31 includes, and separate out GenFile1 that sets PATH for UNIX 32 only, as it does't work under MPW (or anything other than with 33 sh). 34 35 Porting change: Minor Cray porting: make hashitem()'s key 36 value unsigned so we're guaranteed no integer overflows. 37 38 SubDir's support for an externally set TOP variable was broken 39 in 2.5rc1. It now works as it did in 2.4. Further, using SubDir 40 to include a subpart of an SubDir tree now works. Previously, 41 you could only include the root of another SubDir tree. For example, 42 43 SubDir ALL src builds ; 44 SubInclude ALL src server support ; 45 46 Essentially includes the ../server/support/Jamfile, without getting 47 confused as to the current directory. 48 490.1. Changes between 2.5rc2 and 2.5rc3: 50 51 More SubDir work after rc2: if a Jamrules invoked SubDir to 52 establish other roots, and that Jamrules isn't in the current 53 directory, the roots it established were wrong. 54 55 Fix mysterious rebuild problem: in an attempt to make 'jam -dc' 56 output report headers updates more accurately, internal (header 57 collection) targets were being bound as T_BIND_PARENTS so that 58 they could carry the timestamp of the actual source file. But 59 that caused the fate of the internal node to be marked as 60 T_FATE_NEEDTMP if anything they included was newer, and that 61 easily happens among header files (something is always newer 62 than something else). Now internal targets carry their parents 63 time, but with T_BIND_UNBOUND, like other NOTFILE targets. 64 65 Remove temp .bat files created on NT. They used to all have 66 the same name and get reused, but with 2.5 the names were salted 67 with the PID and they would litter $TEMP. Now they get removed 68 after being used. 69 70 Undocumented support for SUBDIRRULES, user-provided rules 71 to invoke at the end of the SubDir rule, and SUBDIRRESET, 72 SUBDIR variables to reset (like SUBDIRC++FLAGS, SUBDIRHDRS, etc) 73 for each new SubDir. 74 751. Release info: 76 77 Jam 2.5 78 January 20, 2002 79 VERSION 2.5 80 812. Compatibility 82 83 Jam 2.5 is upward compatible with Jam 2.4 84 85 The Jam 2.5 language is a superset of the 2.4 language; 86 Jamfiles, Jambase, and other rulesets used in 2.4 can be used 87 with the 2.5 language support. 88 893. Changes since 2.4. 90 913.1. Changes to Jam Language 92 93 The 'return' statement now actually returns, and there are now 94 break & continue statements for for & while loops. 95 963.2. Jambase Changes 97 98 MkDir now grists directories with 'dir', so that directory 99 targets can be distinguished from other targets. 100 101 SubDir now allows multiple overlapping roots (top level 102 directories): the first SubDir of a new root uses the CWD of 103 jam to set that root; subsquent SubDirs use the current SUBDIR 104 to set the new root. New FSubDirPath to compute a path (given 105 SubDir arguments) and SubRules to include another root's 106 Jamrules. Jamrules only included if present; no error issued 107 if no Jamrules file. 108 109 $(RMDIR) has been defined for NT and defaulted to $(RM) 110 everwhere else. Not much tested. For Michael Champigny. 111 112 GenFile actions (on UNIX) now put . in the PATH for the execution 113 of the command, so that (at least) when jam builds itself . does 114 not need to be in the global path. It is the rare case where a 115 target bound in the current directory can't be used directly, 116 so we fudge it by setting PATH. 117 1183.3 'jam' Changes (See Jam.html) 119 120 The whole /MR of Jam's name has been dropped. It was intended 121 to avoid trademark infringement of JYACC's JAM, but as far as 122 we can tell (a) it wasn't enough to avoid infringement and (b) 123 the trademark has lapsed anyhow. 124 125 If header dependencies cause an object to be recompiled and 126 the source file is a temporary, the temporary is now 127 reconstructed. Previously, headers weren't considered when 128 deciding when to reconstruct a temporary. 129 130 -d has been reworked to make it easier to display more useful 131 tracing information separate from the debugging gunk: 132 133 -da - show all actions (formerly -d2) 134 -dc - show 'causes' for rebuilding (new output) 135 -dd - show dependencies (new output) 136 -dm - show make graph (aka -d3) 137 -dx - show executable text (formerly -d2) 138 139 -dd is new, and more display options are anticipated. 140 141 -n now implies -dax. 142 143 The message "...using xxx..." now only shows up with -da. 144 145 Jam.html was extensively updated, in an attempt at lucidity. 146 1473.4. Jam internal code changes 148 149 Removed spurious search() in 'on' statement handling, thanks 150 (again) to Ingo Weinhold. 151 152 Fix 'includes' support so that included files aren't treated 153 as direct dependencies during the command execution phase. If 154 an included file failed to build, make1() would bypass the 155 including file. Now make0() appends each child's 'includes' 156 onto its own 'depends' list, eliminating 'includes'-specific 157 code in make0() and make1(). 158 159 Rewrite of the past: updated all jam's source with comments to 160 reflect changes since about 2.3, very early 2001. 161 162 1634. Fixed bugs 164 165 Fixed the description of the :E modifier in Jam.html. 166 167 Setting target-specific variables while under the influence of 168 the target's target-specific variables caused the _global_ values 169 to be modified. This happened both during header file scanning 170 (HdrRule is called when target-specific variables are in effect) 171 and with the "on target statement" syntax. Now setting 172 target-specific variables works again. Thanks to Matt Armstrong. 173 174 Setting "var on target ?= value" now works as expected: if the 175 variable is already set on the target, it is left unchanged. 176 Previously, ?= was ignored and the variable was set anyway. 177 Thanks to Chris Antos. 178 179 Variable expansion in actions has always put an extra blank 180 space after the last list element, but the expansion is described 181 in the code as "space separated". Now the last blank is suppressed 182 to match. From Miklos Fazekas. 183 184 The temp file name used by jam for .bat files on NT now contains 185 jam's pid, so that multiple jams can run on the same system (with 186 the same $TEMP). Thanks to Steve Anichini. 187 188 Several uninitialized memory accesses have been corrected in 189 var_expand() and file_archscan(), thanks to Matt Armstrong. 190 1915. Porting 192 193 The Makefile now uses $(EXENAME) (./jam0 on UNIX, .\jam0.exe 194 on NT) instead of just "jam0", so that . doesn't need to be in 195 your PATH to bootstrap. 196 197 MACOSX updates: use 'ar' instead of libtool, as libtool can't 198 update a library and we archive too many things to do it in 199 one go; add piles of code to file_archscan() to handle new 200 BSD4.4 style "#1/nnnn" archive entry names, where the real 201 entry name follows the header and nnnn is the length of the 202 name. 203 204 The jam code underwent a const-ing, to work with compilers 205 that don't like "" being passed as a non-const char *. 206 207 Compiling on solaris w/ sparc now sets OSPLAT to "sparc". 208 Previously, it suppressed this, assuming (wrongly) that sparc 209 was the only solaris platform. Thanks to Michael Champigny 210 <michael.champigny@intel.com>. 211 212 Jambase no longer announces the compiler it is using on 213 Windows. It doesn't announce anything else, so why? 214 215 Jambase no longer refers to advapi32.lib on NT, as it isn't 216 needed for linking jam itself and it seems to move from 217 release to release (of MS Visual Studio). 218 219 Makefile/Jambase: BEOS updates from "Ingo Weinhold" 220 <bonefish@cs.tu-berlin.de>. 221 222 The NoCare rule can be used to suppress error messages when 223 an 'include' file can't be found. 224 225 AIX "big" archives are now supported, thanks to suggestions 226 from Randy Roesler. 227 228 MSVCDIR now works as well as MSVCNT for the Microsoft Visual C 229 compiler directory. It changed names in VC 6.0. Thanks to 230 Matt Armstrong. 231 232 Allow jam to build with BorlandC 5.5 233 234 For WinXP IA64; set MSVCNT to the root of the SDK and MSVCVer 235 to Win64; change handle type to long long (too much to include 236 windows.h?); bury IA64 in the library path in Jambase. 237 238 Mac classic MPW Codewarrior 7 upgrades: minor compiling 239 issues, new paths in Jambase for libraries and includes, and 240 separate out GenFile1 that sets PATH for UNIX only, as it 241 does't work under MPW (or anything other than with sh). 242 243 Minor Cray porting: make hashitem()'s key value unsigned so 244 we're guaranteed no integer overflows. 245 246 247=============================================================================== 248=============================================================================== 249 250 251Release notes for Jam 2.4 252(aka Jam - make(1) redux) 253 2541. Release info: 255 256 Jam 2.4 257 March, 21, 2002 258 VERSION 2.4 259 2602. Compatibility 261 262 Jam 2.4 is upward compatible with Jam 2.3 263 264 The Jam 2.4 language is a superset of the 2.3 language; 265 Jamfiles, Jambase, and other rulesets used in 2.3 can be used 266 with the 2.4 language support. 267 2683. Changes since 2.3. 269 2703.1. Changes to Jam Language 271 272 The mechanism for calling rules that return values - "[ rule 273 args ...]", (and 'return' in the rule body), is now a 274 documented part of the language. 275 276 Add "on <target> <rulename> <field1> ..." syntax, to invoke a 277 rule under the influence of a target's specific variables. 278 279 Add "[ on targ rule ... ]" to call a rule returning a value, 280 under the influence of a target's specific variables. 281 282 New 'Glob' builtin that returns a list of files, given a list 283 of directories, and a list of filename patterns. 284 285 New 'while expr { block }' construct. 286 287 New :E=value modifier provides default value if variable unset. 288 289 New :J=joinval modifier concatenates list elements into single 290 element, separated by joinval. 291 292 \ can now be used to escape a space (or any single whitespace 293 character), so that you don't have to resort to quotes. 294 295 New 'Match regexp : string' rule matches regexp against string 296 and returns list of results. 297 298 Rules can now be invoked indirectly, through variable names. 299 If the variable expands to an empty list, no rule is run. 300 If the variable expands to multiple entries, each rule is 301 run with the same arguments. The result of the rule invocation 302 is the concatenation of the results of the rules invoked. 303 304 'Echo' and 'Exit' now have aliases 'echo' and 'exit', since it 305 is really hard to tell that these are built-in rules and not 306 part of the language, like 'include'. Real rules continue to 307 start with a capital. 308 3093.2. Jambase Changes 310 311 Support for YACCGEN, the suffix used on generated yacc output. 312 313 Fix ups to have jam and p4 build with borland C 5.5, 314 and minor win98 jam support for jam clean 315 316 SubDirHdrs now takes directory names in the same format as 317 SubInclude : one directory element per word. 318 319 More portable support for specifying includes and #defines: 320 New ASHDRS, CCHDRS, CCDEFS, DEFINES, ObjectDefines, FQuote, 321 FIncludes, FDefines. Ordering of cc and c++ flags grossly 322 rearranged. 323 324 Jambase has been compacted by applying the new E: and J: 325 expansion modifiers. 326 327 New SoftLink rule, courtesy of David Lindes. It currently 328 assumes you can pass a -s flag to $(LN). 329 3303.3 'jam' Changes (See Jam.html) 331 332 Added '-q' (quit quick) option; jam will exit promptly (as if it 333 received an interrupt), as soon as any target fails. 334 335 Added experimental '-g' (build newest sources first) option: 336 all things being equal, normally targets are simply built in 337 the order they appear in the Jamfiles. With this flag, targets 338 with the newest sources are built first. From an idea by Arnt 339 Gulbrandsen. Undocumented (outside this note). 340 3413.4. Jam internal code changes 342 343 jamgram.yy now defines YYMAXDEPTH to 10000, what it is on 344 FreeBSD, for older yaccs that left it at 150 or so. This is 345 needed for the right-recursion now used in the grammar. 346 347 Optimize rule compilation, with right-recursion instead of left. 348 349 Split jam's built-in rules out to builtins.c from compile.c, 350 so that compile.c only deals with the language. 351 352 Split jam's pathsys.h from filesys.h, since they are really 353 two different pieces. 354 355 evaluate_if(), which evaluated the condition tree for 'if' and 356 returned an int, has been replaced with compile_eval(), which does 357 essentially the same but returns a LIST. 358 3594. Fixed bugs 360 361 Missing TEMPORARY targets with multiple parents no longer spoil one 362 parent's time with another. The parents' time is used for comparison 363 with dependents, but no longer taken on as the target's own time. 364 365 'actions updated', not 'actions together', now protects targets 366 from being deleted on failed/interrupted updates. 367 368 Fixed broken $(v[1-]), which always returned an empty expansion. 369 Thanks to Ian Godin <ian@sgrail.com>. 370 371 Defining a rule within another rule, and invoking the enclosing 372 rule more than once, would result in giving the first rule a 373 null definition. Fixed. 374 375 $(d:P) now works properly on the mac, climbing up directories. 376 Thanks to Miklos Fazekas <boga@mac.com>. 377 378 No longer (sometimes) treat \ as a directory separator on 379 UNIX. It isn't supposed to be, but was due to bungled ifdefs. 380 381 Applying just :U or :D (or :E, :J) mods no longer causes the 382 variable value to be treated as a filename (parsed and rebuilt 383 using the OS specific pathsys routines). Previously, if _any_ 384 mods were present then the value was parsed and rebuilt as if 385 a filename, and that could in certain cases munge the value. 386 Only the file modifiers (:GDBSM) treat the value as a 387 filename. 388 389 Four rules makeCommon, makeGrist, makeString, makeSubDir from 390 jam 2.2 missing in 2.3 have been re-added, with apologies to 391 dtb@cisco.com. 392 393 Return status more likely to be correct when using -d0, now that 394 targets are could as being built even with no debugging output. 395 Thanks to Miklos Fazekas <boga@mac.com>. 396 397 yyacc now suffixes all terminals it defines with _t, so that they 398 don't conflict with other symbols (like RULE with the typedef 399 in rules.h). Thanks to Michael Allard. 400 401 InstallInto now handles multiple sources properly, rather than 402 acting as if each installed target depended on all sources to 403 be installed. $(INSTALLGRIST) is now the default grist for 404 installed targets, rather than the hardcoded 'installed'. Thanks 405 to Stephen Goodson. 406 4075. Porting 408 409 [MACINTOSH] Paths are now downshifted (internally) so as to 410 handle its case insensitivity. Thanks to Miklos Fazekas 411 <boga@mac.com>. 412 413 [NT] MS changed the macro for the IA64 Windows NT 64bit 414 compiler. 415 416 [CYGWIN] Cygwin jam porting: dance around bison and yyacc. 417 Use bison's -y flag to use yacc's output file naming 418 conventions, and don't use yyacc on systems whose SUFEXE is 419 set. 420 421 [VMS] The Jambase itself was not formatting the CCHDRS and 422 CCDEFS properly: on VMS they can't be appended to, because 423 multiple /define or /include directives don't work. Instead 424 now CCHDRS and CCDEFS is reformatted from HDRS and DEFINES 425 anytime those latter two change. This requires the recent 426 change to jam to allow access to target-specific variables 427 when setting other variables. 428 429 [VMS] Remove exception call when file_dirscan() can't, for 430 some reason, scan a directory. Use a better set of #ifdefs to 431 determine if we're on a vax, rather than relying on the C 432 compiler being a specific version: we're able to build with 433 the C++ compiler now. 434 435 [VMS] Port new jam to run with just cxx compiler. 436 (The C compiler being a extra-cost item). 437 438 [NT] Add entry for DevStudio when the settings are already in the 439 system environment. 440 441 [NT] default $(MV) to "move /y" in Jambase. 442 443 [MINGW] Mingw port by Max Blagai. 444 445=============================================================================== 446=============================================================================== 447 448 449Release notes for Jam 2.3 450(aka Jam - make(1) redux) 451 4520. Bugs fixed since 2.3.1 453 454 PATCHLEVEL 2 - 3/12/2001 455 456 NOCARE changed back: it once again does not applies to targets 457 with sources and/or actions. In 2.3 it was changed to apply to 458 such targets, but that broke header file builds: files that are 459 #included get marked with NOCARE, but if they have source or 460 actions, they still should get built. 461 4621. Release info: 463 464 Jam 2.3 465 November 16, 2000 466 VERSION 2.3 467 PATCHLEVEL 1 468 4692. Compatibility 470 471 Jam 2.3 is upward compatible with Jam 2.2. 472 473 The Jam 2.3 language is a superset of the 2.2 language; 474 Jamfiles, Jambase, and other rulesets used in 2.2 can be used 475 with the 2.3 language support. 476 4773. Changes since 2.2 478 4793.1. Changes to Jam Language 480 481 Rules now can have values, which can expanded into a list with 482 the new "[ rule args ... ]" syntax. A rule's value is the value 483 of its last statement, though only the following statements have 484 values: if (value of the leg chosen), switch (ditto), set (value 485 of the resulting variable), return (its arguments). Note that 486 'return' doesn't actually return. This support is EXPERIEMENTAL 487 and otherwise undocumented. (2.3.1) 488 489 Because of the new way lists are processed, if a rule has no 490 targets a warning message is no longer issued. 491 492 NOCARE now applies to targets with sources and/or actions, 493 rather than just those without. 494 4953.2. Jambase Changes 496 497 The HDRPATTERN variable now allows for leading blanks before 498 the #include, to keep up with ANSI. By john@nanaon-sha.co.jp 499 (John Belmonte) (2.2.3). 500 501 HDRPATTERN has been adjusted to avoid mistaking cases like: 502 503 # include <time.h> /* could be <sys/time.h> */ 504 505 MkDir now NOUPDATE's $(DOT), so that there are no dependencies 506 on the current directory's timestamp. By john@nanaon-sha.co.jp 507 (John Belmonte). 508 509 The old mock functions like makeDirName, which assigned their 510 results to the variable named as their first argument, have 511 been replaced with real functions using the new [] syntax. 512 E.g. "makeDirName foo : bar ola" is now "foo = [ fDirName bar ]" 513 514 Install now always does a cp/chmod/etc, rather than using 515 the system's install(1), which invariably seems broken. 516 5173.3. Jam internal code changes 518 519 $JAMUNAME is set on UNIX. (2.2.4). 520 521 Jam ANSI-fied (2.3.0). 522 523 jam.h now defines a bunch of symbols used by the other source 524 files, so as minimize compiler- and platform-specific ifdefs. 525 526 OSVER is no longer set by jam.h (it was only set for AIX). 527 Jam does not depend on this variable at all, except to set 528 $(OSFULL), which is used to determine jam's build directory. 529 If the user needs to distinguish between various revs of 530 OSs, he must set OSVER in the environment. 531 5324. Fixed bugs 533 534 Redefining a rule while it was executing could cause jam to 535 crash. Reference counts are now used to prevent that, thanks 536 to Matt Armstrong. 537 538 Logic for computing chunk size when executing PIECEMEAL rules 539 has been reworked to be a little more accurate, without danger 540 of overflow, at the cost of being a little more compute intensive. 541 Instead of computing an estimate chunksize in the (now gone) 542 make1chunk(), make1cmds() now just goes full bore and tries to 543 use all args. When that fails, it backs off by 10% of the source 544 args until the command fits. It takes a little bit more compute 545 time compared to the old logic, but when you're executing actions 546 to build all of Shinola it's still pretty small in the scheme 547 of things. 548 549 The NT handle leak in execunix.c has been fixed, thanks to 550 Gurusamy Sarathy. (2.2.1). 551 5525. Porting 553 554 Platforms newly supported or updated: 555 556 AmigaOS (with gcc), courtesy of Alain Penders (2.2.2). 557 558 Beos 559 560 CYGWIN 1.1.4, courtesy of John Belmonte <john@nanaon-sha.co.jp>. 561 562 IBM AS400 via Visual Age on NT (primitive) 563 564 IBM OS/390 Unix System Services 565 566 Linux SuSE on OS390 567 568 Linux Mips, ARM 569 570 Lynx 571 572 HPUX 11, IA64 573 574 Mac OS X Server, courtesy of Jeff_Sickel@sickel.com (2.2.5). 575 576 Mac Rhapsody 577 578 MPE IX 6.0 579 580 NetBSD 581 582 QNX RTP (QNX 6.0) 583 584 Siemens Sinix 585 586 UNICOS 587 588 VMS 6.2, 7.1 589 590 Windows NT IA64 591 5925.1. NT Porting Notes 593 594 Always create tmp .bat file for actions if JAMSHELL is set. 595 That way, if JAMSHELL is a .bat file itself, it can handle 596 single-command actions with more than 9 cmd line args. 597 598 COMSPEC is no longer examined: cmd.exe is always used 599 instead. Only cmd.exe can execute the Jambase rules anyhow. 600 601 Jam can be built with Borland C++ 5.5. 602 603 OS2 fixes: InstallBin now works. Filenames are now downshifted, 604 so mixed case works better there, too. file_dirscan() can now scan 605 the root ("c:\" or "\") directory, which it couldn't handle before. 606 607 var_defines now ignores OS=Windows_NT, because it conflicts 608 with Jam's setting of OS (to NT). 609 6105.2. Mac OS 8/9 Notes 611 612 The support for Mac is curious at best. It runs under MPW. 613 614 It requires CodeWarrior Pro 5, but no longer requires GUSI. 615 616 Use Build.mpw to bootstrap the build. 617 618 The Mac specific definitions in the Jambase are not intended 619 to be of general purpose, but are sufficient to have Jam build 620 itself. 621 622=============================================================================== 623=============================================================================== 624 625 626Release Notes for Jam 2.2 627 6281. Release info: 629 630 Jam 2.2 631 October 22, 1997 632 VERSION 2.2 633 PATCHLEVEL 1 634 6352. Compatibility 636 637 Jam 2.2 is a roll-up of 'Jam - make(1) redux' release 2.1+. 638 Most of the changes described below were available before this, 639 in the jam.2.1.plus.tar ball. 640 641 The Jam 2.2 language is a superset of the 2.1 language; 642 Jamfiles, Jambase, and other rulesets used in 2.1 can be used 643 with the 2.2 language support. 644 645 See 'Jambase Changes', below, to see if your Jamfiles need any 646 changes to work with the 2.2 Jambase. 647 648 6493. Changes Since 2.1 650 651 New product name: Jam. (Executable program is still named 'jam'.) 652 653 Documentation rewritten; HTML versions supplied. 654 655 6563.1 Changes to Jam Language 657 658 Rules may now have more fields than just $(<) and $(>). 659 660 Local variables are now supported. 661 662 The expression 'if $(A) in $(B)' is now supported. 663 664 New variable modifiers :U and :L result in uppercased or lowercased 665 values. 666 667 New variable modifier :P reliably results in parent directory 668 of either a file or directory. (Previously, :D was used, but on VMS 669 :D of a directory name is just the directory name.) 670 671 The :S variable modifier now results in the _last_ suffix if a 672 filename has more than one dot (.) in it. 673 674 New predefined $(JAMDATE) variable is initialized at runtime for 675 simple date stamping. 676 677 New predefined variables $(OSVER) and $(OSPLAT) are used to 678 distinguish among operating system versions and hardware platforms, 679 when possible. 680 681 New 'bind' qualifier on action definitions allows variables 682 other than $(<) and $(>) to be bound with SEARCH and LOCATE paths. 683 684 Action buffer size is no longer limited by MAXCMD. Instead, each 685 line in an action is limited by MAXLINE, defined for each OS, and 686 the entire action size is limited by CMDBUF. 687 688 6893.2 Jambase Changes (See Jamfile.html) 690 691 Jambase has been reworked to incorporate new language features. 692 693 A handful of new utility rules has been added: makeString, 694 makeDirName, etc. 695 696 New HDRGRIST variable in Jambase allows for headers with the same 697 name to be distinguished. 698 699 LOCATE_TARGET now has a new flavor, LOCATE_SOURCE, that is used by 700 rules that generate source files (e.g., Yacc and Lex). 701 702 Header file includes now happen in the proper order. The limit of 703 10 include files has been eliminated. 704 705 The old "Install" rule is no longer available. Use InstallBin, 706 InstallFile, InstallLib, InstallMan, or InstallShell instead. 707 708 7093.3 'jam' Changes (See Jam.html) 710 711 'jam' can now be built as a stand-alone program, with Jambase 712 compiled into the executable. An external or alternate Jambase can 713 still be referenced explicitly with -f. 714 715 On command failure, 'jam' now emits the text of the command that 716 failed. This is a compromise between the normal -d1 behavior (where 717 commands were never seen) and -d2 (where commands are always seen). 718 719 'jam' now exits non-zero if it doesn't have a total success. A parse 720 error, sources that can't be found, and targets that can't be built 721 all generate non-zero exit status. 722 723 The debugging levels (-d flags) have been slightly redefined. 724 725 The supplied Jamfile now builds 'jam' into a platform specific 726 subdirectory. This lets you use the same source directory to 727 build 'jam' for more than one platform. 728 729 The supplied Jamfile does not rebuild generated source files by 730 default. (They are supplied with the distribution.) See Jamfile 731 for more information. 732 733 7344. Fixed Bugs 735 736 The 'include' bug has finally been fixed, so that include 737 statements take effect exactly when they are executed, 738 rather than after the current statement block. This also 739 corrects the problem where an 'include' within an 'if' 740 block would wind up including the file one token after the 741 'if' block's closing brace. Credit goes to Thomas Woods 742 for suggesting that the parse tree generation and parse 743 tree execution be paired in their own loop, rather than 744 having the parser execute the tree directly. 745 746 The setting and extracting of grist has been regularized: 747 normally, if you set a component of a filename (using the 748 :DBSMG= modifiers), you are supposed to include the delimiters 749 that set off the component: that is, you say "$(x:S=.suffix)", 750 including the ".". But with grist it was inconsistent 751 between setting and getting: setting grist required no 752 <>'s, while getting grist included them. Getting grist 753 continues to return the <>'s, but now setting grist can 754 either include them (the new way) or not (the old way). 755 756 'actions together' now suppresses duplicate sources from 757 showing up in $(>). 758 759 Accessing variables whose names contained ['s (as happens with 760 MkDir on VMS) wasn't working, because it treated the [ as an 761 array subscript. Now [ and ] are, like :, handled specially so 762 that they can appear in variable values. 763 764 The 'if' statement now compares all elements in expressions; 765 previously, it only compared the first element of each list. 766 767 If a command line in an action is longer than MAXLINE (formerly 768 MAXCMD), 'jam' now issues an error and exits rather than dumping 769 core. 770 771 If a Jamfile ended without a trailing newline, jam dumped core. 772 This has been fixed. 773 774 7755. Porting 776 777 See jam.h for the definitive list of supported platforms. 778 Since 2.1, support has been added for: 779 780 Macintosh MPW 781 Alpha VMS 782 Alpha NT 783 NT PowerPC 784 BeOS 785 MVS OE 786 UNIXWARE 787 QNX 788 SINIX (Nixdorf) 789 OS/2 790 Interactive UNIX (ISC), courtesy of Matthew Newhook 791 792 7935.1 NT Support Fixes 794 795 The NT command executor now handles multiple line actions, by writing 796 multi-line actions to a batch file and executing that. 797 798 Targets are universally lowercased on NT. (Matthew Newhook) 799 800 Concurrent process support is fully enabled for NT. 801 (Gurusamy Sarathy <gsar@engin.umich.edu>) 802 803 Path handling: Jam now knows that the directory component of "D:\" 804 is "D:\", just as on unix it knows that the directory component of 805 "/" is "/". It also now successfully gets the timestamp for "D:\" 806 or just plain "\". 807 808 8095.2 VMS Support Fixes 810 811 VMS support is much, much better now. The path name manipulation 812 routines (in pathvms.c) were more or less rewritten, and they now 813 handle the vagaries of combining directory and file names properly. 814 815 Targets are universally lowercased on VMS. 816 817 Multi-line command blocks on VMS are now executed in a single system() 818 call rather than separate ones for each line, so that actions can 819 be DCL scripts. 820 821=============================================================================== 822=============================================================================== 823 824 825Release notes for Jam 2.1. 826 8271. Release info: 828 Jam 2.1 829 February 1, 1996 830 VERSION 2.1 831 PATCHLEVEL 0 832 8332. Porting 834 835 Linux is now supported. 836 837 FREEBSD is now supported. 838 839 SCO ("M_XENIX") now supported. 840 841 NCR now supported. 842 843 NEXT support from karthy@dannug.dk (Karsten Thygesen) 844 845 DECC support from zinser@axp614.gsi.de (Martin P.J. Zinser) 846 847 I have changes for OS/2, but no way to test them. Volunteers? 848 I have VMS multiprocess support, but no way to test it. Volunteers? 849 8502.1. NT Support fixes. 851 852 The NT support is considerably more real than it was in 2.0. 853 Filent.c had its syntax error corrected, it no longer skips the 854 first entry when scanning directories, and it handles string 855 tables in archives (for long object file names). 856 857 The Jambase was changed a bit to support the various C/C++ 858 compilers on NT, although it has only been thorougly tested 859 with MSVC20. 860 861 You still need to set MSVCNT or BCCROOT to the root of the 862 the compiler's directory tree, and you'll get an error if you 863 don't set it (rather than getting a pile of mysterious errors). 864 8652.2. Other porting fixes. 866 867 SPLITPATH now set up for UNIX (:), NT (;), VMS (,) 868 869 Jambase support for Solaris works better now: the location of 870 AR is hardwired to /usr/ccs/bin/ar and it knowns "install" 871 doesn't take -c. Solaris -- how the mighty have fallen. 872 873 To handle Linux's wacko yacc, jamgram.h is now included after 874 scan.h so that YYSTYPE is define. 875 8763. Jambase Changes (see Jamfile.html) 877 878 SubDir now computes the root directory for the source tree, if 879 the variable naming the root directory isn't set in the environment. 880 It counts the number of directory elements leading from the root 881 to the current directory (as passed to SubDir) and uses that many 882 "../"'s to identify the root. This means that to use SubDir you 883 no longer have to have anything special set in the environment. 884 885 InstallFile is now an alias for InstallLib. 886 887 'first' is now dependency of all pseudo-targets (all, files, 888 exe, lib, shell), so that jamming any of these pseudo-targets 889 also builds any dependencies of 'first'. 890 891 The File rule definition in the Jambase was missing an &. 892 893 The File rule now calls the Clean rule, so that installed files 894 get cleaned. 895 8964. Jam changes (see Jam.html) 897 898 Variables may now be set on the command line with -svar=value. 899 900 Targets marked with NOUPDATE are now immune to the -a (anyhow) 901 flag. Previously, the MkDir rule would try to recreate directories 902 that already exist when jam was invoked with -a. 903 904 A new variable, $(JAMVERSION), joins the small list of built-in 905 variables. It it set to the release of jam, currently "2.1". 906 907 If an actions fails, jam now deletes the target(s). It won't 908 delete libraries or other targets that are composites. This is 909 now consistent with jam's behavior on interrupts (it deletes the 910 targets). 911 912 Jam had a nasty bug when setting multiple variables to the same 913 value: if the first two variable names were the same, the variable 914 value got trashed. This also affected "on target" variables if 915 the first two targets were the same. For example: 916 917 FOO on bar.c bar.c foo.c = a b c ; 918 919 This would mangle the value of FOO for bar.c and foo.c. This has 920 been fixed. 921 922 Jam would generate bogus numbers when reporting the number of 923 targets updated after an interrupt. It now is more careful about 924 counting. 925 926 The debugging flag -d has been extended. In addition to supporting 927 -dx (turn on debugging for all levels up to x) there is also now 928 -d+x (turn on debugging at only level x). The default output 929 level is -d1 (-or d2 if -n is given); this can be turned off with 930 -d0. The debug levels are listed in jam.1 and jam.h. 931 932 The parsing debug output now uses indenting to indicate when 933 one rule invokes another. 934 935=============================================================================== 936=============================================================================== 937 938 939Release notes for Jam 2.0. 940 9411. Release info: 942 Jam 2.0 943 March 10, 1994 944 VERSION 2.0 945 PATCHLEVEL 5 946 9472. Porting 948 949 Windows/NT is now (crudely) supported, courtesy of Brett Taylor 950 and Laura Wingerd. 951 952 COHERENT/386 is now supported, courtesy of Fred Smith. 953 954 Solaris archive string table for long archive names is now 955 supported, thanks to Mike Matrigali. 956 9573. Compatibility 958 959 Jam 2.0 syntax is a superset of Jam 1.0 syntax, and thus it can 960 interpret a Jam 1.0 Jambase. 961 962 The Jam 2.0 Jambase is a superset of the Jam 1.0 Jambase, and 963 thus it can include a Jamfile written for Jam 1.0. 964 9654. Changes from Jam 1.0 to Jam 2.0 966 9674.1. Documentation changes 968 969 New Jamfile.5 manual page, with lots of examples and easy 970 reading. It replaces both the old "Examples" file as well as 971 the old Jambase.5 manual page. 972 973 jam.1 edited by Stephen W. Liddle and Diane Holt. 974 9754.2. Jambase Changes (see Jamfile.5) 976 9774.2.1. New rules: 978 979 There are new rules to make handling subdirectories easier: 980 SubDir, SubInclude, SubDirCcFlags, SubDirHdrs. 981 982 There are new rules to handle file-specific CCFLAGS and HDRS: 983 ObjectCcFlags and ObjectHdrs. 984 985 Misc new rules: HardLink, InstallShell, MkDir. 986 987 New rule "clean" that deletes exactly what jam has built, and 988 "uninstall" that deletes exactly what was installed. 989 990 New rules for handling suffixes .s, .f, .cc, .cpp, .C. 991 9924.2.2. Old rules: 993 994 The InstallBin, Lib, Man, and the new Shell rules now take the 995 destination directory as the target and the files to be copied 996 as sources. These rules formerly took the files to be copied 997 as targets, and used built-in destination directories of 998 $(BINDIR), $(LIBDIR), $(MANDIR), and $(BINDIR). 999 1000 The InstallBin, Lib, Man, and Shell rules use the install(1) 1001 program now, instead of doing their own copying. 1002 1003 The Cc rule now uses -o when possible, rather than moving the 1004 result. Some platforms (Pyramid?) have a broken -o. 1005 1006 Jambase rules taking libraries, objects, and executables now 1007 all ignore the suffixes provided and use the one defined in the 1008 Jambase for the platform. 1009 1010 Stupid yyacc support moved out of Jambase, as jam is its only 1011 likely user. 1012 1013 Jambase now purturbs library sources with a "grist" of 1014 SOURCE_GRIST. 1015 10164.2.3. Misc: 1017 1018 The names of the default rules defined in Jambase have been 1019 lowercased and un-abbreviated, to be more imake(1) like. 1020 1021 The Jambase has been reorganized and sorted, with VMS and NT 1022 support moved in from their own files. 1023 1024 The Jambase has been relocated on UNIX from /usr/local/lib/jam 1025 to /usr/local/lib. 1026 10274.3. Jam changes (see jam.1) 1028 10294.3.1. Flags: 1030 1031 New -a (anyhow) flag: means build everything. 1032 1033 New -j<x> flag: run jobs in parallel. 1034 1035 Old -t now rebuilds the touched target, rather that just the 1036 target's parents. 1037 1038 -n now implies -d2, so that you see what's happening. The 1039 debug level can be subsequently overridden. 1040 1041 New -v to dump version. 1042 10434.3.2. Rules: 1044 1045 New ALWAYS rule behaves like -t: always builds target. 1046 1047 New EXIT rule makes it possible to raise a fatal error. 1048 1049 New LEAVES rule which say target depends only on the update 1050 times of the leaf sources. 1051 1052 New NOUPDATE rule says built targets only if they don't exist. 1053 1054 NOTIME has been renamed NOTFILE, to more accurately reflect its 1055 meaning (it says a target is not to be bound to a file). 1056 10574.3.3. Variables: 1058 1059 New special variable JAMSHELL: argv template for command execution 1060 shell. 1061 1062 Variables, both normal and target-specific, can have their 1063 value appended with the syntax "var += value" or "var on target 1064 += value". 1065 1066 "?=" is now synonymous with "default =". 1067 1068 Imported enviroment variable values are now split at blanks 1069 (:'s if the variable name ends in PATH), so that they become 1070 proper list values. 1071 10724.3.4. Misc: 1073 1074 Files to be sourced with "include" are now bound first, so 1075 $(SEARCH) and $(LOCATE) affect them. They still can't be 1076 built, though. 1077 1078 New modifier on "actions": "existing" causes $(>) to expand 1079 only those files that currently exist. 1080 10814.3.5. Bug fixes: 1082 1083 When scanning tokens known to be argument lists (such as the 1084 arguments to rule invocations and variable assignment), the 1085 parser now tells the scanner to ignore alphabetic keywords, as 1086 all such lists terminate with punctuation keywords (like : or 1087 ;). This way, alphabetic keywords don't need to be quoted when 1088 they appear as arguments. 1089 1090 The scanner has been fixed to handle oversized tokens, 1091 unterminated quotes, unterminated action blocks, and tokens 1092 abutting EOF (i.e. a token with no white space before EOF). 1093 1094 The progress report "...on xth target..." used to count all 1095 targets, rather than just those with updating actions. Since 1096 the original pronouncement of targets to be udpated included 1097 only those with updating actions, the progress report has been 1098 changed to match. 1099 1100 'If' conditionals now must be single arguments. Previously, 1101 they could be zero or more arguments, which didn't make much 1102 sense, and made things like 'foo == bar' true. The comparison 1103 operator is '=', and '==' just looked like the second of three 1104 arguments in the unary "non-empty argument list" conditional. 1105 1106 Header files indirectly including themselves were mistakenly 1107 reported as being dependent on themselves. Recursing through 1108 header file dependencies is now done after determining the fate 1109 of the target. 1110 1111 The variable expansion support was expanding $(X)$(UNDEF) as if 1112 it were $(X). It now expands to an empty list, like it 1113 should. 1114 1115 The UNIX version of file_build() didn't handle "dir/.suffix" 1116 right. Now it does. 1117 1118 The VMS command buffer was assumed to be as large as 1024 bytes, 1119 which isn't the case everywhere as it is related to some weird 1120 quota. It has been lowered to 256. 1121 1122 $(>) and $(<) wouldn't expand in action blocks if the targets 1123 were marked with NOTIME. Now they expand properly. 1124 1125 Malloc() return values are now checked. 1126 1127 The variable expansion routine var_expand() is now a little 1128 faster, by taking a few often needed shortcuts. 1129 1130 The VMS version of file_build() used the wrong length when 1131 re-rooting file names that already had directory compoents. 1132 This was fixed. 1133 1134 Various tracing adjustments were made. 1135 11365. Limitations/Known Bugs 1137 1138 The new Windows/NT support has only been marginally tested. It 1139 is dependent on certain variables being set depending on which 1140 compiler you are using. You'll need to look in the file 1141 Jambase and see what variables are expected to be set. 1142 1143 The VMS support has been tested, courtesy of the DEC guest 1144 machine, but has not been hammered fully in release 2.0. It 1145 was used quite a bit in Jam 1.0. 1146 1147 Jam clean when there is nothing to clean claims it is updating 1148 a target. 1149 1150 Because the include statement works by pushing a new file in 1151 the input stream of the scanner rather than recursively 1152 invoking the parser on the new file, multiple include 1153 statements in a rule's procedure causes the files to be 1154 included in reverse order. 1155 1156 If the include statement appears inside an if block, the 1157 parser's attempt to find the else will cause the text of the 1158 included file to appear after the first token following the 1159 statement block. This is rarely what is intended. 1160 1161 In a rule's actions, only $(<) and $(>) refer to the bound file 1162 names: all other variable references get the unbound names. 1163 This is a pain for $(NEEDLIBS), because it means that library 1164 path can't be bound using $(SEARCH) and $(LOCATE). 1165 1166 With the -j flag, errors from failed commands can get 1167 staggeringly mixed up. Also, because targets tend to get built 1168 in a quickest-first ordering, dependency information must be 1169 quite exact. Finally, beware of parallelizing commands that 1170 drop fixed-named files into the current directory, like yacc(1) 1171 does. 1172 1173 A poorly set $(JAMSHELL) is likely to result in silent 1174 failure. 1175