# Copyright 2003 Dave Abrahams # Copyright 2003 Douglas Gregor # Copyright 2006 Rene Rivera # Copyright 2002, 2003, 2004, 2005, 2006 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) # This module defines the 'make' main target rule. import "class" : new ; import errors : error ; import project ; import property ; import property-set ; import regex ; import targets ; class make-target-class : basic-target { import type regex virtual-target ; import "class" : new ; rule __init__ ( name : project : sources * : requirements * : default-build * : usage-requirements * ) { basic-target.__init__ $(name) : $(project) : $(sources) : $(requirements) : $(default-build) : $(usage-requirements) ; } rule construct ( name : source-targets * : property-set ) { local action-name = [ $(property-set).get ] ; # 'm' will always be set -- we add '@' ourselves in the 'make' rule # below. local m = [ MATCH ^@(.*) : $(action-name) ] ; local a = [ new action $(source-targets) : $(m[1]) : $(property-set) ] ; local t = [ new file-target $(self.name) exact : [ type.type $(self.name) ] : $(self.project) : $(a) ] ; return [ property-set.empty ] [ virtual-target.register $(t) ] ; } } # Declares the 'make' main target. # rule make ( target-name : sources * : generating-rule + : requirements * : usage-requirements * ) { local project = [ project.current ] ; # The '@' sign causes the feature.jam module to qualify rule name with the # module name of current project, if needed. local m = [ MATCH ^(@).* : $(generating-rule) ] ; if ! $(m) { generating-rule = @$(generating-rule) ; } requirements += $(generating-rule) ; targets.main-target-alternative [ new make-target-class $(target-name) : $(project) : [ targets.main-target-sources $(sources) : $(target-name) ] : [ targets.main-target-requirements $(requirements) : $(project) ] : [ targets.main-target-default-build : $(project) ] : [ targets.main-target-usage-requirements $(usage-requirements) : $(project) ] ] ; } IMPORT $(__name__) : make : : make ;