# Copyright 2003 Vladimir Prus 
# Distributed under the Boost Software License, Version 1.0. 
# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) 


import type ;
import generators ;
import print ;
import virtual-target ;
import "class" : new ;
import modules ;
import targets ;


type.register X : x ;

class test-target-class : basic-target
{
    rule __init__ ( name : project )
    {
        basic-target.__init__ $(name) : $(project) ;
    }
        
    rule construct ( source-targets * : property-set )
    {
        if [ modules.peek : GENERATE_NOTHING ]
        {
            return ;
        }
        else if [ modules.peek : GENERATE_ONLY_UNUSABLE ] 
        {
            return [ virtual-target.from-file b.x : $(self.project) ] 
              ;             
        }
        else
        {            
            return [ virtual-target.from-file b.x : $(self.project) ] 
              [ virtual-target.from-file b.cpp : $(self.project) ] 
                ; 
        }        
    }
    
    rule compute-usage-requirements ( rproperties : targets * )
    {
        return [ property-set.create <define>FOO ] ;
    }
}

rule make-b-main-target
{
    local project = [ CALLER_MODULE ] ;    
    
    targets.main-target-alternative 
      [ new test-target-class b : $(project) ] ;
}

IMPORT $(__name__) : make-b-main-target : : make-b-main-target ;
