]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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. | |
1e59de90 | 9 | # (See accompanying file LICENSE.txt or https://www.bfgroup.xyz/b2/LICENSE.txt) |
7c673cae FG |
10 | |
11 | # This module defines the 'make' main target rule. | |
12 | ||
13 | from b2.build.targets import BasicTarget | |
14 | from b2.build.virtual_target import Action, FileTarget | |
15 | from b2.build import type | |
16 | from b2.manager import get_manager | |
17 | import b2.build.property_set | |
18 | ||
19 | ||
20 | class 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 | ||
31 | def 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 | ||
58 | get_manager().projects().add_rule("make", make) | |
59 |