xamarin-macios/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/DSymUtilTaskBase.cs

83 строки
1.9 KiB
C#

using System;
using System.IO;
using System.Linq;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
namespace Xamarin.MacDev.Tasks
{
public abstract class DSymUtilTaskBase : XamarinToolTask
{
#region Inputs
[Required]
public string AppBundleDir { get; set; }
public string Architectures { get; set; }
[Required]
public string DSymDir { get; set; }
[Output]
[Required]
public ITaskItem Executable { get; set; }
#endregion
#region Outputs
[Output]
public ITaskItem[] DsymContentFiles { get; set; }
#endregion
protected override string ToolName {
get { return "dsymutil"; }
}
public override bool Execute ()
{
var result = base.Execute ();
var contentsDir = Path.Combine (DSymDir, "Contents");
if (Directory.Exists(contentsDir))
DsymContentFiles = Directory.EnumerateFiles (contentsDir).Select (x => new TaskItem (x)).ToArray ();
return result;
}
protected override string GenerateFullPathToTool ()
{
if (!string.IsNullOrEmpty (ToolPath))
return Path.Combine (ToolPath, ToolExe);
var path = Path.Combine (AppleSdkSettings.DeveloperRoot, "Toolchains", "XcodeDefault.xctoolchain", "usr", "bin", ToolExe);
return File.Exists (path) ? path : ToolExe;
}
protected override string GenerateCommandLineCommands ()
{
var args = new CommandLineBuilder ();
args.AppendSwitch ("-num-threads");
args.AppendSwitch ("4");
args.AppendSwitch ("-z");
args.AppendSwitch ("-o");
args.AppendFileNameIfNotNull (DSymDir);
args.AppendFileNameIfNotNull (Executable.ItemSpec);
return args.ToString ();
}
protected override void LogEventsFromTextOutput (string singleLine, MessageImportance messageImportance)
{
if (singleLine.StartsWith ("warning:", StringComparison.Ordinal))
Log.LogWarning (singleLine);
else
Log.LogMessage (messageImportance, singleLine);
}
}
}