aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core/CommandLine/BuildCommand.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/WixToolset.Core/CommandLine/BuildCommand.cs')
-rw-r--r--src/WixToolset.Core/CommandLine/BuildCommand.cs45
1 files changed, 27 insertions, 18 deletions
diff --git a/src/WixToolset.Core/CommandLine/BuildCommand.cs b/src/WixToolset.Core/CommandLine/BuildCommand.cs
index 8392131f..8602c514 100644
--- a/src/WixToolset.Core/CommandLine/BuildCommand.cs
+++ b/src/WixToolset.Core/CommandLine/BuildCommand.cs
@@ -6,6 +6,8 @@ namespace WixToolset.Core.CommandLine
6 using System.Collections.Generic; 6 using System.Collections.Generic;
7 using System.IO; 7 using System.IO;
8 using System.Linq; 8 using System.Linq;
9 using System.Threading;
10 using System.Threading.Tasks;
9 using System.Xml.Linq; 11 using System.Xml.Linq;
10 using WixToolset.Data; 12 using WixToolset.Data;
11 using WixToolset.Extensibility; 13 using WixToolset.Extensibility;
@@ -54,12 +56,12 @@ namespace WixToolset.Core.CommandLine
54 56
55 private string BuiltOutputsFile { get; set; } 57 private string BuiltOutputsFile { get; set; }
56 58
57 public int Execute() 59 public Task<int> ExecuteAsync(CancellationToken cancellationToken)
58 { 60 {
59 if (this.commandLine.ShowHelp) 61 if (this.commandLine.ShowHelp)
60 { 62 {
61 Console.WriteLine("TODO: Show build command help"); 63 Console.WriteLine("TODO: Show build command help");
62 return -1; 64 return Task.FromResult(-1);
63 } 65 }
64 66
65 this.IntermediateFolder = this.commandLine.CalculateIntermedateFolder(); 67 this.IntermediateFolder = this.commandLine.CalculateIntermedateFolder();
@@ -107,23 +109,23 @@ namespace WixToolset.Core.CommandLine
107 109
108 if (this.Messaging.EncounteredError) 110 if (this.Messaging.EncounteredError)
109 { 111 {
110 return this.Messaging.LastErrorNumber; 112 return Task.FromResult(this.Messaging.LastErrorNumber);
111 } 113 }
112 114
113 var wixobjs = this.CompilePhase(preprocessorVariables, codeFiles); 115 var wixobjs = this.CompilePhase(preprocessorVariables, codeFiles, cancellationToken);
114 116
115 var wxls = this.LoadLocalizationFiles(this.commandLine.LocalizationFilePaths, preprocessorVariables); 117 var wxls = this.LoadLocalizationFiles(this.commandLine.LocalizationFilePaths, preprocessorVariables, cancellationToken);
116 118
117 if (this.Messaging.EncounteredError) 119 if (this.Messaging.EncounteredError)
118 { 120 {
119 return this.Messaging.LastErrorNumber; 121 return Task.FromResult(this.Messaging.LastErrorNumber);
120 } 122 }
121 123
122 if (this.OutputType == OutputType.Library) 124 if (this.OutputType == OutputType.Library)
123 { 125 {
124 using (new IntermediateFieldContext("wix.lib")) 126 using (new IntermediateFieldContext("wix.lib"))
125 { 127 {
126 var wixlib = this.LibraryPhase(wixobjs, wxls, this.commandLine.BindFiles, this.commandLine.BindPaths); 128 var wixlib = this.LibraryPhase(wixobjs, wxls, this.commandLine.BindFiles, this.commandLine.BindPaths, cancellationToken);
127 129
128 if (!this.Messaging.EncounteredError) 130 if (!this.Messaging.EncounteredError)
129 { 131 {
@@ -137,7 +139,7 @@ namespace WixToolset.Core.CommandLine
137 { 139 {
138 if (wixipl == null) 140 if (wixipl == null)
139 { 141 {
140 wixipl = this.LinkPhase(wixobjs, this.commandLine.LibraryFilePaths, creator); 142 wixipl = this.LinkPhase(wixobjs, this.commandLine.LibraryFilePaths, creator, cancellationToken);
141 } 143 }
142 144
143 if (!this.Messaging.EncounteredError) 145 if (!this.Messaging.EncounteredError)
@@ -157,14 +159,14 @@ namespace WixToolset.Core.CommandLine
157 { 159 {
158 using (new IntermediateFieldContext("wix.bind")) 160 using (new IntermediateFieldContext("wix.bind"))
159 { 161 {
160 this.BindPhase(wixipl, wxls, filterCultures, this.commandLine.CabCachePath, this.commandLine.BindPaths); 162 this.BindPhase(wixipl, wxls, filterCultures, this.commandLine.CabCachePath, this.commandLine.BindPaths, cancellationToken);
161 } 163 }
162 } 164 }
163 } 165 }
164 } 166 }
165 } 167 }
166 168
167 return this.Messaging.LastErrorNumber; 169 return Task.FromResult(this.Messaging.LastErrorNumber);
168 } 170 }
169 171
170 public bool TryParseArgument(ICommandLineParser parser, string argument) 172 public bool TryParseArgument(ICommandLineParser parser, string argument)
@@ -210,13 +212,13 @@ namespace WixToolset.Core.CommandLine
210 } 212 }
211 } 213 }
212 214
213 private IEnumerable<Intermediate> CompilePhase(IDictionary<string, string> preprocessorVariables, IEnumerable<SourceFile> sourceFiles) 215 private IEnumerable<Intermediate> CompilePhase(IDictionary<string, string> preprocessorVariables, IEnumerable<SourceFile> sourceFiles, CancellationToken cancellationToken)
214 { 216 {
215 var intermediates = new List<Intermediate>(); 217 var intermediates = new List<Intermediate>();
216 218
217 foreach (var sourceFile in sourceFiles) 219 foreach (var sourceFile in sourceFiles)
218 { 220 {
219 var document = this.Preprocess(preprocessorVariables, sourceFile.SourcePath); 221 var document = this.Preprocess(preprocessorVariables, sourceFile.SourcePath, cancellationToken);
220 222
221 if (this.Messaging.EncounteredError) 223 if (this.Messaging.EncounteredError)
222 { 224 {
@@ -228,6 +230,7 @@ namespace WixToolset.Core.CommandLine
228 context.OutputPath = sourceFile.OutputPath; 230 context.OutputPath = sourceFile.OutputPath;
229 context.Platform = this.Platform; 231 context.Platform = this.Platform;
230 context.Source = document; 232 context.Source = document;
233 context.CancellationToken = cancellationToken;
231 234
232 Intermediate intermediate = null; 235 Intermediate intermediate = null;
233 try 236 try
@@ -251,7 +254,7 @@ namespace WixToolset.Core.CommandLine
251 return intermediates; 254 return intermediates;
252 } 255 }
253 256
254 private Intermediate LibraryPhase(IEnumerable<Intermediate> intermediates, IEnumerable<Localization> localizations, bool bindFiles, IEnumerable<IBindPath> bindPaths) 257 private Intermediate LibraryPhase(IEnumerable<Intermediate> intermediates, IEnumerable<Localization> localizations, bool bindFiles, IEnumerable<IBindPath> bindPaths, CancellationToken cancellationToken)
255 { 258 {
256 var context = this.ServiceProvider.GetService<ILibraryContext>(); 259 var context = this.ServiceProvider.GetService<ILibraryContext>();
257 context.BindFiles = bindFiles; 260 context.BindFiles = bindFiles;
@@ -259,6 +262,7 @@ namespace WixToolset.Core.CommandLine
259 context.Extensions = this.ExtensionManager.GetServices<ILibrarianExtension>(); 262 context.Extensions = this.ExtensionManager.GetServices<ILibrarianExtension>();
260 context.Localizations = localizations; 263 context.Localizations = localizations;
261 context.Intermediates = intermediates; 264 context.Intermediates = intermediates;
265 context.CancellationToken = cancellationToken;
262 266
263 Intermediate library = null; 267 Intermediate library = null;
264 try 268 try
@@ -274,7 +278,7 @@ namespace WixToolset.Core.CommandLine
274 return library; 278 return library;
275 } 279 }
276 280
277 private Intermediate LinkPhase(IEnumerable<Intermediate> intermediates, IEnumerable<string> libraryFiles, ITupleDefinitionCreator creator) 281 private Intermediate LinkPhase(IEnumerable<Intermediate> intermediates, IEnumerable<string> libraryFiles, ITupleDefinitionCreator creator, CancellationToken cancellationToken)
278 { 282 {
279 var libraries = this.LoadLibraries(libraryFiles, creator); 283 var libraries = this.LoadLibraries(libraryFiles, creator);
280 284
@@ -289,12 +293,13 @@ namespace WixToolset.Core.CommandLine
289 context.ExpectedOutputType = this.OutputType; 293 context.ExpectedOutputType = this.OutputType;
290 context.Intermediates = intermediates.Concat(libraries).ToList(); 294 context.Intermediates = intermediates.Concat(libraries).ToList();
291 context.TupleDefinitionCreator = creator; 295 context.TupleDefinitionCreator = creator;
296 context.CancellationToken = cancellationToken;
292 297
293 var linker = this.ServiceProvider.GetService<ILinker>(); 298 var linker = this.ServiceProvider.GetService<ILinker>();
294 return linker.Link(context); 299 return linker.Link(context);
295 } 300 }
296 301
297 private void BindPhase(Intermediate output, IEnumerable<Localization> localizations, IEnumerable<string> filterCultures, string cabCachePath, IEnumerable<IBindPath> bindPaths) 302 private void BindPhase(Intermediate output, IEnumerable<Localization> localizations, IEnumerable<string> filterCultures, string cabCachePath, IEnumerable<IBindPath> bindPaths, CancellationToken cancellationToken)
298 { 303 {
299 var intermediateFolder = this.IntermediateFolder; 304 var intermediateFolder = this.IntermediateFolder;
300 if (String.IsNullOrEmpty(intermediateFolder)) 305 if (String.IsNullOrEmpty(intermediateFolder))
@@ -312,6 +317,7 @@ namespace WixToolset.Core.CommandLine
312 context.IntermediateFolder = intermediateFolder; 317 context.IntermediateFolder = intermediateFolder;
313 context.IntermediateRepresentation = output; 318 context.IntermediateRepresentation = output;
314 context.Localizations = localizations; 319 context.Localizations = localizations;
320 context.CancellationToken = cancellationToken;
315 321
316 var resolver = this.ServiceProvider.GetService<IResolver>(); 322 var resolver = this.ServiceProvider.GetService<IResolver>();
317 resolveResult = resolver.Resolve(context); 323 resolveResult = resolver.Resolve(context);
@@ -343,6 +349,7 @@ namespace WixToolset.Core.CommandLine
343 context.PdbPath = this.PdbType == PdbType.None ? null : this.PdbFile ?? Path.ChangeExtension(this.OutputFile, ".wixpdb"); 349 context.PdbPath = this.PdbType == PdbType.None ? null : this.PdbFile ?? Path.ChangeExtension(this.OutputFile, ".wixpdb");
344 context.SuppressIces = Array.Empty<string>(); // TODO: set this correctly 350 context.SuppressIces = Array.Empty<string>(); // TODO: set this correctly
345 context.SuppressValidation = true; // TODO: set this correctly 351 context.SuppressValidation = true; // TODO: set this correctly
352 context.CancellationToken = cancellationToken;
346 353
347 var binder = this.ServiceProvider.GetService<IBinder>(); 354 var binder = this.ServiceProvider.GetService<IBinder>();
348 bindResult = binder.Bind(context); 355 bindResult = binder.Bind(context);
@@ -363,6 +370,7 @@ namespace WixToolset.Core.CommandLine
363 context.OutputsFile = this.OutputsFile; 370 context.OutputsFile = this.OutputsFile;
364 context.BuiltOutputsFile = this.BuiltOutputsFile; 371 context.BuiltOutputsFile = this.BuiltOutputsFile;
365 context.SuppressAclReset = false; // TODO: correctly set SuppressAclReset 372 context.SuppressAclReset = false; // TODO: correctly set SuppressAclReset
373 context.CancellationToken = cancellationToken;
366 374
367 var layout = this.ServiceProvider.GetService<ILayoutCreator>(); 375 var layout = this.ServiceProvider.GetService<ILayoutCreator>();
368 layout.Layout(context); 376 layout.Layout(context);
@@ -392,14 +400,14 @@ namespace WixToolset.Core.CommandLine
392 return Array.Empty<Intermediate>(); 400 return Array.Empty<Intermediate>();
393 } 401 }
394 402
395 private IEnumerable<Localization> LoadLocalizationFiles(IEnumerable<string> locFiles, IDictionary<string, string> preprocessorVariables) 403 private IEnumerable<Localization> LoadLocalizationFiles(IEnumerable<string> locFiles, IDictionary<string, string> preprocessorVariables, CancellationToken cancellationToken)
396 { 404 {
397 var localizations = new List<Localization>(); 405 var localizations = new List<Localization>();
398 var parser = this.ServiceProvider.GetService<ILocalizationParser>(); 406 var parser = this.ServiceProvider.GetService<ILocalizationParser>();
399 407
400 foreach (var loc in locFiles) 408 foreach (var loc in locFiles)
401 { 409 {
402 var document = this.Preprocess(preprocessorVariables, loc); 410 var document = this.Preprocess(preprocessorVariables, loc, cancellationToken);
403 411
404 if (this.Messaging.EncounteredError) 412 if (this.Messaging.EncounteredError)
405 { 413 {
@@ -413,7 +421,7 @@ namespace WixToolset.Core.CommandLine
413 return localizations; 421 return localizations;
414 } 422 }
415 423
416 private XDocument Preprocess(IDictionary<string, string> preprocessorVariables, string sourcePath) 424 private XDocument Preprocess(IDictionary<string, string> preprocessorVariables, string sourcePath, CancellationToken cancellationToken)
417 { 425 {
418 var context = this.ServiceProvider.GetService<IPreprocessContext>(); 426 var context = this.ServiceProvider.GetService<IPreprocessContext>();
419 context.Extensions = this.ExtensionManager.GetServices<IPreprocessorExtension>(); 427 context.Extensions = this.ExtensionManager.GetServices<IPreprocessorExtension>();
@@ -421,6 +429,7 @@ namespace WixToolset.Core.CommandLine
421 context.IncludeSearchPaths = this.IncludeSearchPaths; 429 context.IncludeSearchPaths = this.IncludeSearchPaths;
422 context.SourcePath = sourcePath; 430 context.SourcePath = sourcePath;
423 context.Variables = preprocessorVariables; 431 context.Variables = preprocessorVariables;
432 context.CancellationToken = cancellationToken;
424 433
425 IPreprocessResult result = null; 434 IPreprocessResult result = null;
426 try 435 try