Boost logo

Boost-Build :

Subject: Re: [Boost-build] Major engine changes
From: Nogradi, Chris (Chris.Nogradi_at_[hidden])
Date: 2011-11-30 16:18:42

Thanks Steve!

We are also seeing ~2x speed increases on our builds with your changes:

No-op time before:

$ time Tools/boost-build/bin/b2.exe all msvc -j8
...found 46217 targets...

real 1m56.869s
user 0m0.015s
sys 0m0.031s

No-op time after:

$ time Tools/boost-build/bin/b2.exe all msvc -j8
...found 46217 targets...

real 1m8.487s
user 0m0.000s
sys 0m0.000s

I need to get our no-op times down to < 15 seconds so your work is greatly appreciated. Are there any other areas that could be improved to help toward that goal (I suppose I can look at using the python port)? Are there any things to avoid doing in the jam files that may cause degraded performance? I noticed that some of my targets have extremely large property sets with close to 100 implicit-dependency targets. We auto generate ~200 .h and .c files. Seems like these could be problematic because of the large string sets?

Thanks again,


-----Original Message-----
From: boost-build-bounces_at_[hidden] [mailto:boost-build-bounces_at_[hidden]] On Behalf Of Steven Watanabe
Sent: Tuesday, November 29, 2011 6:02 PM
To: Boost.Build developer's and user's list
Subject: [Boost-build] Major engine changes


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 ! [ ] = NT

This code is wrong because it is parsed as

if ( ! [ ] ) = NT

while the author clearly intended it to mean

if ! ( [ ] = 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
Unsubscribe & other changes:

This e-mail and any attachments may contain confidential material for the sole use of the intended recipient. If you are not the intended recipient, please be aware that any disclosure, copying, distribution or use of this e-mail or any attachment is prohibited. If you have received this e-mail in error, please contact the sender and delete all copies.

Thank you for your cooperation.

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