1# Status: ported. 2# Base revision: 64068 3 4# Copyright 2003 Dave Abrahams 5# Copyright 2003 Douglas Gregor 6# Copyright 2006 Rene Rivera 7# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus 8# Distributed under the Boost Software License, Version 1.0. 9# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) 10 11# This module defines the 'make' main target rule. 12 13from b2.build.targets import BasicTarget 14from b2.build.virtual_target import Action, FileTarget 15from b2.build import type 16from b2.manager import get_manager 17import b2.build.property_set 18 19 20class MakeTarget(BasicTarget): 21 22 def construct(self, name, source_targets, property_set): 23 24 action_name = property_set.get("<action>")[0] 25 action = Action(get_manager(), source_targets, action_name[1:], property_set) 26 target = FileTarget(self.name(), type.type(self.name()), 27 self.project(), action, exact=True) 28 return [ b2.build.property_set.empty(), 29 [self.project().manager().virtual_targets().register(target)]] 30 31def make (target_name, sources, generating_rule, 32 requirements=None, usage_requirements=None): 33 34 target_name = target_name[0] 35 generating_rule = generating_rule[0] 36 if generating_rule[0] != '@': 37 generating_rule = '@' + generating_rule 38 39 if not requirements: 40 requirements = [] 41 42 43 requirements.append("<action>%s" % generating_rule) 44 45 m = get_manager() 46 targets = m.targets() 47 project = m.projects().current() 48 engine = m.engine() 49 engine.register_bjam_action(generating_rule) 50 51 targets.main_target_alternative(MakeTarget( 52 target_name, project, 53 targets.main_target_sources(sources, target_name), 54 targets.main_target_requirements(requirements, project), 55 targets.main_target_default_build([], project), 56 targets.main_target_usage_requirements(usage_requirements or [], project))) 57 58get_manager().projects().add_rule("make", make) 59 60