1 ===============================================================================
2 ===============================================================================
5 Release notes for Jam 2.5
6 (aka Jam - make(1) redux)
14 (n.b. Jam 2.5 is merely Jam 2.5rc3 of April 2003 with the rc3
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.
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.
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
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)
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.
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.
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.
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
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
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
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
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
203 ===============================================================================
204 ===============================================================================
207 Release notes for Jam 2.4
208 (aka Jam - make(1) redux)
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.
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
280 Jambase has been compacted by applying the new E: and J:
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.
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
345 Four rules makeCommon, makeGrist, makeString, makeSubDir from
346 jam 2.2 missing in 2.3 have been re-added, with apologies to
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
365 [MACINTOSH] Paths are now downshifted (internally) so as to
366 handle its case insensitivity. Thanks to Miklos Fazekas
369 [NT] MS changed the macro for the IA64 Windows NT 64bit
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
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
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.
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.
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.
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
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.
490 Redefining a rule while it was executing could cause jam to
491 crash. Reference counts are now used to prevent that, thanks
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
505 The NT handle leak in execunix.c has been fixed, thanks to
506 Gurusamy Sarathy. (2.2.1).
510 Platforms newly supported or updated:
512 AmigaOS (with gcc), courtesy of Alain Penders (2.2.2).
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
530 Mac OS X Server, courtesy of Jeff_Sickel@sickel.com (2.2.5).
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
578 ===============================================================================
579 ===============================================================================
582 Release Notes for Jam 2.2
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.
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
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,
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,
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.
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
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
727 If a Jamfile ended without a trailing newline, jam dumped core.
733 See jam.h for the definitive list of supported platforms.
734 Since 2.1, support has been added for:
746 Interactive UNIX (ISC), courtesy of Matthew Newhook
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:\"
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
777 ===============================================================================
778 ===============================================================================
781 Release notes for Jam 2.1.
791 Linux is now supported.
793 FREEBSD is now supported.
795 SCO ("M_XENIX") 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
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
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
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
878 Jam would generate bogus numbers when reporting the number of
879 targets updated after an interrupt. It now is more careful about
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.
905 Windows/NT is now (crudely) supported, courtesy of Brett Taylor
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.
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)
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.
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
969 Jambase now purturbs library sources with a "grist" of
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
983 4.3. Jam changes (see jam.1)
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
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.
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).
1015 New special variable JAMSHELL: argv template for command execution
1018 Variables, both normal and target-specific, can have their
1019 value appended with the syntax "var += value" or "var on target
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
1030 Files to be sourced with "include" are now bound first, so
1031 $(SEARCH) and $(LOCATE) affect them. They still can't be
1034 New modifier on "actions": "existing" causes $(>) to expand
1035 only those files that currently exist.
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
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
1067 The variable expansion support was expanding $(X)$(UNDEF) as if
1068 it were $(X). It now expands to an empty list, like it
1071 The UNIX version of file_build() didn't handle "dir/.suffix"
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.
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
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)
1129 A poorly set $(JAMSHELL) is likely to result in silent