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