From: Ankit Jain Date: Thu, 3 Mar 2011 14:27:21 +0000 (+0530) Subject: [xbuild] Log build errors and raise events even if a build fails. X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=mono.git;a=commitdiff_plain;h=92c12ba52450f7cc14bd4fd09eaf450157715b00 [xbuild] Log build errors and raise events even if a build fails. --- diff --git a/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Engine.cs b/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Engine.cs index 6799dc85dae..5674cbaed38 100644 --- a/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Engine.cs +++ b/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Engine.cs @@ -229,6 +229,31 @@ namespace Microsoft.Build.BuildEngine { IDictionary targetOutputs, BuildSettings buildFlags, string toolsVersion) { + bool result = false; + try { + StartEngineBuild (); + result = BuildProjectFileInternal (projectFile, targetNames, globalProperties, targetOutputs, buildFlags, toolsVersion); + return result; + } catch (InvalidProjectFileException ie) { + this.LogError (projectFile, ie.Message); + this.LogMessage (MessageImportance.Low, String.Format ("{0}: {1}", projectFile, ie.ToString ())); + return false; + } catch (Exception e) { + this.LogError (projectFile, e.Message); + this.LogMessage (MessageImportance.Low, String.Format ("{0}: {1}", projectFile, e.ToString ())); + return false; + } finally { + EndEngineBuild (result); + } + } + + bool BuildProjectFileInternal (string projectFile, + string[] targetNames, + BuildPropertyGroup globalProperties, + IDictionary targetOutputs, + BuildSettings buildFlags, string toolsVersion) + { + if ((buildFlags & BuildSettings.DoNotResetPreviouslyBuiltTargets) != BuildSettings.DoNotResetPreviouslyBuiltTargets) builtTargetsOutputByName.Clear (); @@ -366,12 +391,25 @@ namespace Microsoft.Build.BuildEngine { loggers.Clear (); } - internal void StartProjectBuild (Project project, string [] target_names) + void StartEngineBuild () { if (!buildStarted) { LogBuildStarted (); buildStarted = true; } + } + + void EndEngineBuild (bool succeeded) + { + if (buildStarted && currentlyBuildingProjectsStack.Count == 0) { + LogBuildFinished (succeeded); + buildStarted = false; + } + } + + internal void StartProjectBuild (Project project, string [] target_names) + { + StartEngineBuild (); if (currentlyBuildingProjectsStack.Count == 0 || String.Compare (currentlyBuildingProjectsStack.Peek ().FullFileName, project.FullFileName) != 0) @@ -397,10 +435,7 @@ namespace Microsoft.Build.BuildEngine { String.Compare (top_project.FullFileName, currentlyBuildingProjectsStack.Peek ().FullFileName) != 0) LogProjectFinished (top_project, succeeded); - if (currentlyBuildingProjectsStack.Count == 0) { - LogBuildFinished (succeeded); - buildStarted = false; - } + EndEngineBuild (succeeded); } internal void ClearBuiltTargetsForProject (Project project) diff --git a/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/LogExtensions.cs b/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/LogExtensions.cs index 030ea8aa86a..e83e82c880c 100644 --- a/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/LogExtensions.cs +++ b/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/LogExtensions.cs @@ -47,15 +47,21 @@ namespace Microsoft.Build.BuildEngine else return String.Format (unformatted, args); } - + public static void LogError (this Engine engine, string message, params object[] messageArgs) + { + engine.LogError (null, message, messageArgs); + } + + public static void LogError (this Engine engine, string filename, string message, + params object[] messageArgs) { if (message == null) throw new ArgumentNullException ("message"); BuildErrorEventArgs beea = new BuildErrorEventArgs ( - null, null, null, 0, 0, 0, 0, FormatString (message, messageArgs), + null, null, filename, 0, 0, 0, 0, FormatString (message, messageArgs), null, null); engine.EventSource.FireErrorRaised (engine, beea); }