Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/addins/MonoDevelop.Autotools/MakefileProjectServiceExtension.cs')
-rw-r--r--main/src/addins/MonoDevelop.Autotools/MakefileProjectServiceExtension.cs151
1 files changed, 65 insertions, 86 deletions
diff --git a/main/src/addins/MonoDevelop.Autotools/MakefileProjectServiceExtension.cs b/main/src/addins/MonoDevelop.Autotools/MakefileProjectServiceExtension.cs
index 5c71be9a49..1ca531fbaa 100644
--- a/main/src/addins/MonoDevelop.Autotools/MakefileProjectServiceExtension.cs
+++ b/main/src/addins/MonoDevelop.Autotools/MakefileProjectServiceExtension.cs
@@ -38,15 +38,17 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
+using System.Linq;
+using System.Threading.Tasks;
namespace MonoDevelop.Autotools
{
public class MakefileProjectServiceExtension : ProjectServiceExtension
{
- public override WorkspaceItem LoadWorkspaceItem (IProgressMonitor monitor, string fileName)
+ public async override Task<WorkspaceItem> LoadWorkspaceItem (ProgressMonitor monitor, string fileName)
{
- WorkspaceItem item = base.LoadWorkspaceItem (monitor, fileName);
-
+ WorkspaceItem item = await base.LoadWorkspaceItem (monitor, fileName);
+
Solution sol = item as Solution;
if (sol != null) {
//Resolve project references
@@ -59,68 +61,65 @@ namespace MonoDevelop.Autotools
"Error resolving Makefile based project references for solution {0}", sol.Name), e);
}
}
-
+
return item;
}
+ }
-
- protected override SolutionEntityItem LoadSolutionItem (IProgressMonitor monitor, string fileName)
+ [RegisterProjectModelExtension]
+ public class MakefileProjectExtension: ProjectExtension
+ {
+ MakefileData data;
+
+ protected override void OnReadProject (ProgressMonitor monitor, MonoDevelop.Projects.Formats.MSBuild.MSBuildProject msproject)
{
- SolutionEntityItem entry = base.LoadSolutionItem (monitor, fileName);
- if (entry == null)
- return null;
-
- Project project = entry as Project;
- if (project == null)
- return entry;
+ base.OnReadProject (monitor, msproject);
+ var ext = msproject.GetMonoDevelopProjectExtension ("MonoDevelop.Autotools.MakefileInfo");
+ if (ext == null)
+ return;
- //Project
- MakefileData data = entry.ExtendedProperties ["MonoDevelop.Autotools.MakefileInfo"] as MakefileData;
+ data = MakefileData.Read (ext);
if (data == null)
- return entry;
+ return;
monitor.BeginTask (GettextCatalog.GetString ("Updating project from Makefile"), 1);
try {
- data.OwnerProject = project;
+ data.OwnerProject = Project;
if (data.SupportsIntegration)
data.UpdateProject (monitor, false);
monitor.Step (1);
} catch (Exception e) {
monitor.ReportError (GettextCatalog.GetString (
- "Error loading Makefile for project {0}", project.Name), e);
+ "\tError loading Makefile for project {0}", Project.Name), e);
} finally {
monitor.EndTask ();
}
- return entry;
}
- public override void Save (IProgressMonitor monitor, SolutionEntityItem entry)
+ protected override void OnWriteProject (ProgressMonitor monitor, MonoDevelop.Projects.Formats.MSBuild.MSBuildProject msproject)
{
- base.Save (monitor, entry);
-
- Project project = entry as Project;
- if (project == null)
- return;
-
- MakefileData data = project.ExtendedProperties ["MonoDevelop.Autotools.MakefileInfo"] as MakefileData;
+ base.OnWriteProject (monitor, msproject);
+
if (data == null || !data.SupportsIntegration)
return;
+ msproject.SetProjectExtension ("MonoDevelop.Autotools.MakefileInfo", data.Write ());
+
try {
data.UpdateMakefile (monitor);
} catch (Exception e) {
LoggingService.LogError (GettextCatalog.GetString ("Error saving to Makefile ({0}) for project {1}",
- data.AbsoluteMakefileName, project.Name, e));
+ data.AbsoluteMakefileName, Project.Name, e));
monitor.ReportError (GettextCatalog.GetString (
- "Error saving to Makefile ({0}) for project {1}", data.AbsoluteMakefileName, project.Name), e);
+ "Error saving to Makefile ({0}) for project {1}", data.AbsoluteMakefileName, Project.Name), e);
}
}
- public override List<FilePath> GetItemFiles (SolutionEntityItem entry, bool includeReferencedFiles)
+ protected override IEnumerable<FilePath> OnGetItemFiles (bool includeReferencedFiles)
{
- List<FilePath> col = base.GetItemFiles (entry, includeReferencedFiles);
+ List<FilePath> col = base.OnGetItemFiles (includeReferencedFiles).ToList ();
- MakefileData data = entry.ExtendedProperties ["MonoDevelop.Autotools.MakefileInfo"] as MakefileData;
+ MakefileData data = Project.ExtendedProperties ["MonoDevelop.Autotools.MakefileInfo"] as MakefileData;
if (data == null || !data.SupportsIntegration || string.IsNullOrEmpty (data.AbsoluteMakefileName))
return col;
@@ -136,31 +135,21 @@ namespace MonoDevelop.Autotools
}
- //TODO
- protected override bool GetNeedsBuilding (SolutionEntityItem entry, ConfigurationSelector configuration)
- {
- return base.GetNeedsBuilding (entry, configuration);
- }
-
//FIXME: Check whether autogen.sh is required or not
- protected override BuildResult Build (IProgressMonitor monitor, SolutionEntityItem entry, ConfigurationSelector configuration)
+ protected async override Task<BuildResult> OnBuild (ProgressMonitor monitor, ConfigurationSelector configuration)
{
- Project project = entry as Project;
- if (project == null)
- return base.Build (monitor, entry, configuration);
-
- MakefileData data = project.ExtendedProperties ["MonoDevelop.Autotools.MakefileInfo"] as MakefileData;
+ MakefileData data = Project.ExtendedProperties ["MonoDevelop.Autotools.MakefileInfo"] as MakefileData;
if (data == null || !data.SupportsIntegration || String.IsNullOrEmpty (data.BuildTargetName))
- return base.Build (monitor, entry, configuration);
+ return await base.OnBuild (monitor, configuration);
//FIXME: Gen autofoo ? autoreconf?
string output = String.Empty;
int exitCode = 0;
- monitor.BeginTask (GettextCatalog.GetString ("Building {0}", project.Name), 1);
+ monitor.BeginTask (GettextCatalog.GetString ("Building {0}", Project.Name), 1);
try
{
- string baseDir = project.BaseDirectory;
+ string baseDir = Project.BaseDirectory;
string args = string.Format ("-j {0} {1}", data.ParallelProcesses, data.BuildTargetName);
using (var swOutput = new StringWriter ()) {
@@ -174,7 +163,8 @@ namespace MonoDevelop.Autotools
chainedOutput,
chainedOutput,
null)) {
- process.WaitForOutput ();
+
+ await process.Task;
chainedOutput.UnchainWriter (monitor.Log);
chainedOutput.UnchainWriter (swOutput);
@@ -200,7 +190,7 @@ namespace MonoDevelop.Autotools
Regex regexError = data.GetErrorRegex (false);
Regex regexWarning = data.GetWarningRegex (false);
- BuildResult cr = ParseOutput (tf, output, project.BaseDirectory, regexError, regexWarning);
+ BuildResult cr = ParseOutput (tf, output, Project.BaseDirectory, regexError, regexWarning);
if (exitCode != 0 && cr.FailedBuildCount == 0)
cr.AddError (GettextCatalog.GetString ("Build failed. See Build Output panel."));
@@ -330,24 +320,17 @@ namespace MonoDevelop.Autotools
return null;
}
- protected override void Clean (IProgressMonitor monitor, SolutionEntityItem entry, ConfigurationSelector configuration)
+ protected async override Task<BuildResult> OnClean (ProgressMonitor monitor, ConfigurationSelector configuration)
{
- Project proj = entry as Project;
- if (proj == null) {
- base.Clean (monitor, entry, configuration);
- return;
- }
-
- MakefileData data = proj.ExtendedProperties ["MonoDevelop.Autotools.MakefileInfo"] as MakefileData;
+ MakefileData data = Project.ExtendedProperties ["MonoDevelop.Autotools.MakefileInfo"] as MakefileData;
if (data == null || !data.SupportsIntegration || String.IsNullOrEmpty (data.CleanTargetName)) {
- base.Clean (monitor, entry, configuration);
- return;
+ return await base.OnClean (monitor, configuration);
}
monitor.BeginTask ( GettextCatalog.GetString( "Cleaning project"), 1);
try
{
- string baseDir = proj.BaseDirectory;
+ string baseDir = Project.BaseDirectory;
ProcessWrapper process = Runtime.ProcessService.StartProcess ( "make",
data.CleanTargetName,
@@ -355,7 +338,8 @@ namespace MonoDevelop.Autotools
monitor.Log,
monitor.Log,
null );
- process.WaitForOutput ();
+
+ await process.Task;
if ( process.ExitCode > 0 )
throw new Exception ( GettextCatalog.GetString ("An unspecified error occurred while running '{0}'", "make " + data.CleanTargetName) );
@@ -365,52 +349,47 @@ namespace MonoDevelop.Autotools
catch ( Exception e )
{
monitor.ReportError ( GettextCatalog.GetString ("Project could not be cleaned: "), e );
- return;
+ var res = new BuildResult ();
+ res.AddError (GettextCatalog.GetString ("Project could not be cleaned: ") + e.Message);
+ return res;
}
finally
{
monitor.EndTask ();
}
monitor.ReportSuccess ( GettextCatalog.GetString ( "Project successfully cleaned"));
+ return BuildResult.Success;
}
- protected override bool CanExecute (SolutionEntityItem item, ExecutionContext context, ConfigurationSelector configuration)
+ protected override bool OnGetCanExecute (ExecutionContext context, ConfigurationSelector configuration)
{
- Project project = item as Project;
- if (project != null) {
- MakefileData data = project.ExtendedProperties ["MonoDevelop.Autotools.MakefileInfo"] as MakefileData;
- if (data != null && data.SupportsIntegration && !String.IsNullOrEmpty (data.ExecuteTargetName))
- return true;
- }
- return base.CanExecute (item, context, configuration);
+ MakefileData data = Project.ExtendedProperties ["MonoDevelop.Autotools.MakefileInfo"] as MakefileData;
+ if (data != null && data.SupportsIntegration && !String.IsNullOrEmpty (data.ExecuteTargetName))
+ return true;
+ return base.OnGetCanExecute (context, configuration);
}
- protected override void Execute (IProgressMonitor monitor, SolutionEntityItem entry, ExecutionContext context, ConfigurationSelector configuration)
+ protected async override Task OnExecute (ProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration)
{
- Project project = entry as Project;
- if (project == null) {
- base.Execute (monitor, entry, context, configuration);
- return;
- }
-
- MakefileData data = project.ExtendedProperties ["MonoDevelop.Autotools.MakefileInfo"] as MakefileData;
+ MakefileData data = Project.ExtendedProperties ["MonoDevelop.Autotools.MakefileInfo"] as MakefileData;
if (data == null || !data.SupportsIntegration || String.IsNullOrEmpty (data.ExecuteTargetName)) {
- base.Execute (monitor, entry, context, configuration);
+ base.OnExecute (monitor, context, configuration);
return;
}
IConsole console = context.ConsoleFactory.CreateConsole (true);
- monitor.BeginTask (GettextCatalog.GetString ("Executing {0}", project.Name), 1);
+ monitor.BeginTask (GettextCatalog.GetString ("Executing {0}", Project.Name), 1);
try
{
ProcessWrapper process = Runtime.ProcessService.StartProcess ("make",
- data.ExecuteTargetName,
- project.BaseDirectory,
- console.Out,
- console.Error,
- null);
- process.WaitForOutput ();
+ data.ExecuteTargetName,
+ Project.BaseDirectory,
+ console.Out,
+ console.Error,
+ null);
+
+ await process.Task;
monitor.Log.WriteLine (GettextCatalog.GetString ("The application exited with code: {0}", process.ExitCode));
monitor.Step (1);