#  Copyright (c) 2005 Vladimir Prus.
#
#  Use, modification and distribution is subject to the Boost Software
#  License Version 1.0. (See accompanying file LICENSE_1_0.txt or
#  http://www.boost.org/LICENSE_1_0.txt)

import "class" : new ;
import generators ;
import project ;
import targets ;
import toolset ;
import type ;


type.register NOTFILE_MAIN ;


class notfile-generator : generator
{
    rule __init__ ( * : * )
    {
        generator.__init__ $(1) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
    }

    rule run ( project name ? : property-set : sources * : multiple ? )
    {
        local action ;
        local action-name = [ $(property-set).get <action> ] ;

        local m = [ MATCH ^@(.*) : $(action-name) ] ;

        if $(m)
        {
            action = [ new action $(sources) : $(m[1])
              : $(property-set) ] ;
        }
        else
        {
            action = [ new action $(sources) : notfile.run
              : $(property-set) ] ;
        }
        return [ virtual-target.register 
            [ new notfile-target $(name) : $(project) : $(action) ] ] ;
    }
}


generators.register [ new notfile-generator notfile.main : : NOTFILE_MAIN ] ;


toolset.flags notfile.run ACTION : <action> ;


actions run
{
    $(ACTION)
}


rule notfile ( target-name : action + : sources * : requirements * : default-build * )
{
    local project = [ project.current ] ;

    requirements += <action>$(action) ;

    targets.main-target-alternative
        [ new typed-target $(target-name) : $(project) : NOTFILE_MAIN
            : [ targets.main-target-sources $(sources) : $(target-name) ]
            : [ targets.main-target-requirements $(requirements) : $(project) ]
            : [ targets.main-target-default-build $(default-build) : $(project) ]
        ] ;
}

IMPORT $(__name__) : notfile : : notfile ;
