1# Copyright 2008 Vladimir Prus
2# Distributed under the Boost Software License, Version 1.0.
3# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
4
5# Defines main target type 'message', that prints a message when built for the
6# first time.
7
8import project ;
9import "class" : new ;
10import targets ;
11import property-set ;
12
13class message-target-class : basic-target
14{
15    rule set-message ( * )
16    {
17        self.1 = $(1) ;
18        self.2 = $(2) ;
19        self.3 = $(3) ;
20        self.4 = $(4) ;
21        self.5 = $(5) ;
22        self.6 = $(6) ;
23        self.7 = $(7) ;
24        self.8 = $(8) ;
25        self.9 = $(9) ;
26        self.built = ;
27    }
28
29    rule construct ( name : source-targets * : property-set )
30    {
31        if ! $(self.built)
32        {
33            for i in 1 2 3 4 5 6 7 8 9
34            {
35                if $(self.$(i))
36                {
37                    ECHO $(self.$(i)) ;
38                }
39            }
40            self.built = 1 ;
41        }
42
43        return [ property-set.empty ] ;
44    }
45}
46
47
48rule message ( name : * )
49{
50    local project = [ project.current ] ;
51
52    local result = [ targets.main-target-alternative
53        [ new message-target-class $(name) : $(project)
54            : [ targets.main-target-sources : $(name) ]
55            : [ targets.main-target-requirements : $(project) ]
56            : [ targets.main-target-default-build : $(project) ]
57            : [ targets.main-target-usage-requirements : $(project) ]
58        ] ] ;
59    $(result).set-message $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
60    return $(result) ;
61}
62IMPORT $(__name__) : message : : message ;
63