| # Status: being ported by Vladimir Prus |
| |
| # 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. |
| |
| from b2.build.targets import BasicTarget |
| from b2.build.virtual_target import Action, FileTarget |
| from b2.build import type |
| from b2.manager import get_manager |
| import b2.build.property_set |
| |
| class MakeTarget(BasicTarget): |
| |
| def construct(self, name, source_targets, property_set): |
| |
| action_name = property_set.get("<action>")[0] |
| |
| action = Action(get_manager(), source_targets, action_name, property_set) |
| # FIXME: type.type uses global data. |
| target = FileTarget(self.name(), 1, type.type(self.name()), |
| self.project(), action) |
| return [ b2.build.property_set.empty(), |
| [self.project().manager().virtual_targets().register(target)]] |
| |
| def make (target_name, sources, generating_rule, |
| requirements=None, usage_requirements=None): |
| |
| target_name = target_name[0] |
| generating_rule = generating_rule[0] |
| |
| if not requirements: |
| requirements = [] |
| |
| requirements.append("<action>%s" % generating_rule) |
| m = get_manager() |
| targets = m.targets() |
| project = m.projects().current() |
| engine = m.engine() |
| engine.register_bjam_action(generating_rule) |
| |
| targets.main_target_alternative(MakeTarget( |
| 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 or [], project))) |
| |
| get_manager().projects().add_rule("make", make) |
| |