# Copyright 2008 Vladimir Prus
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE.txt or https://www.bfgroup.xyz/b2/LICENSE.txt)

# Defines main target type 'message', that prints a message when built for the
# first time.

import project ;
import "class" : new ;
import targets ;
import property-set ;

class message-target-class : basic-target
{
    rule set-message ( * )
    {
        self.1 = $(1) ;
        self.2 = $(2) ;
        self.3 = $(3) ;
        self.4 = $(4) ;
        self.5 = $(5) ;
        self.6 = $(6) ;
        self.7 = $(7) ;
        self.8 = $(8) ;
        self.9 = $(9) ;
        self.built = ;
    }

    rule construct ( name : source-targets * : property-set )
    {
        if ! $(self.built)
        {
            for i in 1 2 3 4 5 6 7 8 9
            {
                if $(self.$(i))
                {
                    ECHO $(self.$(i)) ;
                }
            }
            self.built = 1 ;
        }

        return [ property-set.empty ] ;
    }
}


rule message ( name : * )
{
    local project = [ project.current ] ;

    local result = [ targets.main-target-alternative
        [ new message-target-class $(name) : $(project)
            : [ targets.main-target-sources : $(name) ]
            : [ targets.main-target-requirements : $(project) ]
            : [ targets.main-target-default-build : $(project) ]
            : [ targets.main-target-usage-requirements : $(project) ]
        ] ] ;
    $(result).set-message $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
    return $(result) ;
}
IMPORT $(__name__) : message : : message ;
