blob: 0b40da1bf2c1af14f4985d319850579b363c22fb (
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
103
104
105
106
107
108
109
110
111
112
113
|
#!/usr/bin/python
# Copyright (c) Steven Watanabe 2018.
# Distributed under the Boost Software License, Version 1.0. (See
# accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
# Tests that a single main target can be used for
# implicit dependencies of multiple different types.
import BoostBuild
t = BoostBuild.Tester(pass_toolset=False)
t.write("input.sss", "")
t.write("Jamroot.jam", """
import type ;
import common ;
import generators ;
import "class" : new ;
import feature : feature ;
import toolset : flags ;
type.register AAA : aaa ;
type.register BBB : bbb ;
type.register CCC : ccc ;
type.register DDD : ddd ;
type.register SSS : sss ;
feature aaa-path : : free path ;
feature bbb-path : : free path ;
class aaa-action : action
{
rule adjust-properties ( property-set )
{
local s = [ $(self.targets[1]).creating-subvariant ] ;
return [ $(property-set).add-raw
[ $(s).implicit-includes aaa-path : AAA ] ] ;
}
}
class aaa-generator : generator
{
rule action-class ( )
{
return aaa-action ;
}
}
class bbb-action : action
{
rule adjust-properties ( property-set )
{
local s = [ $(self.targets[1]).creating-subvariant ] ;
return [ $(property-set).add-raw
[ $(s).implicit-includes bbb-path : BBB ] ] ;
}
}
class bbb-generator : generator
{
rule action-class ( )
{
return bbb-action ;
}
}
generators.register-standard common.copy : SSS : AAA ;
generators.register-standard common.copy : SSS : BBB ;
# Produce two targets from a single source
rule make-aaa-bbb ( project name ? : property-set : sources * )
{
local result ;
local aaa = [ generators.construct $(project) $(name) : AAA :
[ $(property-set).add-raw <location-prefix>a-loc ] : $(sources) ] ;
local bbb = [ generators.construct $(project) $(name) : BBB :
[ $(property-set).add-raw <location-prefix>b-loc ] : $(sources) ] ;
return [ $(aaa[1]).add $(bbb[1]) ] $(aaa[2-]) $(bbb[2-]) ;
}
generate input : input.sss : <generating-rule>@make-aaa-bbb ;
explicit input ;
flags make-ccc AAAPATH : <aaa-path> ;
rule make-ccc ( target : sources * : properties * )
{
ECHO aaa path\: [ on $(target) return $(AAAPATH) ] ;
common.copy $(target) : $(sources) ;
}
flags make-ddd BBBPATH : <bbb-path> ;
rule make-ddd ( target : sources * : properties * )
{
ECHO bbb path\: [ on $(target) return $(BBBPATH) ] ;
common.copy $(target) : $(sources) ;
}
generators.register [ new aaa-generator $(__name__).make-ccc : SSS : CCC ] ;
generators.register [ new bbb-generator $(__name__).make-ddd : SSS : DDD ] ;
# This should have <aaapath>bin/a-loc
ccc output-c : input.sss : <implicit-dependency>input ;
# This should have <bbbpath>bin/b-loc
ddd output-d : input.sss : <implicit-dependency>input ;
""")
t.run_build_system()
t.expect_output_lines(["aaa path: bin/a-loc", "bbb path: bin/b-loc"])
t.cleanup()
|