From 551f2a43de0465202e3a3aca24379481cc35733e Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Thu, 28 May 2020 21:21:24 +1000 Subject: Rename DoIt to WixBuild. --- src/WixToolset.BuildTasks/WixBuild.cs | 178 ++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 src/WixToolset.BuildTasks/WixBuild.cs (limited to 'src/WixToolset.BuildTasks/WixBuild.cs') diff --git a/src/WixToolset.BuildTasks/WixBuild.cs b/src/WixToolset.BuildTasks/WixBuild.cs new file mode 100644 index 00000000..b8fb4136 --- /dev/null +++ b/src/WixToolset.BuildTasks/WixBuild.cs @@ -0,0 +1,178 @@ +// 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.Runtime.InteropServices; + using Microsoft.Build.Framework; + using Microsoft.Build.Utilities; + using WixToolset.Core; + using WixToolset.Data; + using WixToolset.Extensibility; + using WixToolset.Extensibility.Data; + using WixToolset.Extensibility.Services; + + /// + /// An MSBuild task to run the WiX compiler. + /// + public sealed class WixBuild : ToolsetTask + { + public string[] Cultures { get; set; } + + public string[] DefineConstants { get; set; } + + public ITaskItem[] Extensions { get; set; } + + public string ExtensionDirectory { get; set; } + + public string[] IncludeSearchPaths { get; set; } + + public string InstallerPlatform { get; set; } + + [Required] + public ITaskItem IntermediateDirectory { get; set; } + + public ITaskItem[] LocalizationFiles { get; set; } + + public ITaskItem[] LibraryFiles { get; set; } + + [Output] + [Required] + public ITaskItem OutputFile { get; set; } + + public string OutputType { get; set; } + + public ITaskItem PdbFile { get; set; } + + public string PdbType { get; set; } + + public bool Pedantic { get; set; } + + [Required] + public ITaskItem[] SourceFiles { get; set; } + + public string[] ReferencePaths { get; set; } + + + public ITaskItem[] BindInputPaths { get; set; } + + public bool BindFiles { get; set; } + + public ITaskItem BindContentsFile { get; set; } + + public ITaskItem BindOutputsFile { get; set; } + + public ITaskItem BindBuiltOutputsFile { get; set; } + + public string CabinetCachePath { get; set; } + public int CabinetCreationThreadCount { get; set; } + public string DefaultCompressionLevel { get; set; } + + [Output] + public ITaskItem UnreferencedSymbolsFile { get; set; } + + public ITaskItem WixProjectFile { get; set; } + public string[] WixVariables { get; set; } + + public bool SuppressValidation { get; set; } + public string[] SuppressIces { get; set; } + public string AdditionalCub { get; set; } + + protected override string TaskShortName => "WIX"; + + protected override void ExecuteCore(IWixToolsetServiceProvider serviceProvider, IMessageListener listener, string commandLineString) + { + this.Log.LogMessage(MessageImportance.Normal, "wix.exe " + commandLineString); + + var messaging = serviceProvider.GetService(); + messaging.SetListener(listener); + + var arguments = serviceProvider.GetService(); + arguments.Populate(commandLineString); + + var commandLine = serviceProvider.GetService(); + commandLine.ExtensionManager = this.CreateExtensionManagerWithStandardBackends(serviceProvider, messaging, arguments.Extensions); + commandLine.Arguments = arguments; + var command = commandLine.ParseStandardCommandLine(); + command?.Execute(); + } + + protected override void BuildCommandLine(WixCommandLineBuilder commandLineBuilder) + { + commandLineBuilder.AppendTextUnquoted("build"); + + commandLineBuilder.AppendSwitchIfNotNull("-platform ", this.InstallerPlatform); + commandLineBuilder.AppendSwitchIfNotNull("-out ", this.OutputFile); + commandLineBuilder.AppendSwitchIfNotNull("-outputType ", this.OutputType); + commandLineBuilder.AppendSwitchIfNotNull("-pdb ", this.PdbFile); + commandLineBuilder.AppendSwitchIfNotNull("-pdbType ", this.PdbType); + commandLineBuilder.AppendArrayIfNotNull("-culture ", this.Cultures); + commandLineBuilder.AppendArrayIfNotNull("-d ", this.DefineConstants); + commandLineBuilder.AppendArrayIfNotNull("-I ", this.IncludeSearchPaths); + commandLineBuilder.AppendExtensions(this.Extensions, this.ExtensionDirectory, this.ReferencePaths); + commandLineBuilder.AppendIfTrue("-sval", this.SuppressValidation); + commandLineBuilder.AppendArrayIfNotNull("-sice ", this.SuppressIces); + commandLineBuilder.AppendSwitchIfNotNull("-usf ", this.UnreferencedSymbolsFile); + commandLineBuilder.AppendSwitchIfNotNull("-cc ", this.CabinetCachePath); + commandLineBuilder.AppendSwitchIfNotNull("-intermediatefolder ", this.IntermediateDirectory); + commandLineBuilder.AppendSwitchIfNotNull("-contentsfile ", this.BindContentsFile); + commandLineBuilder.AppendSwitchIfNotNull("-outputsfile ", this.BindOutputsFile); + commandLineBuilder.AppendSwitchIfNotNull("-builtoutputsfile ", this.BindBuiltOutputsFile); + + base.BuildCommandLine(commandLineBuilder); + + commandLineBuilder.AppendIfTrue("-bindFiles", this.BindFiles); + commandLineBuilder.AppendArrayIfNotNull("-bindPath ", this.CalculateBindPathStrings()); + commandLineBuilder.AppendArrayIfNotNull("-loc ", this.LocalizationFiles); + commandLineBuilder.AppendArrayIfNotNull("-lib ", this.LibraryFiles); + commandLineBuilder.AppendTextIfNotWhitespace(this.AdditionalOptions); + commandLineBuilder.AppendFileNamesIfNotNull(this.SourceFiles, " "); + } + + private IExtensionManager CreateExtensionManagerWithStandardBackends(IWixToolsetServiceProvider serviceProvider, IMessaging messaging, string[] extensions) + { + var extensionManager = serviceProvider.GetService(); + + foreach (var type in new[] { typeof(WixToolset.Core.Burn.WixToolsetStandardBackend), typeof(WixToolset.Core.WindowsInstaller.WixToolsetStandardBackend) }) + { + extensionManager.Add(type.Assembly); + } + + foreach (var extension in extensions) + { + try + { + extensionManager.Load(extension); + } + catch (WixException e) + { + messaging.Write(e.Error); + } + } + + return extensionManager; + } + + private IEnumerable CalculateBindPathStrings() + { + if (null != this.BindInputPaths) + { + foreach (var item in this.BindInputPaths) + { + var path = item.GetMetadata("FullPath"); + + var bindName = item.GetMetadata("BindName"); + if (!String.IsNullOrEmpty(bindName)) + { + yield return String.Concat(bindName, "=", path); + } + else + { + yield return path; + } + } + } + } + } +} -- cgit v1.2.3-55-g6feb