Boost logo

Boost-Commit :

From: jurko.gospodnetic_at_[hidden]
Date: 2008-06-08 10:18:11


Author: jurko
Date: 2008-06-08 10:18:11 EDT (Sun, 08 Jun 2008)
New Revision: 46237
URL: http://svn.boost.org/trac/boost/changeset/46237

Log:
Refactored the Boost Build's modules.jam module to avoid possible problems with running Boost Build's internal unit tests and the .tested global variable being used from an incorrect module/namespace.

Made displaying a list of modules with not __test__ internal unit testing rule defined an optional feature enabled by specifying the --debug-tests command line option.

Minor stylistic changes.
Text files modified:
   trunk/tools/build/v2/kernel/modules.jam | 78 +++++++++++++++++----------------------
   1 files changed, 35 insertions(+), 43 deletions(-)

Modified: trunk/tools/build/v2/kernel/modules.jam
==============================================================================
--- trunk/tools/build/v2/kernel/modules.jam (original)
+++ trunk/tools/build/v2/kernel/modules.jam 2008-06-08 10:18:11 EDT (Sun, 08 Jun 2008)
@@ -10,53 +10,48 @@
 # dependencies.
 .loading ?= ;
 
-# A list of modules needing to be tested via __test__ rule.
+# A list of modules needing to be tested using their __test__ rule.
 .untested ?= ;
 
-# A list of modules which have been tested via __test__.
+# A list of modules which have been tested using their __test__ rule.
 .tested ?= ;
 
 
-# Meant to be invoked from import when no __test__ rule is defined in the given
-# module.
-#
-local rule no-test-defined
-{
- import modules ;
- if ! ( --quiet in [ modules.peek : ARGV ] )
- {
- ECHO warning: no __test__ rule defined in module $(.module-under-test) ;
- }
-}
-
-
 # Runs internal Boost Build unit tests for the specified module. The module's
 # __test__ rule is executed in its own module to eliminate any inadvertent
 # effects of testing module dependencies (such as assert) on the module itself.
 #
-local rule run_test ( m )
+local rule run-module-test ( m )
 {
- if ( ! $(m) in $(.tested) ) # Avoid recursive test invocations.
+ local tested-modules = [ modules.peek modules : .tested ] ;
+
+ if ( ! $(m) in $(tested-modules) ) # Avoid recursive test invocations.
         && ( ( --debug in $(argv) ) || ( --debug-module=$(m) in $(argv) ) )
     {
- .tested += $(m) ;
- if ! ( --quiet in $(argv) )
+ modules.poke modules : .tested : $(tested-modules) $(m) ;
+
+ if ! ( __test__ in [ RULENAMES $(m) ] )
         {
- ECHO testing module $(m)... ;
+ local argv = [ peek : ARGV ] ;
+ if ! ( --quiet in $(argv) ) && ( --debug-tests in $(argv) )
+ {
+ ECHO warning: no __test__ rule defined in module $(m) ;
+ }
         }
-
- local test-module = __test-$(m)__ ;
-
- IMPORT $(m) : [ RULENAMES $(m) ] : $(test-module) : [ RULENAMES $(m) ] ;
- IMPORT $(m) : __test__ : $(test-module) : __test__ : LOCALIZE ;
-
- # Set up the name of the module we are testing so that no-test-defined
- # can find it.
- poke $(test-module) : .module-under-test : $(m) ;
-
- module $(test-module)
+ else
         {
- __test__ ;
+ if ! ( --quiet in $(argv) )
+ {
+ ECHO testing module $(m)... ;
+ }
+
+ local test-module = __test-$(m)__ ;
+ IMPORT $(m) : [ RULENAMES $(m) ] : $(test-module) : [ RULENAMES $(m) ] ;
+ IMPORT $(m) : __test__ : $(test-module) : __test__ : LOCALIZE ;
+ module $(test-module)
+ {
+ __test__ ;
+ }
         }
     }
 }
@@ -143,7 +138,7 @@
     {
         filename ?= $(module-name).jam ;
 
- # Mark the module loaded so we don't try to load it recursively.
+ # Mark the module loaded so we do not try to load it recursively.
         .loaded += $(module-name) ;
 
         # Suppress tests if any module loads are already in progress.
@@ -152,7 +147,7 @@
         # Push this module on the loading stack.
         .loading += $(module-name) ;
 
- # Remember that it's untested.
+ # Remember that it is untested.
         .untested += $(module-name) ;
 
         # Insert the new module's __name__ and __file__ globals.
@@ -161,9 +156,6 @@
 
         module $(module-name)
         {
- # Prepare default behavior, in case no __test__ is defined.
- IMPORT modules : no-test-defined : $(__name__) : __test__ ;
-
             # Add some grist so that the module will have a unique target name.
             local module-target = $(__file__:G=module@) ;
 
@@ -182,11 +174,11 @@
         if $(module-name) != modules && ! [ binding $(module-name) ]
         {
             import errors ;
- errors.error "Couldn't find module" $(module-name) in $(search) ;
+ errors.error "Could not find module" $(module-name) in $(search) ;
         }
 
- # Pop the loading stack. Must happen before testing or we'll run into a
- # circular loading dependency.
+ # Pop the loading stack. Must happen before testing or we will run into
+ # a circular loading dependency.
         .loading = $(.loading[1--2]) ;
 
         # Run any pending tests if this is an outer load.
@@ -195,7 +187,7 @@
             local argv = [ peek : ARGV ] ;
             for local m in $(.untested)
             {
- run_test $(m) ;
+ run-module-test $(m) ;
             }
             .untested = ;
         }
@@ -221,8 +213,8 @@
 
 # Transform each path in the list, with all backslashes converted to forward
 # slashes and all detectable redundancy removed. Something like this is probably
-# needed in path.jam, but I'm not sure of that, I don't understand it, and I'm
-# not ready to move all of path.jam into the kernel.
+# needed in path.jam, but I am not sure of that, I do not understand it, and I
+# am not ready to move all of path.jam into the kernel.
 #
 local rule normalize-raw-paths ( paths * )
 {


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