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