RELNOTES #33

  • //
  • guest/
  • richard_geiger/
  • intjam/
  • src/
  • RELNOTES
  • View
  • Commits
  • Open Download .zip Download (28 KB)
Release notes for Jam/MR [UNRELEASED]
(aka Jam - make(1) redux)

*** Note: These Release notes represent work in progress,
*** not a completed release!

1.  Release info: (TENTATIVE)

	Jam/MR 2.4 (TENTATIVE, IN PROGRESS!)
	Month, dd, 2002
	VERSION 2.4 (TENTATIVE, IN PROGRESS!)

2.  Compatibility

	Jam 2.4 is upward compatible with Jam 2.3

	The Jam 2.4 language is a superset of the 2.3 language;
	Jamfiles, Jambase, and other rulesets used in 2.3 can be used
	with the 2.4 language support.

3.  Changes since 2.3.

3.1.  Changes to Jam Language

	The mechanism for calling rules that return values - "[ rule
	args ...]", (and 'return' in the rule body), is now a
	documented part of the language.

	Add "on <target> <rulename> <field1> ..." syntax, to invoke a
	rule under the influence of a target's specific variables.

        Add "[ on targ rule ... ]" to call a rule returning a value,
        under the influence of a target's specific variables.

	New 'Glob' builtin that returns a list of files in a list of
	directories, given a list of patterns.

	New 'while expr { block }' construct.

	New :E=value modifier provides default value if variable unset.

	New :J=joinval modifier concatentates list elements into single
		element, separated by joinval.

	\ can now be used to escape a space (or any single whitespace
	character), so that you don't have to resort to quotes. 

	'Echo' and 'Exit' now have aliases 'echo' and 'exit', since it
	is really hard to tell that these are built-in rules and not
	part of the language, like 'include'.  Real rules continue to
	start with a capital.

3.2.  Jambase Changes

	Support for YACCGEN, the suffix used on generated yacc output.

        Fix ups to have jam and p4 build with borland C 5.5,
        and minor win98 jam support for jam clean

	SubDirHdrs now takes directory names in the same format as
	SubInclude : one directory element per word.

	More portable support for specifying includes and #defines:
	New ASHDRS, CCHDRS, CCDEFS, DEFINES, ObjectDefines, FQuote,
	FIncludes, FDefines.  Ordering of cc and c++ flags grossly
	rearranged.

	Jambase has been compacted by applying the new E: and J:
	expansion modifiers.

3.3.  Jam internal code changes

	Optimize rule compilation, with right-recursion instead of left.

        Split jam's built-in rules out to builtins.c from compile.c,
        so that compile.c only deals with the language.

        Split jam's pathsys.h from filesys.h, since they are really
        two different pieces.

	evaluate_if(), which evaluated the condition tree for 'if' and
	returned an int, has been replaced with compile_eval(), which does
	essentially the same but returns a LIST.

4.  Fixed bugs

	Defining a rule within another rule, and invoking the enclosing
	rule more than once, would result in giving the first rule a
	null definition.  Fixed.

	$(d:P) now works properly on the mac, climbing up directories.
	Thanks to Miklos Fazekas <[email protected]>.

        No longer (sometimes) treat \ as a directory separator on
        UNIX.  It isn't supposed to be, but was due to bungled ifdefs.
        
        Applying just :U or :D (or :E, :J) mods no longer causes the
        variable value to be treated as a filename (parsed and rebuilt
        using the OS specific pathsys routines). Previously, if _any_
        mods were present then the value was parsed and rebuilt as if
        a filename, and that could in certain cases munge the value.
        Only the file modifiers (:GDBSM) treat the value as a
        filename.

	Four rules makeCommon, makeGrist, makeString, makeSubDir from
	jam 2.2 missing in 2.3 have been readded, with apologies to
	[email protected].

	Return status more likely to be correct when using -d0, now that 
	targets are could as being built even with no debugging output.
	Thanks to Miklos Fazekas <[email protected]>.

5.  Porting

	[MACINTOSH] Paths are now downshifted (interally) so as to
	handle its case insensitivity.  Thanks to Miklos Fazekas
	<[email protected]>.

        [NT] MS changed the macro for the IA64 Windows NT 64bit
        compiler.

	[CYGWIN] Cygwin jam porting: dance around bison and yyacc.
	Use bison's -y flag to use yacc's output file naming
	conventions, and don't use yyacc on systems whose SUFEXE is
	set.

	[VMS] The Jambase itself was not formatting the CCHDRS and
        CCDEFS properly: on VMS they can't be appended to, because
        multiple /define or /include directives don't work.  Instead
        now CCHDRS and CCDEFS is reformatted from HDRS and DEFINES
        anytime those latter two change.  This requires the recent
        change to jam to allow access to target-specific variables
        when setting other variables.

        [VMS] Remove exception call when file_dirscan() can't, for
        some reason, scan a directory.  Use a better set of #ifdefs to
        determine if we're on a vax, rather than relying on the C
        compiler being a specific version: we're able to build with
        the C++ compiler now.

	[VMS] Port new jam to run with just cxx compiler.
        (The C compiler being a extra-cost item).

        [NT] Add entry for DevStudio when the settings are already in the
        system environment.

===============================================================================
===============================================================================


Release notes for Jam/MR 2.3
(aka Jam - make(1) redux)

0.  Bugs fixed since 2.3.1

	PATCHLEVEL 2 - 3/12/2001

	NOCARE changed back: it once again does not applies to targets
	with sources and/or actions.  In 2.3 it was changed to apply to
	such targets, but that broke header file builds: files that are
	#included get marked with NOCARE, but if they have source or
	actions, they still should get built.

1.  Release info:

	Jam/MR 2.3
	November 16, 2000
	VERSION 2.3
	PATCHLEVEL 1

2.  Compatibility

	Jam 2.3 is upward compatible with Jam 2.2.

	The Jam 2.3 language is a superset of the 2.2 language;
	Jamfiles, Jambase, and other rulesets used in 2.2 can be used
	with the 2.3 language support.

3.  Changes since 2.2

3.1.  Changes to Jam Language

	Rules now can have values, which can expanded into a list with
	the new "[ rule args ... ]" syntax.  A rule's value is the value
	of its last statement, though only the following statements have
	values: if (value of the leg chosen), switch (ditto), set (value
	of the resulting variable), return (its arguments).  Note that
	'return' doesn't actually return.  This support is EXPERIEMENTAL
	and otherwise undocumented.  (2.3.1)

	Because of the new way lists are processed, if a rule has no
	targets a warning message is no longer issued.

	NOCARE now applies to targets with sources and/or actions,
	rather than just those without.

3.2.  Jambase Changes

	The HDRPATTERN variable now allows for leading blanks before
	the #include, to keep up with ANSI.  By [email protected]
	(John Belmonte) (2.2.3).

	HDRPATTERN has been adjusted to avoid mistaking cases like:

		# include <time.h> /* could be <sys/time.h> */

	MkDir now NOUPDATE's $(DOT), so that there are no dependencies
	on the current directory's timestamp.  By [email protected]
	(John Belmonte).

	The old mock functions like makeDirName, which assigned their
	results to the variable named as their first argument, have
	been replaced with real functions using the new [] synxtax.
	E.g. "makeDirName foo : bar ola" is now "foo = [ fDirName bar ]"

	Install now always does a cp/chmod/etc, rather than using
	the system's install(1), which invariably seems broken.

3.3.  Jam internal code changes

	$JAMUNAME is set on UNIX.  (2.2.4).

	Jam ANSI-fied (2.3.0).

	jam.h now defines a bunch of symbols used by the other source
	files, so as minimize compiler- and platform-specific ifdefs.

	OSVER is no longer set by jam.h (it was only set for AIX).
	Jam does not depend on this variable at all, except to set
	$(OSFULL), which is used to determine jam's build directory.
	If the user needs to distinguish between various revs of 
	OSs, he must set OSVER in the environment.

4.  Fixed bugs

	Redefining a rule while it was executing could cause jam to
	crash.  Reference counts are now used to prevent that, thanks
	to Matt Armstrong.

	Logic for computing chunk size when executing PIECEMEAL rules
	has been reworked to be a little more accurate, without danger
	of overflow, at the cost of being a little more compute intensive.
	Instead of computing an estimate chunksize in the (now gone)
	make1chunk(), make1cmds() now just goes full bore and tries to
	use all args.  When that fails, it backs off by 10% of the source
	args until the command fits.  It takes a little bit more compute
	time compared to the old logic, but when you're executing actions
	to build all of Shinola it's still pretty small in the scheme
	of things.

	The NT handle leak in execunix.c has been fixed, thanks to
	Gurusamy Sarathy.  (2.2.1).

5.  Porting

	Platforms newly supported or updated:

	    AmigaOS (with gcc), courtesy of Alain Penders (2.2.2).

	    Beos

	    CYGWIN 1.1.4, courtesy of John Belmonte <[email protected]>.

	    IBM AS400 via Visual Age on NT (primitive)

	    IBM OS/390 Unix System Services

	    Linux SuSE on OS390

	    Linux Mips, ARM

	    Lynx

	    HPUX 11, IA64

	    Mac OS X Server, courtesy of [email protected] (2.2.5).

	    Mac Rhapsody

	    MPE IX 6.0

	    NetBSD

	    QNX RTP (QNX 6.0)

	    Siemens Sinix

	    UNICOS

	    VMS 6.2, 7.1

	    Windows NT IA64

5.1.  NT Porting Notes

	Always create tmp .bat file for actions if JAMSHELL is set.
	That way, if JAMSHELL is a .bat file itself, it can handle
	single-command actions with more than 9 cmd line args.

	COMSPEC is no longer examined: cmd.exe is always used
	instead.  Only cmd.exe can execute the Jambase rules anyhow.

	Jam can be built with Borland C++ 5.5.

	OS2 fixes: InstallBin now works.  Filenames are now downshifted,
	so mixed case works better there, too.  file_dirscan() can now scan 
	the root ("c:\" or "\") directory, which it couldn't handle before.

	var_defines now ignores OS=Windows_NT, because it conflicts
	with Jam's setting of OS (to NT).

5.2. Mac OS 8/9 Notes

	The support for Mac is curious at best.  It runs under MPW.

	It requires CodeWarrior Pro 5, but no longer requires GUSI.

	Use Build.mpw to bootstrap the build.

	The Mac specific definitions in the Jambase are not intended
	to be of general purpose, but are sufficient to have Jam build
	itself.

===============================================================================
===============================================================================


Release Notes for Jam 2.2

1.  Release info:

	Jam 2.2
	October 22, 1997
	VERSION 2.2
	PATCHLEVEL 1

2. Compatibility

	Jam 2.2 is a roll-up of 'Jam - make(1) redux' release 2.1+.
	Most of the changes described below were available before this,
	in the jam.2.1.plus.tar ball.

	The Jam 2.2 language is a superset of the 2.1 language;
	Jamfiles, Jambase, and other rulesets used in 2.1 can be used
	with the 2.2 language support.

	See 'Jambase Changes', below, to see if your Jamfiles need any
	changes to work with the 2.2 Jambase.


3. Changes Since 2.1

	New product name: Jam. (Executable program is still named 'jam'.)

	Documentation rewritten; HTML versions supplied.


3.1 Changes to Jam Language 

	Rules may now have more fields than just $(<) and $(>).

	Local variables are now supported.

	The expression 'if $(A) in $(B)' is now supported.

	New variable modifiers :U and :L result in uppercased or lowercased
	values.

	New variable modifier :P reliably results in parent directory
	of either a file or directory. (Previously, :D was used, but on VMS
	:D of a directory name is just the directory name.)

	The :S variable modifier now results in the _last_ suffix if a 
	filename has more than one dot (.) in it.

	New predefined $(JAMDATE) variable is initialized at runtime for 
	simple date stamping.

	New predefined variables $(OSVER) and $(OSPLAT) are used to 
	distinguish among operating system versions and hardware platforms,
	when possible.

	New 'bind' qualifier on action definitions allows variables
	other than $(<) and $(>) to be bound with SEARCH and LOCATE paths.

	Action buffer size is no longer limited by MAXCMD. Instead, each 
	line in an action is limited by MAXLINE, defined for each OS, and 
	the entire action size is limited by CMDBUF.


3.2 Jambase Changes (See Jamfile.html)

	Jambase has been reworked to incorporate new language features.

	A handful of new utility rules has been added: makeString,
	makeDirName, etc.

	New HDRGRIST variable in Jambase allows for headers with the same
	name to be distinguished.

	LOCATE_TARGET now has a new flavor, LOCATE_SOURCE, that is used by
	rules that generate source files (e.g., Yacc and Lex).

	Header file includes now happen in the proper order. The limit of
	10 include files has been eliminated.

	The old "Install" rule is no longer available.  Use InstallBin, 
	InstallFile, InstallLib, InstallMan, or InstallShell instead.


3.3 'jam' Changes (See Jam.html)

	'jam' can now be built as a stand-alone program, with Jambase 
	compiled into the executable. An external or alternate Jambase can 
	still be referenced explicitly with -f.

	On command failure, 'jam' now emits the text of the command that 
	failed.  This is a compromise between the normal -d1 behavior (where 
	commands were never seen) and -d2 (where commands are always seen).

	'jam' now exits non-zero if it doesn't have a total success.  A parse
	error, sources that can't be found, and targets that can't be built
	all generate non-zero exit status.
	
	The debugging levels (-d flags) have been slightly redefined.

	The supplied Jamfile now builds 'jam' into a platform specific 
	subdirectory. This lets you use the same source directory to
	build 'jam' for more than one platform.

	The supplied Jamfile does not rebuild generated source files by 
	default. (They are supplied with the distribution.) See Jamfile
	for more information.


4.  Fixed Bugs

	The 'include' bug has finally been fixed, so that include
	statements take effect exactly when they are executed,
	rather than after the current statement block.  This also
	corrects the problem where an 'include' within an 'if'
	block would wind up including the file one token after the
	'if' block's closing brace.  Credit goes to Thomas Woods
	for suggesting that the parse tree generation and parse
	tree execution be paired in their own loop, rather than
	having the parser execute the tree directly.

	The setting and extracting of grist has been regularized:
	normally, if you set a component of a filename (using the
	:DBSMG= modifiers), you are supposed to include the delimiters
	that set off the component:  that is, you say "$(x:S=.suffix)",
	including the ".".  But with grist it was inconsistent
	between setting and getting: setting grist required no
	<>'s, while getting grist included them.   Getting grist
	continues to return the <>'s, but now setting grist can
	either include them (the new way) or not (the old way).

	'actions together' now suppresses duplicate sources from
	showing up in $(>).

	Accessing variables whose names contained ['s (as happens with
	MkDir on VMS) wasn't working, because it treated the [ as an
	array subscript. Now [ and ] are, like :, handled specially so 
	that they can appear in variable values.

	The 'if' statement now compares all elements in expressions;
	previously, it only compared the first element of each list.

	If a command line in an action is longer than MAXLINE (formerly
	MAXCMD), 'jam' now issues an error and exits rather than dumping 
	core.

	If a Jamfile ended without a trailing newline, jam dumped core.
	This has been fixed.


5.  Porting

	See jam.h for the definitive list of supported platforms.
	Since 2.1, support has been added for:

	    Macintosh MPW
	    Alpha VMS
	    Alpha NT
	    NT PowerPC
	    BeOS
	    MVS OE
	    UNIXWARE
	    QNX
	    SINIX (Nixdorf)
	    OS/2
	    Interactive UNIX (ISC), courtesy of Matthew Newhook


5.1 NT Support Fixes

	The NT command executor now handles multiple line actions, by writing
	multi-line actions to a batch file and executing that.
	
	Targets are universally lowercased on NT. (Matthew Newhook)

	Concurrent process support is fully enabled for NT.
	(Gurusamy Sarathy <[email protected]>)
	
	Path handling: Jam now knows that the directory component of "D:\"
	is "D:\", just as on unix it knows that the directory component of
	"/" is "/".  It also now successfully gets the timestamp for "D:\"
	or just plain "\".


5.2 VMS Support Fixes

	VMS support is much, much better now.  The path name manipulation
	routines (in pathvms.c) were more or less rewritten, and they now
	handle the vagaries of combining directory and file names properly.

	Targets are universally lowercased on VMS.

	Multi-line command blocks on VMS are now executed in a single system()
	call rather than separate ones for each line, so that actions can
	be DCL scripts.

===============================================================================
===============================================================================


Release notes for Jam 2.1.

1.  Release info:
	Jam 2.1
	February 1, 1996
	VERSION 2.1
	PATCHLEVEL 0

2.  Porting

	Linux is now supported.

	FREEBSD is now supported.

	SCO ("M_XENIX") now supported.

	NCR now supported.

	NEXT support from [email protected] (Karsten Thygesen)

	DECC support from [email protected] (Martin P.J. Zinser)

	I have changes for OS/2, but no way to test them.  Volunteers?
	I have VMS multiprocess support, but no way to test it.  Volunteers?

2.1.  NT Support fixes.

	The NT support is considerably more real than it was in 2.0.
	Filent.c had its syntax error corrected, it no longer skips the
	first entry when scanning directories, and it handles string
	tables in archives (for long object file names).

	The Jambase was changed a bit to support the various C/C++
	compilers on NT, although it has only been thorougly tested
	with MSVC20.

	You still need to set MSVCNT or BCCROOT to the root of the 
	the compiler's directory tree, and you'll get an error if you
	don't set it (rather than getting a pile of mysterious errors).

2.2.  Other porting fixes.

	SPLITPATH now set up for UNIX (:), NT (;), VMS (,)

	Jambase support for Solaris works better now: the location of
	AR is hardwired to /usr/ccs/bin/ar and it knowns "install"
	doesn't take -c.  Solaris -- how the mighty have fallen.

	To handle Linux's wacko yacc, jamgram.h is now included after
	scan.h so that YYSTYPE is define.

3.  Jambase Changes (see Jamfile.html)

	SubDir now computes the root directory for the source tree, if
	the variable naming the root directory isn't set in the environment.
	It counts the number of directory elements leading from the root
	to the current directory (as passed to SubDir) and uses that many
	"../"'s to identify the root.  This means that to use SubDir you
	no longer have to have anything special set in the environment.

	InstallFile is now an alias for InstallLib.

	'first' is now dependency of all pseudo-targets (all, files, 
	exe, lib, shell), so that jamming any of these pseudo-targets
	also builds any dependencies of 'first'.

	The File rule definition in the Jambase was missing an &.

	The File rule now calls the Clean rule, so that installed files
	get cleaned.

4.  Jam changes (see Jam.html)

	Variables may now be set on the command line with -svar=value.

	Targets marked with NOUPDATE are now immune to the -a (anyhow) 
	flag.  Previously, the MkDir rule would try to recreate directories
	that already exist when jam was invoked with -a.

	A new variable, $(JAMVERSION), joins the small list of built-in 
	variables.  It it set to the release of jam, currently "2.1".

	If an actions fails, jam now deletes the target(s).  It won't
	delete libraries or other targets that are composites.  This is
	now consistent with jam's behavior on interrupts (it deletes the
	targets).

	Jam had a nasty bug when setting multiple variables to the same
	value:  if the first two variable names were the same, the variable
	value got trashed.  This also affected "on target" variables if
	the first two targets were the same.  For example:

		FOO on bar.c bar.c foo.c = a b c ;

	This would mangle the value of FOO for bar.c and foo.c.  This has
	been fixed.

	Jam would generate bogus numbers when reporting the number of
	targets updated after an interrupt.  It now is more careful about
	counting.

	The debugging flag -d has been extended.  In addition to supporting
	-dx (turn on debugging for all levels up to x) there is also now
	-d+x (turn on debugging at only level x).  The default output
	level is -d1 (-or d2 if -n is given); this can be turned off with
	-d0.   The debug levels are listed in jam.1 and jam.h.

	The parsing debug output now uses indenting to indicate when
	one rule invokes another.

===============================================================================
===============================================================================


Release notes for Jam 2.0.

1.  Release info:
	Jam 2.0 
	March 10, 1994
	VERSION 2.0
	PATCHLEVEL 5

2.  Porting

	Windows/NT is now (crudely) supported, courtesy of Brett Taylor
	and Laura Wingerd.  

	COHERENT/386 is now supported, courtesy of Fred Smith.

	Solaris archive string table for long archive names is now
	supported, thanks to Mike Matrigali.

3.  Compatibility

	Jam 2.0 syntax is a superset of Jam 1.0 syntax, and thus it can
	interpret a Jam 1.0 Jambase.

	The Jam 2.0 Jambase is a superset of the Jam 1.0 Jambase, and
	thus it can include a Jamfile written for Jam 1.0.

4.  Changes from Jam 1.0 to Jam 2.0

4.1.  Documentation changes

	New Jamfile.5 manual page, with lots of examples and easy
	reading.  It replaces both the old "Examples" file as well as
	the old Jambase.5 manual page.

	jam.1 edited by Stephen W. Liddle and Diane Holt.

4.2.  Jambase Changes (see Jamfile.5)

4.2.1.  New rules:

	There are new rules to make handling subdirectories easier:
	SubDir, SubInclude, SubDirCcFlags, SubDirHdrs.

	There are new rules to handle file-specific CCFLAGS and HDRS:
	ObjectCcFlags and ObjectHdrs.

	Misc new rules: HardLink, InstallShell, MkDir.

	New rule "clean" that deletes exactly what jam has built, and
	"uninstall" that deletes exactly what was installed.

	New rules for handling suffixes .s, .f, .cc, .cpp, .C.

4.2.2.  Old rules:

	The InstallBin, Lib, Man, and the new Shell rules now take the
	destination directory as the target and the files to be copied
	as sources.  These rules formerly took the files to be copied
	as targets, and used built-in destination directories of
	$(BINDIR), $(LIBDIR), $(MANDIR), and $(BINDIR).

	The InstallBin, Lib, Man, and Shell rules use the install(1)
	program now, instead of doing their own copying.

	The Cc rule now uses -o when possible, rather than moving the
	result.  Some platforms (Pyramid?) have a broken -o.

	Jambase rules taking libraries, objects, and executables now
	all ignore the suffixes provided and use the one defined in the
	Jambase for the platform.

	Stupid yyacc support moved out of Jambase, as jam is its only
	likely user.

	Jambase now purturbs library sources with a "grist" of
	SOURCE_GRIST.

4.2.3.  Misc:

	The names of the default rules defined in Jambase have been
	lowercased and un-abbreviated, to be more imake(1) like.

	The Jambase has been reorganized and sorted, with VMS and NT
	support moved in from their own files.

	The Jambase has been relocated on UNIX from /usr/local/lib/jam
	to /usr/local/lib.

4.3.  Jam changes (see jam.1)

4.3.1.   Flags:

	New -a (anyhow) flag: means build everything.

	New -j<x> flag: run jobs in parallel.

	Old -t now rebuilds the touched target, rather that just the
	target's parents.

	-n now implies -d2, so that you see what's happening.  The
	debug level can be subsequently overridden.

	New -v to dump version.

4.3.2.  Rules:

	New ALWAYS rule behaves like -t: always builds target.

	New EXIT rule makes it possible to raise a fatal error.

	New LEAVES rule which say target depends only on the update
	times of the leaf sources.

	New NOUPDATE rule says built targets only if they don't exist.

	NOTIME has been renamed NOTFILE, to more accurately reflect its
	meaning (it says a target is not to be bound to a file).

4.3.3.  Variables:

	New special variable JAMSHELL: argv template for command execution 
	shell.

	Variables, both normal and target-specific, can have their
	value appended with the syntax "var += value" or "var on target
	+= value".

	"?=" is now synonymous with "default =".

	Imported enviroment variable values are now split at blanks
	(:'s if the variable name ends in PATH), so that they become
	proper list values.

4.3.4.  Misc:

	Files to be sourced with "include" are now bound first, so
	$(SEARCH) and $(LOCATE) affect them.  They still can't be
	built, though.

	New modifier on "actions": "existing" causes $(>) to expand
	only those files that currently exist.

4.3.5.  Bug fixes:

	When scanning tokens known to be argument lists (such as the
	arguments to rule invocations and variable assignment), the
	parser now tells the scanner to ignore alphabetic keywords, as
	all such lists terminate with punctuation keywords (like : or
	;).  This way, alphabetic keywords don't need to be quoted when
	they appear as arguments.

	The scanner has been fixed to handle oversized tokens,
	unterminated quotes, unterminated action blocks, and tokens
	abutting EOF (i.e. a token with no white space before EOF).

	The progress report "...on xth target..." used to count all
	targets, rather than just those with updating actions.  Since
	the original pronouncement of targets to be udpated included
	only those with updating actions, the progress report has been
	changed to match.

	'If' conditionals now must be single arguments.  Previously,
	they could be zero or more arguments, which didn't make much
	sense, and made things like 'foo == bar' true.  The comparison
	operator is '=', and '==' just looked like the second of three
	arguments in the unary "non-empty argument list" conditional.

	Header files indirectly including themselves were mistakenly
	reported as being dependent on themselves.  Recursing through
	header file dependencies is now done after determining the fate
	of the target.

	The variable expansion support was expanding $(X)$(UNDEF) as if
	it were $(X).  It now expands to an empty list, like it
	should.

	The UNIX version of file_build() didn't handle "dir/.suffix"
	right.  Now it does.

	The VMS command buffer was assumed to be as large as 1024 bytes,
	which isn't the case everywhere as it is related to some weird
	quota.  It has been lowered to 256.

	$(>) and $(<) wouldn't expand in action blocks if the targets
	were marked with NOTIME.  Now they expand properly.

	Malloc() return values are now checked.

	The variable expansion routine var_expand() is now a little
	faster, by taking a few often needed shortcuts.

	The VMS version of file_build() used the wrong length when
	re-rooting file names that already had directory compoents.
	This was fixed.

	Various tracing adjustments were made.

5.  Limitations/Known Bugs

	The new Windows/NT support has only been marginally tested.  It
	is dependent on certain variables being set depending on which
	compiler you are using.  You'll need to look in the file
	Jambase and see what variables are expected to be set.

	The VMS support has been tested, courtesy of the DEC guest
	machine, but has not been hammered fully in release 2.0.  It
	was used quite a bit in Jam 1.0.

	Jam clean when there is nothing to clean claims it is updating
	a target.

	Because the include statement works by pushing a new file in
	the input stream of the scanner rather than recursively
	invoking the parser on the new file, multiple include
	statements in a rule's procedure causes the files to be
	included in reverse order.

	If the include statement appears inside an if block, the
	parser's attempt to find the else will cause the text of the
	included file to appear after the first token following the
	statement block.  This is rarely what is intended.

	In a rule's actions, only $(<) and $(>) refer to the bound file
	names:  all other variable references get the unbound names.
	This is a pain for $(NEEDLIBS), because it means that library
	path can't be bound using $(SEARCH) and $(LOCATE).

	With the -j flag, errors from failed commands can get
	staggeringly mixed up.  Also, because targets tend to get built
	in a quickest-first ordering, dependency information must be
	quite exact.  Finally, beware of parallelizing commands that
	drop fixed-named files into the current directory, like yacc(1)
	does.

	A poorly set $(JAMSHELL) is likely to result in silent
	failure.
# Change User Description Committed
#33 1315 Richard Geiger Changes preparing for an integrate back into //pubic/jam/...
#32 1314 Richard Geiger MS changed the macro for the IA64 Windows NT 64bit compiler.

=== computer.perforce.com:1666: Change 27283 by brett@dang on 2001/10/29 10:31:20

Noted as portability change in the RELNOTES. - rmg
#31 1313 Richard Geiger Cygwin jam porting: dance around bison and yyacc.
 Use
bison's -y flag to use yacc's output file naming conventions,
and don't use yyacc on systems whose SUFEXE is set ("the heathen").

=== computer.perforce.com:1666: Change 27145 by perforce@fork-cygwin on 2001/10/23 12:09:12

Noted as portability change in RELNOTES. - rmg
#30 1309 Richard Geiger Fix builds with jam on VMS:

The Jambase itself was not formatting the CCHDRS and CCDEFS
properly: on VMS they can't be appended to, because multiple
/define or /include directives don't work.  Instead now
CCHDRS and CCDEFS is reformatted from HDRS and DEFINES anytime
those latter two change.  This requires the recent change to
jam to allow access to target-specific variables when setting
other variables.

=== computer.perforce.com:1666: Change 21443 by PERFORCE@vulgar on 2001/03/23 12:22:17

Noted as VMS porting change in the RELNOTES. - rmg
#29 1308 Richard Geiger VMS jam porting: remove exception call when file_dirscan()
can't, for some reason, scan a directory.  Use a better
set of #ifdefs to determine if we're on a vax, rather than
relying on the C compiler being a specific version: we're
able to build with the C++ compiler now.

=== computer.perforce.com:1666: Change 21441 by PERFORCE@vulgar on 2001/03/23 12:17:15

Noted in RELNOTES - rmg
#28 1307 Richard Geiger About [ on targ rule ...
]
#27 1305 Richard Geiger Port new jam to run with just cxx compiler, 'cause we're
too cheap to buy the C compiler.

=== computer.perforce.com:1666: Change 21156 by PERFORCE@vulgar on 2001/03/12 16:17:08

This is a VMS portability change, but does touch code compiled on
other platforms.

Added to RELNOTES - rmg
#26 1303 Richard Geiger Downshift mac paths.

=== computer.perforce.com:1666: Change 20797 by seiwald@spice on 2001/02/22 21:33:12
#25 1302 Richard Geiger Add 4 missing rules from jam 2.2.

=== computer.perforce.com:1666: Change 20765 by seiwald@spice on 2001/02/21 09:33:59

Should these be documented in Jambase.html?
#24 1300 Richard Geiger Fix jam return status on 'jam -d0': it wasn't counting built
targets.

=== computer.perforce.com:1666: Change 20522 by seiwald@golly-seiwald on 2001/02/07 09:33:35

Corrected apparent typo ("corrected -> correct") the the RELNOTES. - rmg
#23 1299 Richard Geiger Support for YACCGEN, the suffix used on generated yacc output.

=== computer.perforce.com:1666: Change 20435 by seiwald@thin on 2001/02/02 14:16:48

Add note to RELNOTES & updated Jambase.html.

jambase.c is the rederived version from the integration platform (not the
patch) - rmg
#22 1295 Richard Geiger Support for 'while' statement in jam.
 Useful?  Who knows.

=== computer.perforce.com:1666: Change 20250 by seiwald@golly-seiwald on 2001/01/24 15:54:02

Documented in Jam.html - rmg
#21 1290 Richard Geiger fix ups to have jam and p4 build with borland C 5.5
also minor win98 jam support for jam clean

=== computer.perforce.com:1666: Change 20226 by anton@anton-semele on 2001/01/22 21:41:36

Added rebuilt jambase.c to the change for consistency,
and noted in RLENOTES. - rmg
#20 1287 Richard Geiger Replace evaluate_if() with compile_eval(), which returns a LIST
instead of an int.  No functional change.  This is made in
anticipation of supporting (arithmetic) expression evaluation.

=== computer.perforce.com:1666: Change 20197 by seiwald@spice on 2001/01/21 22:51:39
#19 1281 Richard Geiger About change 1279 (Porting tweak for DevStudio, see change 1279 Desc).
#18 1277 Richard Geiger Fix case where a rule is defined within another rule: it was
zeroing the definition.

=== computer.perforce.com:1666: Change 20035 by seiwald@golly-seiwald on 2001/01/13 23:20:11
#17 1273 Richard Geiger A slew of changes to Jambase to handle more portably cc's -I
and -D flags.  The biggest is the new variable DEFINES, a list
of #defines, which is formatted properly (even on VMS?) for the
command line.  Otherwise, it's hard to get right, because VMS
has a weirdo syntax "/define( x=y, a=b )" and you can only have
one such argument on the command line (or rather, only the last
is paid any attention).

=== computer.perforce.com:1666: Change 20034 by seiwald@golly-seiwald on 2001/01/13 23:14:39

Added to Jambase.html re:
  SubDirHdrs arg changes
  ASHDRS, CCHDRS, CCDEFS not mentioned (internal target-specific)
  DEFINES, ObjectDefines, FQuote, FIncludes, FDefines documented.

In Jambase, adjusted the comment for SubDirHdrs (arg changes).

Rearranged a few of the RELNOTES entries, which were actually
about mods from previous changes.

  - rmg
#16 1262 Richard Geiger Allow :U, :D, :J, and :E to variable mods to work on values
other than filenames.  Previously, if _any_ mods were present
then the value was parsed and rebuilt as if a filename, and that
could in certain cases munge the file.

Further, no longer (sometimes) treat \ as a directory separator
on UNIX.  It isn't supposed to be, but was due to bungled ifdefs.

So now "v = foo\\bar ; Echo $(v:E); " works without translating
the \ to /.

=== computer.perforce.com:1666: Change 20033 by seiwald@golly-seiwald on 2001/01/13 23:10:55

noted in RELNOTES - rmg
#15 1260 Richard Geiger Use new :J and :E variable edits to scrunch Jambase (a little).

=== computer.perforce.com:1666: Change 20002 by seiwald@golly-seiwald on 2001/01/11 09:51:32

noted in RELNOTES - rmg
#14 1259 Richard Geiger Execute the right-recursive compile_rules() function in a
loop, so as to keep the stack from growing one frame per
jam statement.

=== computer.perforce.com:1666: Change 20001 by seiwald@golly-seiwald on 2001/01/11 09:50:25

added note to RELNOTES (internal code changes) - rmg
#13 1256 Richard Geiger Support for $(X:J=joinval), which concatenates the lists
elements into a single element, separated by (optional)
joinval.

=== computer.perforce.com:1666: Change 19999 by seiwald@golly-seiwald on 2001/01/11 08:35:05

Document :J modifier in Jam.html - rmg
#12 1249 Richard Geiger Support for $(X:E=emptyvalue), a default value to be used
if variable X is unset.

=== computer.perforce.com:1666: Change 19997 by seiwald@golly-seiwald on 2001/01/11 08:22:15

Add about E:=value to Jam.html.

The changes to expand.c look more extensive than I'd have expected for
It _could_ just be a code reorg, but it might be worth taking a closer
look to make sure nothing else changed (and should be added to the docs)
- rmg
#11 1248 Richard Geiger Fix $(d:P) on the Mac: it would leave the trialing : on the directory
name, which prevented subsequent $(d:P)'s from working, and thus
prevented MkDir from working.

=== computer.perforce.com:1666: Change 19987 by seiwald@geez-seiwald on 2001/01/10 15:16:32
#10 1247 Richard Geiger Fix jam's scanner to allow \ to escape a whitespace char.

=== computer.perforce.com:1666: Change 19984 by seiwald@golly-seiwald on 2001/01/10 14:07:35

Add note about \-whitespace escape to Jam.html.
#9 1245 Richard Geiger Note about official addition of "[ rule args ...]" and 'return'
to the Jam language.
#8 1244 Richard Geiger New 'Glob' builtin that returns a list of files in a list of
directories, given a list of patterns.

=== computer.perforce.com:1666: Change 19941 by seiwald@spice on 2001/01/08 23:32:00

Also, document the existence of rule values, the [ rule args ... ]
syntax for accessing them, and the 'return' statement.
#7 1242 Richard Geiger Jam aliases 'echo' and 'exit' for 'Echo' and 'Exit', since
they seem more part of the language than the other built-in
rules.

=== computer.perforce.com:1666: Change 19940 by seiwald@spice2 on 2001/01/08 23:29:35

Added a note about this to Jam.html - rmg
#6 1241 Richard Geiger Split jam's built-in rules out to builtins.c from compile.c,
so that compile.c only deals with the language.

=== computer.perforce.com:1666: Change 19939 by seiwald@spice2 on 2001/01/08 22:55:10
#5 1240 Richard Geiger Split jam's pathsys.h from filesys.h, since they are really
two different pieces.

=== computer.perforce.com:1666: Change 19938 by seiwald@spice on 2001/01/08 21:46:33

Added note in RELNOTES about the internal code change - rmg
#4 1239 Richard Geiger Remove obsolete references to Jamlang.html.

=== computer.perforce.com:1666: Change 19937 by seiwald@golly-seiwald on 2001/01/08 21:43:50
#3 1237 Richard Geiger Experimental support for running a rule under the influence
of a target's specific variables.

=== computer.perforce.com:1666: Change 19932 by seiwald@spice on 2001/01/08 15:48:36

This feature is now considered part of the language, i.e., no
longer experimental. Hence, I have also updated Jam.html and
the RELNOTES. - rmg
#2 1236 Richard Geiger Prepare template for next release (2.4, tentatively) integration work
#1 1207 Richard Geiger Establish this branch to use for import of Perforce Jam.
//guest/perforce_software/jam/src/RELNOTES
#7 556 Perforce staff Patch release jam 2.3.2: reverse NOCARE change.
 NOCARE once
again applies to targets with source and/or actions, so that
buildable header files get built.
#6 486 Perforce staff Jam 2.3.
 See RELNOTES for a list of changes from 2.2.x.

Just about every source file was touched when jam got ANSI-fied.
#5 211 Perforce staff Jeff Sickel's Mac OS X port.
#4 5 Perforce maintenance Jam/MR 2.2.4 (HDRPATTERN, JAMUNAME, JAMSHELL, plus misc tweaks)
#3 4 Perforce maintenance Jam/MR 2.2.2 (AmigaOS support)
#2 3 Perforce maintenance Jam/MR 2.2.1 (fix for NT handle leak)
#1 2 laura Add Jam/MR 2.2 source