bool BuildChain(Types.BuildChain BuildChain, string BuildChainDescription, bool OutputMessages) { if (Core.Compiling.m_BuildChainStack.Contains(BuildChain)) { // already on stack, silent "success" return(true); } Core.AddToOutput("Running " + BuildChainDescription + System.Environment.NewLine); Core.Compiling.m_BuildChainStack.Push(BuildChain); foreach (var entry in BuildChain.Entries) { BuildInfo buildInfo; Types.ASM.FileInfo fileInfo; string buildInfoKey = entry.ProjectName + "/" + entry.DocumentFilename + "/" + entry.Config; Core.AddToOutput("Building " + buildInfoKey + System.Environment.NewLine); if (Core.Compiling.m_RebuiltBuildConfigFiles.ContainsValue(buildInfoKey)) { Core.AddToOutput("-already built, skipping step" + System.Environment.NewLine); continue; } var project = m_Solution.GetProjectByName(entry.ProjectName); if (project == null) { Core.AddToOutput("-could not find referenced project " + entry.ProjectName + System.Environment.NewLine); Core.Compiling.m_BuildChainStack.Pop(); return(false); } var element = project.GetElementByFilename(entry.DocumentFilename); if (element == null) { Core.AddToOutput("-could not find document " + entry.DocumentFilename + " in project " + entry.ProjectName + System.Environment.NewLine); Core.Compiling.m_BuildChainStack.Pop(); return(false); } // ugly hack to force rebuild -> problem: we do not check output file timestamps if we need to recompile -> can't have build chain with same file in different configs! Core.MainForm.MarkAsDirty(element.DocumentInfo); if (!BuildElement(element.DocumentInfo, entry.Config, entry.PreDefines, OutputMessages, out buildInfo, out fileInfo)) { Core.Compiling.m_BuildChainStack.Pop(); return(false); } Core.Compiling.m_RebuiltBuildConfigFiles.Add(buildInfoKey); } Core.AddToOutput("Running " + BuildChainDescription + " completed successfully" + System.Environment.NewLine); Core.Compiling.m_BuildChainStack.Pop(); return(true); }
bool BuildChain(Types.BuildChain BuildChain, string BuildChainDescription, string ParentDocumentConfigSetting, bool OutputMessages) { if (Core.Compiling.m_BuildChainStack.Contains(BuildChain)) { // already on stack, silent "success" return(true); } Core.AddToOutput("Running " + BuildChainDescription + System.Environment.NewLine); Core.Compiling.m_BuildChainStack.Push(BuildChain); foreach (var entry in BuildChain.Entries) { BuildInfo buildInfo; Types.ASM.FileInfo fileInfo; string buildInfoKey = entry.ProjectName + "/" + entry.DocumentFilename + "/" + entry.Config; Core.AddToOutput("Building " + buildInfoKey + System.Environment.NewLine); if (Core.Compiling.m_RebuiltBuildConfigFiles.ContainsValue(buildInfoKey)) { Core.AddToOutput("-already built, skipping step" + System.Environment.NewLine); continue; } var project = m_Solution.GetProjectByName(entry.ProjectName); if (project == null) { Core.AddToOutput("-could not find referenced project " + entry.ProjectName + System.Environment.NewLine); Core.Compiling.m_BuildChainStack.Pop(); return(false); } var element = project.GetElementByFilename(entry.DocumentFilename); if (element == null) { Core.AddToOutput("-could not find document " + entry.DocumentFilename + " in project " + entry.ProjectName + System.Environment.NewLine); Core.Compiling.m_BuildChainStack.Pop(); return(false); } // ugly hack to force rebuild -> problem: we do not check output file timestamps if we need to recompile -> can't have build chain with same file in different configs! Core.MainForm.MarkAsDirty(element.DocumentInfo); // consolidate build chain and project config pre defines //var config = project.Settings.GetConfigurationByName( entry.Config ); string preDefines = entry.PreDefines; /* * if ( config != null ) * { * preDefines += config.Defines; * }*/ if (!BuildElement(element.DocumentInfo, entry.Config, preDefines, OutputMessages, out buildInfo, out fileInfo)) { Core.Compiling.m_BuildChainStack.Pop(); return(false); } Core.Compiling.m_RebuiltBuildConfigFiles.Add(buildInfoKey); m_DocumentToBuild.DeducedDependency[ParentDocumentConfigSetting].BuildState[element.DocumentInfo.FullPath] = Core.Compiling.FileLastWriteTime(element.DocumentInfo.FullPath); } Core.AddToOutput("Running " + BuildChainDescription + " completed successfully" + System.Environment.NewLine); Core.Compiling.m_BuildChainStack.Pop(); return(true); }