- ProjectStartedEventArgs psea;
- if (targetNames.Length == 0) {
- if (project.DefaultTargets != String.Empty)
- psea = new ProjectStartedEventArgs ("Project started.", null, project.FullFileName,
- project.DefaultTargets, null, null);
- else
- psea = new ProjectStartedEventArgs ("Project started.", null, project.FullFileName, "default", null, null);
- } else
- psea = new ProjectStartedEventArgs ("Project started.", null, project.FullFileName, String.Join (";",
- targetNames), null, null);
+ 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)
+ LogProjectStarted (project, target_names);
+
+ currentlyBuildingProjectsStack.Push (project);
+ }
+
+ internal void EndProjectBuild (Project project, bool succeeded)
+ {
+ if (!buildStarted)
+ throw new Exception ("build isnt started currently");
+
+ Project top_project = currentlyBuildingProjectsStack.Pop ();
+
+ if (String.Compare (project.FullFileName, top_project.FullFileName) != 0)
+ throw new Exception (String.Format (
+ "INTERNAL ERROR: Project finishing is not the same as the one on top " +
+ "of the stack. Project: {0} Top of stack: {1}",
+ project.FullFileName, top_project.FullFileName));
+
+ if (currentlyBuildingProjectsStack.Count == 0 ||
+ String.Compare (top_project.FullFileName, currentlyBuildingProjectsStack.Peek ().FullFileName) != 0)
+ LogProjectFinished (top_project, succeeded);
+
+ EndEngineBuild (succeeded);
+ }
+
+ internal void ClearBuiltTargetsForProject (Project project)
+ {
+ string project_key = project.GetKeyForTarget (String.Empty, false);
+ var to_remove_keys = BuiltTargetsOutputByName.Keys.Where (key => key.StartsWith (project_key)).ToList ();
+ foreach (string to_remove_key in to_remove_keys)
+ BuiltTargetsOutputByName.Remove (to_remove_key);
+ }
+
+ void LogProjectStarted (Project project, string [] target_names)
+ {
+ string targets;
+ if (target_names == null || target_names.Length == 0)
+ targets = String.Empty;
+ else
+ targets = String.Join (";", target_names);
+
+ ProjectStartedEventArgs psea = new ProjectStartedEventArgs ("Project started.", null, project.FullFileName, targets,
+ project.EvaluatedPropertiesAsDictionaryEntries, project.EvaluatedItemsByNameAsDictionaryEntries);
+