|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r83854 - trunk/tools/build/v2/build
From: steven_at_[hidden]
Date: 2013-04-11 18:54:29
Author: steven_watanabe
Date: 2013-04-11 18:54:28 EDT (Thu, 11 Apr 2013)
New Revision: 83854
URL: http://svn.boost.org/trac/boost/changeset/83854
Log:
Simplify and optimize property.refine. It had premature optimizations which actually hurt performance.
Text files modified:
trunk/tools/build/v2/build/property.jam | 53 +++++----------------------------------
1 files changed, 7 insertions(+), 46 deletions(-)
Modified: trunk/tools/build/v2/build/property.jam
==============================================================================
--- trunk/tools/build/v2/build/property.jam (original)
+++ trunk/tools/build/v2/build/property.jam 2013-04-11 18:54:28 EDT (Thu, 11 Apr 2013)
@@ -22,67 +22,28 @@
rule refine ( properties * : requirements * )
{
local result ;
- local error ;
+ local unset ;
- # All the 'requirements' elements should be present in the result. Record
- # them so that we can handle 'properties'.
+ # Collect all non-free features in requirements
for local r in $(requirements)
{
# Do not consider conditional requirements.
- if ! [ MATCH (:) : $(r:G=) ]
+ if ! [ MATCH (:) : $(r:G=) ] && ! free in [ feature.attributes $(r:G) ]
{
- # Note: cannot use a local variable here, so use an ugly name.
- __require__$(r:G) = $(r:G=) ;
+ unset += $(r:G) ;
}
}
+ # Remove properties that are overridden by requirements
for local p in $(properties)
{
- if [ MATCH (:) : $(p:G=) ]
+ if [ MATCH (:) : $(p:G=) ] || ! $(p:G) in $(unset)
{
- # Do not modify conditional properties.
result += $(p) ;
}
- else if free in [ feature.attributes $(p:G) ]
- {
- # Do not modify free properties.
- result += $(p) ;
- }
- else
- {
- local required-value = $(__require__$(p:G)) ;
- if $(required-value)
- {
- if $(p:G=) != $(required-value)
- {
- result += $(p:G)$(required-value) ;
- }
- else
- {
- result += $(p) ;
- }
- }
- else
- {
- result += $(p) ;
- }
- }
}
- # Unset our ugly map.
- for local r in $(requirements)
- {
- __require__$(r:G) = ;
- }
-
- if $(error)
- {
- return $(error) ;
- }
- else
- {
- return [ sequence.unique $(result) $(requirements) ] ;
- }
+ return [ sequence.unique $(result) $(requirements) ] ;
}
Boost-Commit 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