protected void LoadProjectFile(BuildFile projectsFile) { _isPopulating = true; foreach (var p in projectsFile.Projects) { var pa = new ProjectAdapter(p) { BuildFile = this }; Projects.Add(pa); UpdateHashes(pa); } _isPopulating = false; foreach (var p in Projects) { foreach (var depName in p.Dependencies) { var dep = GetProjectByName(depName); if (dep == null) { continue; } dep.ActualDependants.GetInternalList().Add(p); p.ActualDependencies.GetInternalList().Add(dep); } } }
void UpdateHashes(ProjectAdapter pa) { // get the reverse hash so that we can // go through the actual hash and remove // the changed entry RemoveHashes(pa); AddHashes(pa); }
public ProjectAdapter CreateProject(string projectName) { var pa = new ProjectAdapter(projectName) { BuildFile = this }; return(pa); }
void AddHashes(ProjectAdapter pa) { if (!_hash.ContainsKey(pa.Name)) { var lst = new List <ProjectAdapter>() { pa }; _hash.Add(pa.Name, lst); } else { _hash[pa.Name].Add(pa); } _reverseHash.Add(pa, pa.Name); }
void RemoveHashes(ProjectAdapter pa) { if (_reverseHash.ContainsKey(pa)) { var revHashStr = _reverseHash[pa]; if (_hash.ContainsKey(revHashStr)) { _hash[revHashStr].Remove(pa); } if (_hash[revHashStr].Count == 0) { _hash.Remove(revHashStr); } _reverseHash.Remove(pa); } }
public ProjectAdapter ImportProject(string fileName, string sccRoot) { var filename = fileName; var ext = Path.GetExtension(filename); BaseVsProject vsProject = null; switch (ext.ToLower()) { case ".vcproj": vsProject = VcProject.Parse(filename); break; case ".csproj": vsProject = CSharpProject.Parse(filename); break; case ".dsp": vsProject = VisualCpp6Project.Parse(filename); break; default: return(null); } if (vsProject == null) { return(null); } if (!sccRoot.EndsWith("/")) { sccRoot = sccRoot + "/"; } var project = new ProjectAdapter(new Project(), false) { BuildFile = this, Name = vsProject.Name, Path = GetPathRootedAtBuildsFile(vsProject.Filepath), SccPath = sccRoot + GetPathRootedAtBuildsFile(Path.GetDirectoryName(vsProject.Filepath)).Replace("\\", "/") }; // check if project path is relative to mproj file switch (vsProject.Framework) { case ProjectFramework.VisualCpp2003: project.Framework = "vc71"; break; case ProjectFramework.VisualCpp2005: project.Framework = "vc8"; break; case ProjectFramework.VisualCpp6: project.Framework = "vc6"; break; case ProjectFramework.VisualCs2005: project.Framework = "cs"; break; case ProjectFramework.VisualCs2003: project.Framework = "vc71"; break; } bool bConfigurationFound = false; var projectOutput = new ProjectOutputAdapter(); foreach (var conf in vsProject.Configurations) { if (conf.Name.ToLower().Contains("release")) { project.BuildOpt = "\"" + conf.Name + "\" " + conf.Platform; projectOutput.PathList.Add(Path.Combine(GetPathRootedAtBuildsFile(conf.OutputPath), "*.*")); bConfigurationFound = true; project.Target.PlatformName = conf.Platform; project.Target.ConfigurationName = conf.Name; break; } } if (!bConfigurationFound) { if (vsProject.Framework == ProjectFramework.VisualCpp6) { projectOutput.PathList.Add( Path.Combine(GetPathRootedAtBuildsFile(Path.GetDirectoryName(vsProject.Filepath)), @"release\*.*")); } else { projectOutput.PathList.Add( Path.Combine(GetPathRootedAtBuildsFile(Path.GetDirectoryName(vsProject.Filepath)), "*.*")); } } project.OutputInformation.Add(projectOutput); return(project); }