llvm-build: Split out the validation logic.
authorDaniel Dunbar <daniel@zuster.org>
Thu, 10 Nov 2011 00:49:58 +0000 (00:49 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 10 Nov 2011 00:49:58 +0000 (00:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144252 91177308-0d34-0410-b5e6-96231b3b80d8

utils/llvm-build/llvmbuild/main.py

index cc4617d9b99ad7e8605b83b07936ab52bc7c9d4d..e27acd2f32659192f5a8fb7b229d8ecba769fc2a 100644 (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()