diff options
author | randomdan <randomdan@localhost> | 2011-01-24 23:57:05 +0000 |
---|---|---|
committer | randomdan <randomdan@localhost> | 2011-01-24 23:57:05 +0000 |
commit | 0dc040b74f9b7264e8553b1e2e2019e3d2bed8da (patch) | |
tree | da3b186073f699c7476bd506965c0d6818c1294e /Jamroot.jam | |
parent | Tidy up the UUID optionals (diff) | |
download | project2-0dc040b74f9b7264e8553b1e2e2019e3d2bed8da.tar.bz2 project2-0dc040b74f9b7264e8553b1e2e2019e3d2bed8da.tar.xz project2-0dc040b74f9b7264e8553b1e2e2019e3d2bed8da.zip |
Centralise the ICE splicer
Diffstat (limited to 'Jamroot.jam')
-rw-r--r-- | Jamroot.jam | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/Jamroot.jam b/Jamroot.jam index 1bf5f1c..abfed49 100644 --- a/Jamroot.jam +++ b/Jamroot.jam @@ -1,3 +1,66 @@ using gcc ; +import type : register ; +import generators : register-standard ; + +import type ; +import generators ; +import feature ; +import "class" : new ; +import scanner ; +type.register SLICE : ice ; +class slice-scanner : scanner +{ + import path property-set regex scanner type virtual-target ; + rule __init__ ( includes * ) + { + scanner.__init__ ; + self.includes = $(includes) ; + } + rule pattern ( ) + { + return "^[ \t]*#[ \t]*include[ ]*(<(.*)>|\"(.*)\")" ; + } + rule process ( target : matches * : binding ) + { + local included = [ regex.transform $(matches) : "\"(.*)\"" : 1 ] ; + local g = [ on $(target) return $(HDRGRIST) ] ; + local b = [ NORMALIZE_PATH $(binding:D) ] ; + local g2 = $(g)"#"$(b) ; + included = $(included:G=$(g2)) ; + #this seems to add the dependency ok to the tree, but + #I can't get these new dependencies to build + #I've seen virtual-target.register but I don't have access to properties + #and project names to do that here. + INCLUDES $(target) : $(included) ; + scanner.propagate $(__name__) : $(matches) : $(target) ; + } +} +scanner.register slice-scanner : include ; +type.set-scanner SLICE : slice-scanner ; +class slice-generator : generator +{ + import "class" : new ; + rule __init__ ( * : * ) + { + generator.__init__ $(1) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ; + } + rule run ( project name ? : property-set : sources * ) + { + #could I register new virtual targets here? The problem is I can't seem to + #be able to get the list of includes that the scanner built from anywhere + return [ generator.run $(project) $(name) : $(property-set) : $(sources) ] ; + } + rule generated-targets ( sources + : property-set : project name ? ) + { + return [ generator.generated-targets $(sources) : $(property-set) : $(project) $(name) ] ; + } +} +generators.register [ new slice-generator slice.slice2cpp : SLICE : CPP H ] ; +actions slice.slice2cpp +{ + slice2cpp --checksum --output-dir $(1[1]:D) $(2) +} +IMPORT $(__name__) : slice.slice2cpp : : slice.slice2cpp ; + alias all : project2 netfs ; |