]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/tools/build/src/manager.py
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / tools / build / src / manager.py
1 # Copyright Pedro Ferreira 2005. Distributed under the Boost
2 # Software License, Version 1.0. (See accompanying
3 # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4
5 import bjam
6
7 # To simplify implementation of tools level, we'll
8 # have a global variable keeping the current manager.
9 the_manager = None
10 def get_manager():
11 return the_manager
12
13 class Manager:
14 """ This class is a facade to the Boost.Build system.
15 It serves as the root to access all data structures in use.
16 """
17
18 def __init__ (self, engine, global_build_dir):
19 """ Constructor.
20 engine: the build engine that will actually construct the targets.
21 """
22 from build.virtual_target import VirtualTargetRegistry
23 from build.targets import TargetRegistry
24 from build.project import ProjectRegistry
25 from build.scanner import ScannerRegistry
26 from build.errors import Errors
27 from b2.util.logger import NullLogger
28 from build import build_request, property_set, feature
29
30 self.engine_ = engine
31 self.virtual_targets_ = VirtualTargetRegistry (self)
32 self.projects_ = ProjectRegistry (self, global_build_dir)
33 self.targets_ = TargetRegistry ()
34 self.logger_ = NullLogger ()
35 self.scanners_ = ScannerRegistry (self)
36 self.argv_ = bjam.variable("ARGV")
37 self.boost_build_path_ = bjam.variable("BOOST_BUILD_PATH")
38 self.errors_ = Errors()
39 self.command_line_free_features_ = property_set.empty()
40
41 global the_manager
42 the_manager = self
43
44 def scanners (self):
45 return self.scanners_
46
47 def engine (self):
48 return self.engine_
49
50 def virtual_targets (self):
51 return self.virtual_targets_
52
53 def targets (self):
54 return self.targets_
55
56 def projects (self):
57 return self.projects_
58
59 def argv (self):
60 return self.argv_
61
62 def logger (self):
63 return self.logger_
64
65 def set_logger (self, logger):
66 self.logger_ = logger
67
68 def errors (self):
69 return self.errors_
70
71 def getenv(self, name):
72 return bjam.variable(name)
73
74 def boost_build_path(self):
75 return self.boost_build_path_
76
77 def command_line_free_features(self):
78 return self.command_line_free_features_
79
80 def set_command_line_free_features(self, v):
81 self.command_line_free_features_ = v
82
83 def construct (self, properties = [], targets = []):
84 """ Constructs the dependency graph.
85 properties: the build properties.
86 targets: the targets to consider. If none is specified, uses all.
87 """
88 if not targets:
89 for name, project in self.projects ().projects ():
90 targets.append (project.target ())
91
92 property_groups = build_request.expand_no_defaults (properties)
93
94 virtual_targets = []
95 build_prop_sets = []
96 for p in property_groups:
97 build_prop_sets.append (property_set.create (feature.split (p)))
98
99 if not build_prop_sets:
100 build_prop_sets = [property_set.empty ()]
101
102 for build_properties in build_prop_sets:
103 for target in targets:
104 result = target.generate (build_properties)
105 virtual_targets.extend (result.targets ())
106
107 actual_targets = []
108 for virtual_target in virtual_targets:
109 actual_targets.extend (virtual_target.actualize ())
110