blob: 6868fdb04a8e722196e2385d53b38756a92d4fcf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
using gcc ;
import type : register ;
import generators : register-standard ;
alias libxmlpp : : : :
<cflags>"`pkg-config --cflags libxml++-2.6`"
<linkflags>"`pkg-config --libs libxml++-2.6`" ;
alias fuse : : : :
<cflags>"-D_FILE_OFFSET_BITS=64"
<linkflags>"-lfuse" ;
lib boost_regex : : <name>boost_regex ;
lib boost_filesystem : : <name>boost_filesystem ;
lib Ice : : <name>Ice ;
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 ;
lib netfsComms :
netfsComms.ice :
;
exe netfs :
libxmlpp
[ glob fuse*.cpp ]
:
<library>../libmisc//misc
<implicit-dependency>netfsComms
<library>netfsComms
<library>boost_regex
<library>fuse
<library>Ice
;
exe netfsd :
libxmlpp
[ glob daemon*.cpp ]
:
<library>../libmisc//misc
<implicit-dependency>netfsComms
<library>netfsComms
<library>boost_regex
<library>boost_filesystem
<library>Ice
;
|