Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r64882 - trunk/tools/build/v2/build
From: ghost_at_[hidden]
Date: 2010-08-18 03:52:49


Author: vladimir_prus
Date: 2010-08-18 03:52:48 EDT (Wed, 18 Aug 2010)
New Revision: 64882
URL: http://svn.boost.org/trac/boost/changeset/64882

Log:
Fix a bug with -jN and actions that produce multiple targets.

Text files modified:
   trunk/tools/build/v2/build/virtual-target.jam | 15 ++++++++++++++-
   trunk/tools/build/v2/build/virtual_target.py | 11 +++++++++++
   2 files changed, 25 insertions(+), 1 deletions(-)

Modified: trunk/tools/build/v2/build/virtual-target.jam
==============================================================================
--- trunk/tools/build/v2/build/virtual-target.jam (original)
+++ trunk/tools/build/v2/build/virtual-target.jam 2010-08-18 03:52:48 EDT (Wed, 18 Aug 2010)
@@ -760,7 +760,20 @@
 
             DEPENDS $(actual-targets) : $(self.actual-sources)
                 $(self.dependency-only-sources) ;
-
+
+ # This works around a bug with -j and actions that
+ # produce multiple target, where:
+ # - dependency on the first output is found, and
+ # the action is started
+ # - dependency on the second output is found, and
+ # bjam noticed that command is already running
+ # - instead of waiting for the command, dependents
+ # of the second targets are immediately updated.
+ if $(actual-targets[2])
+ {
+ INCLUDES $(actual-targets) : $(actual-targets) ;
+ }
+
             # Action name can include additional argument to rule, which should
             # not be passed to 'set-target-variables'
             toolset.set-target-variables

Modified: trunk/tools/build/v2/build/virtual_target.py
==============================================================================
--- trunk/tools/build/v2/build/virtual_target.py (original)
+++ trunk/tools/build/v2/build/virtual_target.py 2010-08-18 03:52:48 EDT (Wed, 18 Aug 2010)
@@ -797,6 +797,17 @@
 
         self.engine_.add_dependency (actual_targets, self.actual_sources_ + self.dependency_only_sources_)
 
+ # This works around a bug with -j and actions that
+ # produce multiple target, where:
+ # - dependency on the first output is found, and
+ # the action is started
+ # - dependency on the second output is found, and
+ # bjam noticed that command is already running
+ # - instead of waiting for the command, dependents
+ # of the second targets are immediately updated.
+ if len(actual_targets) > 1:
+ bjam.call("INCLUDES", actual_targets, actual_targets)
+
         # FIXME: check the comment below. Was self.action_name_ [1]
         # Action name can include additional argument to rule, which should not
         # be passed to 'set-target-variables'


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