2 using System.Collections.Generic;
5 using SysGen.RBuild.Framework;
6 using SysGen.BuildEngine.Framework;
8 namespace SysGen.BuildEngine
10 public class SysGenDependencyTracker
12 RBuildProject m_Project = null;
13 RBuildModuleCollection m_Modules = new RBuildModuleCollection();
14 RBuildModuleCollection m_DependsOn = new RBuildModuleCollection();
15 RBuildModuleCollection m_DependencyOf = new RBuildModuleCollection();
17 public SysGenDependencyTracker(RBuildProject project)
22 public SysGenDependencyTracker(RBuildProject project, RBuildModule module)
25 m_Modules.Add(module);
29 public SysGenDependencyTracker(RBuildProject project, RBuildModuleCollection modules)
32 m_Modules.Add(modules);
36 public void Calculate()
39 m_DependencyOf.Clear();
41 foreach (RBuildModule module in m_Modules)
43 GetModuleDependencies(module);
46 foreach (RBuildModule projectModule in m_Project.Modules)
48 foreach (RBuildModule module in m_Modules)
50 if (projectModule.Needs.Contains(module))
52 m_DependencyOf.Add(projectModule);
58 private void GetModuleDependencies(RBuildModule module)
60 foreach (RBuildModule library in module.Needs)
62 if (m_DependsOn.Contains(library) == false)
64 if (m_Modules.Contains(library) == false)
66 //Add it to the list of dependencies
67 m_DependsOn.Add(library);
69 //Investigate the module to find its dependencies
70 GetModuleDependencies(library);
76 public RBuildModuleCollection DependsOn
78 get { return m_DependsOn; }
81 public RBuildModuleCollection DependencyOf
83 get { return m_DependencyOf; }
86 public RBuildModuleCollection Missing
90 RBuildModuleCollection missing = new RBuildModuleCollection();
92 foreach (RBuildModule dependency in DependsOn)
94 if (m_Project.Platform.Modules.Contains(dependency) == false)
95 missing.Add(dependency);
102 public RBuildModuleCollection Using
106 RBuildModuleCollection missing = new RBuildModuleCollection();
108 foreach (RBuildModule dependency in DependencyOf)
110 if (m_Project.Platform.Modules.Contains(dependency) == true)
111 missing.Add(dependency);