1 ===============================================================================
\r
2 ===============================================================================
\r
5 Release notes for Jam 2.5
\r
6 (aka Jam - make(1) redux)
\r
14 (n.b. Jam 2.5 is merely Jam 2.5rc3 of April 2003 with the rc3
\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
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
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
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
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
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
203 ===============================================================================
\r
204 ===============================================================================
\r
207 Release notes for Jam 2.4
\r
208 (aka Jam - make(1) redux)
\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
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
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
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
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
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
365 [MACINTOSH] Paths are now downshifted (internally) so as to
\r
366 handle its case insensitivity. Thanks to Miklos Fazekas
\r
369 [NT] MS changed the macro for the IA64 Windows NT 64bit
\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
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
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
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
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
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
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
505 The NT handle leak in execunix.c has been fixed, thanks to
\r
506 Gurusamy Sarathy. (2.2.1).
\r
510 Platforms newly supported or updated:
\r
512 AmigaOS (with gcc), courtesy of Alain Penders (2.2.2).
\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
530 Mac OS X Server, courtesy of Jeff_Sickel@sickel.com (2.2.5).
\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
578 ===============================================================================
\r
579 ===============================================================================
\r
582 Release Notes for Jam 2.2
\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
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
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
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
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
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
727 If a Jamfile ended without a trailing newline, jam dumped core.
\r
728 This has been fixed.
\r
733 See jam.h for the definitive list of supported platforms.
\r
734 Since 2.1, support has been added for:
\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
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
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
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
777 ===============================================================================
\r
778 ===============================================================================
\r
781 Release notes for Jam 2.1.
\r
791 Linux is now supported.
\r
793 FREEBSD is now supported.
\r
795 SCO ("M_XENIX") 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
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
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
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
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
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
895 Release notes for Jam 2.0.
\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
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
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
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
969 Jambase now purturbs library sources with a "grist" of
\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
983 4.3. Jam changes (see jam.1)
\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
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
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
1015 New special variable JAMSHELL: argv template for command execution
\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
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
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
1034 New modifier on "actions": "existing" causes $(>) to expand
\r
1035 only those files that currently exist.
\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
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
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
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
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
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
1129 A poorly set $(JAMSHELL) is likely to result in silent
\r