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/env python3
# Copyright (c) Steven Watanabe 2018.
# Distributed under the Boost Software License, Version 1.0. (See
# accompanying file LICENSE.txt or copy at
# https://www.bfgroup.xyz/b2/LICENSE.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()
|