Example #1
0
        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);
        }