jamesa/_common.py
changeset 5 842a773e65f2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jamesa/_common.py	Wed Nov 04 17:40:17 2009 +0000
@@ -0,0 +1,64 @@
+# Copyright (c) 2009 Symbian Foundation Ltd
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Symbian Foundation Ltd - initial contribution.
+# 
+# Contributors:
+#
+# Description:
+# Data structure code used by dependency analysis scripts.
+
+"""Common data structure code for build_graph.py and tools.
+"""
+
+__author__ = 'James Aley'
+__email__ = 'jamesa@symbian.org'
+__version__ = '1.0'
+
+class Node:
+    """Node objects are similar to the Symbian notion of a Component, but
+    they are defined in a practical way for ROM building with less intuitive meaning.
+
+    A Node object is identified by:
+      - the path to bld.inf
+      where by:
+        - the bld.inf file contains a PRJ_MMPFILES section with a least one MMP file.
+    """
+ 
+    def __str__(self):
+        """Represent node as string, using node_path
+        """
+        return self.node_path
+
+    def __init__(self, path):
+        """Initialize new Node with given path to bld.inf
+        """
+        # path to the bld.inf file associating these mmp components
+        self.node_path = ''
+
+        # list of node_path values for Node objects owning referenced from
+        # the MMP files
+        self.dependencies = []
+
+        # contents of this Node, likely not used algorithmically but might
+        # be useful later for reporting.
+        self.mmp_components = []
+
+        # the following are nodes that also satisfy the dependencies (in part), and may
+        # be of interest when building a ROM.
+        self.interesting = []
+
+        # dependencies that were not linked to another component in the source tree
+        self.unresolved = []
+
+        self.node_path = path
+
+    def add_deps(self, deps):
+        """Add dependencies to the list, filtering duplicates
+        """
+        self.dependencies.extend(filter(lambda x: x not in self.dependencies, deps))
+