Boost logo

Boost-Build :

From: Juergen Hunold (hunold_at_[hidden])
Date: 2005-06-27 14:36:05


Hi Dave !

On Saturday 25 June 2005 15:01, David Abrahams wrote:
> Jürgen Hunold <hunold_at_[hidden]> writes:
> > This boils down to Boost.Test,
> > which contains
> >
> > alias minimal : : : :
> > <toolset>msvc:<asynch-exceptions>on
> >
> > which Boost.Build tries to build, because it is not explicit.
>
> What's weird about this is:
>
> What does it mean to build an alias??!

Well, I'm sorry, the right term would have been "evaluated".

> I think the right fix would address that problem.

Okay, I'll try to explain this more carefully.

It all starts in $BOOST_ROOT/Jamfile.v2 line 191

-------- snip ------------------
# Just build the libraries, don't install them anywhere.
# This is what happend with just "bjam --v2".
alias build_all : libs/$(libraries)/build ;
----snap--------------

When doing a <use>/boost in my own Jamfiles, V2 therefore evaluates
_all_ Jamfiles.v2 in _all_ $libraries.

Side-note:
This "feature" can be disabled by making "build_all" explicit. But then
the usage-requirements of Boost are not added to the properties of my
projects. This was the trap I ran into last week...

In case of Boost.Test V2 then scans libs/test/Jamfile.v2 and finds the
minimal alias. This normally looks

> > alias minimal : : : :
> > <toolset>msvc:<asynch-exceptions>on

and If I comment the "::::" line I get the more readable

alias minimal
: # sources
: # requirements
: # default-build
: # usage-requirements
<toolset>msvc:<asynch-exceptions>on
;

This declares an alias which has an usage-requirement which is then
dutifully added to the property set of _my_ projects.

In the normal case (<exception-handling>on) this adds
<asynch-exceptions>on to _my_ project.
Pretty cool, isn't it ?
And this leads to:

> > cl : Command line warning D4025 : overriding '/EHs' with '/EHa'
> > baseio.cpp
> > This is clearly a misconfiguration and also fixed by the patch.

Or course this adds "asynch-exceptions-on" the build-path, too.

When building with <exception-handling>off , "minimal" also injects
<asynch-exceptions>on in my project and V2 then correctly detects that
it can't build this combination.

> How does the patch fix that? It's non-obvious to me.

Making "minimal" explicit prevents V2 from evaluating it and addings its
usage-requirements to my projects.

I've had several discussions with Volodya about this behaviour.
It has more pros then cons and I would not mess with it before 1.33.0 is
out and then its frozen anyway.
So, please:

1. Remove "minimal" or document what it is for and where it is used.
2. make it explicit and document it.

Yours,

Jürgen

-- 
* Dipl.-Math. Jürgen Hunold ! Institut für Verkehrswesen, Eisenbahnbau
* voice: ++49 511 762-2529 ! und -betrieb, Universität Hannover 
* fax : ++49 511 762-3001 ! Appelstrasse 9a, D-30167 Hannover
* hunold_at_[hidden] ! www.ive.uni-hannover.de
 

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