From b4eaee7a4407a73d95b042b08523e9ace577e2a1 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Thu, 10 Nov 2011 00:49:58 +0000 Subject: llvm-build: Split out the validation logic. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144252 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/llvm-build/llvmbuild/main.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'utils/llvm-build/llvmbuild/main.py') diff --git a/utils/llvm-build/llvmbuild/main.py b/utils/llvm-build/llvmbuild/main.py index cc4617d9b9..e27acd2f32 100644 --- a/utils/llvm-build/llvmbuild/main.py +++ b/utils/llvm-build/llvmbuild/main.py @@ -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() -- cgit v1.2.3