$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r54535 - trunk/tools/build/v2/build
From: ghost_at_[hidden]
Date: 2009-06-30 08:41:37
Author: vladimir_prus
Date: 2009-06-30 08:41:37 EDT (Tue, 30 Jun 2009)
New Revision: 54535
URL: http://svn.boost.org/trac/boost/changeset/54535
Log:
When starting building each metatarget, ignore active generators up the stack.
Text files modified: 
   trunk/tools/build/v2/build/generators.jam |    24 ++++++++++++++++++++++--                
   trunk/tools/build/v2/build/targets.jam    |     2 +-                                      
   2 files changed, 23 insertions(+), 3 deletions(-)
Modified: trunk/tools/build/v2/build/generators.jam
==============================================================================
--- trunk/tools/build/v2/build/generators.jam	(original)
+++ trunk/tools/build/v2/build/generators.jam	2009-06-30 08:41:37 EDT (Tue, 30 Jun 2009)
@@ -1215,6 +1215,10 @@
         {
             viable-generators += $(g) ;
         }
+        else
+        {
+            generators.dout [ indent ] "   generator " [ $(g).id ] "is active, discaring" ;
+        }        
     }
 
     # Generators which override 'all'.
@@ -1320,8 +1324,20 @@
 # 'construct' in stack, returns only targets of requested 'target-type',
 # otherwise, returns also unused sources and additionally generated targets.
 #
-rule construct ( project name ? : target-type : property-set * : sources * )
+# If 'top-level' is set, does not suppress generators that are already
+# used in the stack. This may be useful in cases where a generator
+# has to build a metatargets -- for example a target corresponding to
+# built tool.
+#
+rule construct ( project name ? : target-type : property-set * : sources * : top-level ? )
 {
+    local saved-stack ;
+    if $(top-level)
+    {
+        saved-active = $(.active-generators) ;
+        .active-generators = ;
+    }
+        
     if (.construct-stack)
     {
         ensure-type $(sources) ;
@@ -1348,11 +1364,15 @@
     decrease-indent ;
 
     .construct-stack = $(.construct-stack[2-]) ;
+    
+    if $(top-level)
+    {
+        .active-generators = $(saved-active) ;
+    }
 
     return $(result) ;
 }
 
-
 # Given 'result', obtained from some generator or generators.construct, adds
 # 'raw-properties' as usage requirements to it. If result already contains usage
 # requirements -- that is the first element of result of an instance of the
Modified: trunk/tools/build/v2/build/targets.jam
==============================================================================
--- trunk/tools/build/v2/build/targets.jam	(original)
+++ trunk/tools/build/v2/build/targets.jam	2009-06-30 08:41:37 EDT (Tue, 30 Jun 2009)
@@ -1434,7 +1434,7 @@
         local r = [ generators.construct $(self.project) $(name:S=) : $(self.type)
             : [ property-set.create [ $(property-set).raw ]
                 <main-target-type>$(self.type) ]
-            : $(source-targets) ] ;
+            : $(source-targets) : true ] ;
         if ! $(r)
         {
             ECHO "warn: Unable to construct" [ full-name ] ;