From d3d3649a68cb1fa589fdd987a6690dbd5d671f0d Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Sun, 17 Sep 2017 15:35:20 -0700 Subject: Initial code commit --- src/WixToolset.BuildTasks/Pyro.cs | 140 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 src/WixToolset.BuildTasks/Pyro.cs (limited to 'src/WixToolset.BuildTasks/Pyro.cs') diff --git a/src/WixToolset.BuildTasks/Pyro.cs b/src/WixToolset.BuildTasks/Pyro.cs new file mode 100644 index 00000000..f6b069da --- /dev/null +++ b/src/WixToolset.BuildTasks/Pyro.cs @@ -0,0 +1,140 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolset.BuildTasks +{ + using System; + using System.Collections.Generic; + using System.IO; + using Microsoft.Build.Framework; + + /// + /// An MSBuild task to run the WiX patch builder. + /// + public sealed class Pyro : WixToolTask + { + private const string PyroToolName = "pyro.exe"; + + public bool BinaryDeltaPatch { get; set; } + public string CabinetCachePath { get; set; } + public string ExtensionDirectory { get; set; } + public ITaskItem[] Extensions { get; set; } + public bool LeaveTemporaryFiles { get; set; } + public string[] ReferencePaths { get; set; } + public bool ReuseCabinetCache { get; set; } + public bool SuppressAssemblies { get; set; } + public bool SuppressFiles { get; set; } + public bool SuppressFileHashAndInfo { get; set; } + public bool SuppressPdbOutput { get; set; } + + [Required] + public string DefaultBaselineId { get; set; } + + public ITaskItem[] BindInputPathsForTarget { get; set; } + public ITaskItem[] BindInputPathsForUpdated { get; set; } + + [Required] + public ITaskItem InputFile { get; set; } + + [Required] + [Output] + public ITaskItem OutputFile { get; set; } + + [Output] + public ITaskItem PdbOutputFile { get; set; } + + [Required] + public ITaskItem[] Transforms { get; set; } + + /// + /// Get the name of the executable. + /// + /// The ToolName is used with the ToolPath to get the location of pyro.exe. + /// The name of the executable. + protected override string ToolName + { + get { return PyroToolName; } + } + + /// + /// Get the path to the executable. + /// + /// GetFullPathToTool is only called when the ToolPath property is not set (see the ToolName remarks above). + /// The full path to the executable or simply torch.exe if it's expected to be in the system path. + protected override string GenerateFullPathToTool() + { + // If there's not a ToolPath specified, it has to be in the system path. + if (String.IsNullOrEmpty(this.ToolPath)) + { + return PyroToolName; + } + + return Path.Combine(Path.GetFullPath(this.ToolPath), PyroToolName); + } + + /// + /// Builds a command line for bind-input paths (-bt and -bu switches). + /// + private void AppendBindInputPaths(WixCommandLineBuilder commandLineBuilder, IEnumerable bindInputPaths, string switchName) + { + if (null != bindInputPaths) + { + Queue formattedBindInputPaths = new Queue(); + foreach (ITaskItem item in bindInputPaths) + { + String formattedPath = string.Empty; + String bindName = item.GetMetadata("BindName"); + if (!String.IsNullOrEmpty(bindName)) + { + formattedPath = String.Concat(bindName, "=", item.GetMetadata("FullPath")); + } + else + { + formattedPath = item.GetMetadata("FullPath"); + } + formattedBindInputPaths.Enqueue(formattedPath); + } + + commandLineBuilder.AppendArrayIfNotNull(switchName, formattedBindInputPaths.ToArray()); + } + } + + /// + /// Builds a command line from options in this task. + /// + protected override void BuildCommandLine(WixCommandLineBuilder commandLineBuilder) + { + // Always put the output first so it is easy to find in the log. + commandLineBuilder.AppendSwitchIfNotNull("-out ", this.OutputFile); + commandLineBuilder.AppendSwitchIfNotNull("-pdbout ", this.PdbOutputFile); + + base.BuildCommandLine(commandLineBuilder); + + this.AppendBindInputPaths(commandLineBuilder, this.BindInputPathsForTarget, "-bt "); + this.AppendBindInputPaths(commandLineBuilder, this.BindInputPathsForUpdated, "-bu "); + + commandLineBuilder.AppendFileNameIfNotNull(this.InputFile); + commandLineBuilder.AppendSwitchIfNotNull("-cc ", this.CabinetCachePath); + commandLineBuilder.AppendIfTrue("-delta", this.BinaryDeltaPatch); + commandLineBuilder.AppendExtensions(this.Extensions, this.ExtensionDirectory, this.ReferencePaths); + commandLineBuilder.AppendIfTrue("-notidy", this.LeaveTemporaryFiles); + commandLineBuilder.AppendIfTrue("-reusecab", this.ReuseCabinetCache); + commandLineBuilder.AppendIfTrue("-sa", this.SuppressAssemblies); + commandLineBuilder.AppendIfTrue("-sf", this.SuppressFiles); + commandLineBuilder.AppendIfTrue("-sh", this.SuppressFileHashAndInfo); + commandLineBuilder.AppendIfTrue("-spdb", this.SuppressPdbOutput); + foreach (ITaskItem transform in this.Transforms) + { + string transformPath = transform.ItemSpec; + string baselineId = transform.GetMetadata("OverrideBaselineId"); + if (String.IsNullOrEmpty(baselineId)) + { + baselineId = this.DefaultBaselineId; + } + + commandLineBuilder.AppendTextIfNotNull(String.Format("-t {0} {1}", baselineId, transformPath)); + } + + commandLineBuilder.AppendTextIfNotNull(this.AdditionalOptions); + } + } +} -- cgit v1.2.3-55-g6feb