Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r83789 - trunk/tools/build/v2/build
From: steven_at_[hidden]
Date: 2013-04-06 19:30:45


Author: steven_watanabe
Date: 2013-04-06 19:30:45 EDT (Sat, 06 Apr 2013)
New Revision: 83789
URL: http://svn.boost.org/trac/boost/changeset/83789

Log:
Cache the results of ac checks.
Text files modified:
   trunk/tools/build/v2/build/ac.jam | 78 +++++++++++++++++++++++++++++++--------
   1 files changed, 62 insertions(+), 16 deletions(-)

Modified: trunk/tools/build/v2/build/ac.jam
==============================================================================
--- trunk/tools/build/v2/build/ac.jam (original)
+++ trunk/tools/build/v2/build/ac.jam 2013-04-06 19:30:45 EDT (Sat, 06 Apr 2013)
@@ -59,6 +59,15 @@
     }
 }
 
+rule construct-library ( name : property-set : provided-path ? )
+{
+ property-set = [ $(property-set).refine [ property-set.create $(link-opt) ] ] ;
+ local lib-props = [ $(property-set).add-raw <name>$(name) <search>$(provided-path) ] ;
+ return [ generators.construct $(.project) lib-$(name)
+ : SEARCHED_LIB : $(lib-props) : : true ] ;
+}
+
+
 rule find-library ( properties : names + : provided-path ? )
 {
     local result ;
@@ -80,14 +89,12 @@
     }
     while $(link-opts)
     {
- properties = [ $(properties).refine [ property-set.create $(link-opts[1]) ] ] ;
         local names-iter = $(names) ;
+ properties = [ $(properties).refine [ property-set.create $(link-opts[1]) ] ] ;
         while $(names-iter)
         {
             local name = $(names-iter[1]) ;
- local lib-props = [ $(properties).add-raw <name>$(name) <search>$(provided-path) ] ;
- local lib = [ generators.construct $(.project) lib-$(name)
- : SEARCHED_LIB : $(lib-props) : : true ] ;
+ local lib = [ construct-library $(name) : $(properties) : $(provided-path) ] ;
             local test = [ generators.construct $(.project) $(name) : EXE
                 : [ $(properties).add $(lib[1]) ] : $(.main.cpp) $(lib[2-])
                 : true ] ;
@@ -99,7 +106,7 @@
             if [ UPDATE_NOW $(jam-targets) : [ modules.peek configure : .log-fd ]
                     : ignore-minus-n : ignore-minus-q ]
             {
- result = $(lib) ;
+ result = $(name) $(link-opts[1]) ;
                 names-iter = ; link-opts = ; # break
             }
             names-iter = $(names-iter[2-]) ;
@@ -116,6 +123,7 @@
     import virtual-target ;
     import ac ;
     import configure ;
+ import config-cache ;
 
     rule __init__ ( name : project : requirements * : include-path ? : library-path ? : library-name ? )
     {
@@ -195,23 +203,61 @@
                 # Backwards compatibility only
                 library-path ?= [ modules.peek : $(name:U)_LIBPATH ] ;
             }
-
- local includes = [ ac.find-include-path $(property-set) : $(self.header) : $(include-path) ] ;
- local library = [ ac.find-library $(property-set) : $(libnames) : $(library-path) ] ;
- if $(includes) && $(library)
+
+ local toolset = [ $(property-set).get <toolset> ] ;
+ local toolset-version-property = "<toolset-$(toolset):version>" ;
+ local relevant = [ property.select <target-os> <toolset>
+ $(toolset-version-property) <link> <address-model> <architecture> :
+ [ $(property-set).raw ] ] ;
+
+ local key = ac-library-$(name)-$(relevant:J=-) ;
+ local lookup = [ config-cache.get $(key) ] ;
+
+ if $(lookup)
             {
- if $(includes) = %default
+ if $(lookup) = missing
+ {
+ configure.log-library-search-result $(name) : "no (cached)" ;
+ return [ property-set.empty ] ;
+ }
+ else
                 {
- includes = ;
+ local includes = $(lookup[1]) ;
+ if $(includes) = %default
+ {
+ includes = ;
+ }
+ local name = $(lookup[2]) ;
+ local link-opt = $(lookup[3]) ;
+ local library = [ ac.construct-library $(name) :
+ [ $(property-set).refine [ property-set.create $(link-opt) ] ] : $(library-path) ] ;
+ configure.log-library-search-result $(name) : "yes (cached)" ;
+ return [ $(library[1]).add-raw <include>$(includes) ] $(library[2-]) ;
                 }
- configure.log-library-search-result $(name) : "found" ;
- return [ $(library[1]).add-raw <include>$(includes) ] $(library[2-]) ;
             }
             else
             {
- configure.log-library-search-result $(name) : "not found" ;
- return [ property-set.empty ] ;
- }
+ local includes = [ ac.find-include-path $(property-set) : $(self.header) : $(include-path) ] ;
+ local library = [ ac.find-library $(property-set) : $(libnames) : $(library-path) ] ;
+ if $(includes) && $(library)
+ {
+ config-cache.set $(key) : $(includes) $(library) ;
+ if $(includes) = %default
+ {
+ includes = ;
+ }
+ library = [ ac.construct-library $(library[1]) :
+ [ $(property-set).refine [ property-set.create $(library[2]) ] ] : $(library-path) ] ;
+ configure.log-library-search-result $(name) : "yes" ;
+ return [ $(library[1]).add-raw <include>$(includes) ] $(library[2-]) ;
+ }
+ else
+ {
+ config-cache.set $(key) : missing ;
+ configure.log-library-search-result $(name) : "no" ;
+ return [ property-set.empty ] ;
+ }
+ }
         }
     }
 }


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