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