llvm-build: Split out the validation logic.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144252 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Dunbar 2011-11-10 00:49:58 +00:00
parent 6852b69e15
commit b4eaee7a44

View File

@ -83,12 +83,26 @@ class LLVMProjectInfo(object):
def __init__(self, source_root, component_infos):
# Store our simple ivars.
self.source_root = source_root
self.component_infos = component_infos
self.component_infos = list(component_infos)
self.component_info_map = None
self.ordered_component_infos = None
def validate_components(self):
"""validate_components() -> None
Validate that the project components are well-defined. Among other
things, this checks that:
- Components have valid references.
- Components references do not form cycles.
We also construct the map from component names to info, and the
topological ordering of components.
"""
# Create the component info map and validate that component names are
# unique.
self.component_info_map = {}
for ci in component_infos:
for ci in self.component_infos:
existing = self.component_info_map.get(ci.name)
if existing is not None:
# We found a duplicate component name, report it and error out.
@ -157,7 +171,7 @@ class LLVMProjectInfo(object):
# out easily. If we don't, we should special case the check.
self.ordered_component_infos = []
components_to_visit = set(component_infos)
components_to_visit = set(self.component_infos)
while components_to_visit:
visit_component_info(iter(components_to_visit).next(), [], set())
@ -544,6 +558,9 @@ def main():
project_info = LLVMProjectInfo.load_from_path(
source_root, llvmbuild_source_root)
# Validate the project component info.
project_info.validate_components()
# Print the component tree, if requested.
if opts.print_tree:
project_info.print_tree()