Boost logo

Boost-Build :

Subject: [Boost-build] Major engine changes
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2011-11-29 19:02:06


AMDG

I've just committed a major rewrite of the
jam interpreter. So, far, I'm seeing a 2x speed
up running bjam -n -d0 in $BOOST_ROOT/status.
I've tried to test my changes thoroughly, but, as
always, there may be something that I missed.
If anything breaks, please let me know, and I'll
try to deal with it ASAP. I did validate that
the output of bjam -n and bjam -n -d+12 are
unchanged on Windows with msvc-10.0express
and on Linux with gcc-4.5.1.

Here's a summary of all the behavior changes
that I am aware of. Some of these are just
bug fixes, but I'm including them for completeness.

1) Parsing of variable expansions is stricter.
This code from project.jam fails:

'"$(JAMFILE:J=" ")"'.

This is wrong, because it is parsed into 2 tokens,
and the $( is not terminated. The correct way
to write this is '$(JAMFILE:J=" ")'. I fixed
this in the trunk.

2) Conditionals are stricter. The following
code which appeared in boostcpp.jam fails to
parse with my patch:

if ! [ os.name ] = NT

This code is wrong because it is parsed as

if ( ! [ os.name ] ) = NT

while the author clearly intended it to mean

if ! ( [ os.name ] = NT )

In general, boolean expressions will no longer
be usable as lists. The behavior of such
expressions is bizarre, and is almost certainly
a bug. I fixed this in the trunk.

3) -d+9 no longer prints a trace of the execution.
I don't think this is terribly useful because
the output from Boost.Build is just too much.
I can add it back if it's considered important, though.

4) On cygwin combining the $(var:WL) or $(var:WU) now
consistently applies the case shift after the W modifier.
previously, the behavior had several oddities or
or could be undefined depending on the length of
the string.

5) multiple modifiers can now be separated by a ':'.
$(var:U:T). Previously this would silently
ignore the T.

6) Modifiers can now be applied to arguments > 9.
$(12:L) used to fail.

In Christ,
Steven Watanabe


Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk