Boost logo

Boost-Build :

From: David Abrahams (david.abrahams_at_[hidden])
Date: 2002-01-11 20:31:24


----- Original Message -----
From: <rmg_at_[hidden]>
To: <jamming_at_[hidden]>
Sent: Friday, January 11, 2002 8:04 PM
Subject: [jamming] Perforce internal jam changes to file://public/jam/...

> FYI: (to all who are working on your own Jam changes):
> I have just submitted the following change to the Jam sources in
> the Public Depot (//public/jam/...):
> | Change 1319 by rmg_at_rmg:pdjam:chinacat on 2002/01/11 16:38:34
> |
> |
> | This change is a drop of the Perforce internal Jam changes
> | since the 2.3 public release. The individual changes
> | represented herein are preserved in the
> | file://guest/richard_geiger/intjam/ branch.
> |
> | The intent of this drop is to provide a base, from which other
> | contributors' Jam branches may be integrated into. It is not
> | intended to become a packaged release in this state. We will
> | be integrating changes from other users prior to creating the
> | next packaged release.
> |
> | Please refer to the src/RELNOTES file for an overview of the
> | changes present in this integration.
> |
> My next step (toward the next Jam release), will be to contact
> individual contributors about changes we have decided to take "as-is"
> for the new release, to coordinate those integrations back into the
> mainline. That will start happening next week, but please do NOT draw
> any conclusions based not having heard from me in that time frame.
> I'll try to contact *everybody* who has Jam changes since 2.3.1 in the
> Public Depot (whether or not we currently plan to grab any of your
> changes), before the release is finalized.
> In the event that we decide not to pick up a change that's important
> to you in this round, take heart: there will be other releases down
> the line.


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)

Month, dd, 2002

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:
FIncludes, FDefines. Ordering of cc and c++ flags grossly

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 <boga_at_[hidden]>.

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

Four rules makeCommon, makeGrist, makeString, makeSubDir from
jam 2.2 missing in 2.3 have been readded, with apologies to

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 <boga_at_[hidden]>.

5. Porting

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

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

[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

[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.


Boost-Build list run by bdawes at, david.abrahams at, gregod at, cpdaniel at, john at