diff options
Diffstat (limited to 'src/WixToolset.Core/CommandLine')
-rw-r--r-- | src/WixToolset.Core/CommandLine/BuildCommand.cs | 122 | ||||
-rw-r--r-- | src/WixToolset.Core/CommandLine/CommandLine.cs | 4 |
2 files changed, 73 insertions, 53 deletions
diff --git a/src/WixToolset.Core/CommandLine/BuildCommand.cs b/src/WixToolset.Core/CommandLine/BuildCommand.cs index 43b75f33..92aa3343 100644 --- a/src/WixToolset.Core/CommandLine/BuildCommand.cs +++ b/src/WixToolset.Core/CommandLine/BuildCommand.cs | |||
@@ -7,7 +7,7 @@ namespace WixToolset.Core | |||
7 | using System.IO; | 7 | using System.IO; |
8 | using System.Linq; | 8 | using System.Linq; |
9 | using WixToolset.Data; | 9 | using WixToolset.Data; |
10 | using WixToolset.Data.Tuples; | 10 | using WixToolset.Data.Bind; |
11 | using WixToolset.Extensibility; | 11 | using WixToolset.Extensibility; |
12 | using WixToolset.Extensibility.Services; | 12 | using WixToolset.Extensibility.Services; |
13 | 13 | ||
@@ -90,6 +90,12 @@ namespace WixToolset.Core | |||
90 | 90 | ||
91 | library?.Save(this.OutputPath); | 91 | library?.Save(this.OutputPath); |
92 | } | 92 | } |
93 | else if (this.OutputType == OutputType.Wixout) | ||
94 | { | ||
95 | var output = this.LinkPhase(intermediates); | ||
96 | |||
97 | output?.Save(this.OutputPath); | ||
98 | } | ||
93 | else | 99 | else |
94 | { | 100 | { |
95 | var output = this.LinkPhase(intermediates); | 101 | var output = this.LinkPhase(intermediates); |
@@ -147,22 +153,20 @@ namespace WixToolset.Core | |||
147 | { | 153 | { |
148 | var localizations = this.LoadLocalizationFiles().ToList(); | 154 | var localizations = this.LoadLocalizationFiles().ToList(); |
149 | 155 | ||
150 | // If there was an error adding localization files, then bail. | 156 | // If there was an error loading localization files, then bail. |
151 | if (this.Messaging.EncounteredError) | 157 | if (this.Messaging.EncounteredError) |
152 | { | 158 | { |
153 | return null; | 159 | return null; |
154 | } | 160 | } |
155 | 161 | ||
156 | var resolver = CreateWixResolverWithVariables(null, null); | ||
157 | |||
158 | var context = new LibraryContext(); | 162 | var context = new LibraryContext(); |
163 | context.Messaging = this.Messaging; | ||
159 | context.BindFiles = this.BindFiles; | 164 | context.BindFiles = this.BindFiles; |
160 | context.BindPaths = this.BindPaths; | 165 | context.BindPaths = this.BindPaths; |
161 | context.Extensions = this.ExtensionManager.Create<ILibrarianExtension>(); | 166 | context.Extensions = this.ExtensionManager.Create<ILibrarianExtension>(); |
162 | context.Localizations = localizations; | 167 | context.Localizations = localizations; |
163 | context.LibraryId = Guid.NewGuid().ToString("N"); | 168 | context.LibraryId = Guid.NewGuid().ToString("N"); |
164 | context.Intermediates = intermediates; | 169 | context.Intermediates = intermediates; |
165 | context.WixVariableResolver = resolver; | ||
166 | 170 | ||
167 | var librarian = new Librarian(); | 171 | var librarian = new Librarian(); |
168 | return librarian.Combine(context); | 172 | return librarian.Combine(context); |
@@ -174,6 +178,11 @@ namespace WixToolset.Core | |||
174 | 178 | ||
175 | var libraries = this.LoadLibraries(creator); | 179 | var libraries = this.LoadLibraries(creator); |
176 | 180 | ||
181 | if (this.Messaging.EncounteredError) | ||
182 | { | ||
183 | return null; | ||
184 | } | ||
185 | |||
177 | var context = this.ServiceProvider.GetService<ILinkContext>(); | 186 | var context = this.ServiceProvider.GetService<ILinkContext>(); |
178 | context.Messaging = this.Messaging; | 187 | context.Messaging = this.Messaging; |
179 | context.Extensions = this.ExtensionManager.Create<ILinkerExtension>(); | 188 | context.Extensions = this.ExtensionManager.Create<ILinkerExtension>(); |
@@ -183,48 +192,72 @@ namespace WixToolset.Core | |||
183 | context.TupleDefinitionCreator = creator; | 192 | context.TupleDefinitionCreator = creator; |
184 | 193 | ||
185 | var linker = new Linker(); | 194 | var linker = new Linker(); |
186 | var output = linker.Link(context); | 195 | return linker.Link(context); |
187 | return output; | ||
188 | } | 196 | } |
189 | 197 | ||
190 | private void BindPhase(Intermediate output) | 198 | private void BindPhase(Intermediate output) |
191 | { | 199 | { |
192 | var localizations = this.LoadLocalizationFiles().ToList(); | 200 | var localizations = this.LoadLocalizationFiles().ToList(); |
193 | 201 | ||
194 | var localizer = new Localizer(this.Messaging, localizations); | 202 | // If there was an error loading localization files, then bail. |
203 | if (this.Messaging.EncounteredError) | ||
204 | { | ||
205 | return; | ||
206 | } | ||
195 | 207 | ||
196 | var resolver = CreateWixResolverWithVariables(localizer, output); | 208 | ResolveResult resolveResult; |
209 | { | ||
210 | var resolver = new Resolver(this.ServiceProvider, this.BindPaths, output, this.IntermediateFolder, localizations); | ||
211 | resolveResult = resolver.Execute(); | ||
212 | } | ||
197 | 213 | ||
198 | var intermediateFolder = this.IntermediateFolder; | 214 | if (this.Messaging.EncounteredError) |
199 | if (String.IsNullOrEmpty(intermediateFolder)) | ||
200 | { | 215 | { |
201 | intermediateFolder = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); | 216 | return; |
202 | } | 217 | } |
203 | 218 | ||
204 | var context = this.ServiceProvider.GetService<IBindContext>(); | 219 | BindResult bindResult; |
205 | context.Messaging = this.Messaging; | 220 | { |
206 | context.ExtensionManager = this.ExtensionManager; | 221 | var intermediateFolder = this.IntermediateFolder; |
207 | context.BindPaths = this.BindPaths ?? Array.Empty<BindPath>(); | 222 | if (String.IsNullOrEmpty(intermediateFolder)) |
208 | //context.CabbingThreadCount = this.CabbingThreadCount; | 223 | { |
209 | context.CabCachePath = this.CabCachePath; | 224 | intermediateFolder = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); |
210 | context.Codepage = localizer.Codepage; | 225 | } |
211 | //context.DefaultCompressionLevel = this.DefaultCompressionLevel; | 226 | |
212 | //context.Ices = this.Ices; | 227 | var context = this.ServiceProvider.GetService<IBindContext>(); |
213 | context.IntermediateFolder = intermediateFolder; | 228 | context.Messaging = this.Messaging; |
214 | context.IntermediateRepresentation = output; | 229 | //context.CabbingThreadCount = this.CabbingThreadCount; |
215 | context.OutputPath = this.OutputPath; | 230 | context.CabCachePath = this.CabCachePath; |
216 | context.OutputPdbPath = Path.ChangeExtension(this.OutputPath, ".wixpdb"); | 231 | context.Codepage = resolveResult.Codepage; |
217 | //context.SuppressIces = this.SuppressIces; | 232 | //context.DefaultCompressionLevel = this.DefaultCompressionLevel; |
218 | context.SuppressValidation = true; | 233 | context.DelayedFields = resolveResult.DelayedFields; |
219 | //context.SuppressValidation = this.SuppressValidation; | 234 | context.ExpectedEmbeddedFiles = resolveResult.ExpectedEmbeddedFiles; |
220 | context.WixVariableResolver = resolver; | 235 | //context.Ices = this.Ices; |
221 | context.ContentsFile = this.ContentsFile; | 236 | context.IntermediateFolder = intermediateFolder; |
222 | context.OutputsFile = this.OutputsFile; | 237 | context.IntermediateRepresentation = resolveResult.IntermediateRepresentation; |
223 | context.BuiltOutputsFile = this.BuiltOutputsFile; | 238 | context.OutputPath = this.OutputPath; |
224 | context.WixprojectFile = this.WixProjectFile; | 239 | context.OutputPdbPath = Path.ChangeExtension(this.OutputPath, ".wixpdb"); |
225 | 240 | //context.SuppressIces = this.SuppressIces; | |
226 | var binder = new Binder(); | 241 | context.SuppressValidation = true; // TODO: set this correctly |
227 | binder.Bind(context); | 242 | context.ContentsFile = this.ContentsFile; |
243 | context.OutputsFile = this.OutputsFile; | ||
244 | context.BuiltOutputsFile = this.BuiltOutputsFile; | ||
245 | context.WixprojectFile = this.WixProjectFile; | ||
246 | |||
247 | var binder = new Binder(); | ||
248 | bindResult = binder.Bind(context); | ||
249 | } | ||
250 | |||
251 | if (this.Messaging.EncounteredError) | ||
252 | { | ||
253 | return; | ||
254 | } | ||
255 | |||
256 | { | ||
257 | // TODO: correctly set SuppressAclReset bool at the end. | ||
258 | var layout = new Layout(this.ServiceProvider, bindResult.FileTransfers, bindResult.ContentFilePaths, this.ContentsFile, this.OutputsFile, this.BuiltOutputsFile, false); | ||
259 | layout.Execute(); | ||
260 | } | ||
228 | } | 261 | } |
229 | 262 | ||
230 | private IEnumerable<Intermediate> LoadLibraries(ITupleDefinitionCreator creator) | 263 | private IEnumerable<Intermediate> LoadLibraries(ITupleDefinitionCreator creator) |
@@ -264,22 +297,5 @@ namespace WixToolset.Core | |||
264 | yield return localization; | 297 | yield return localization; |
265 | } | 298 | } |
266 | } | 299 | } |
267 | |||
268 | private WixVariableResolver CreateWixResolverWithVariables(Localizer localizer, Intermediate output) | ||
269 | { | ||
270 | var resolver = new WixVariableResolver(this.Messaging, localizer); | ||
271 | |||
272 | // Gather all the wix variables. | ||
273 | var wixVariables = output?.Sections.SelectMany(s => s.Tuples).OfType<WixVariableTuple>(); | ||
274 | if (wixVariables != null) | ||
275 | { | ||
276 | foreach (var wixVariableRow in wixVariables) | ||
277 | { | ||
278 | resolver.AddVariable(wixVariableRow); | ||
279 | } | ||
280 | } | ||
281 | |||
282 | return resolver; | ||
283 | } | ||
284 | } | 300 | } |
285 | } | 301 | } |
diff --git a/src/WixToolset.Core/CommandLine/CommandLine.cs b/src/WixToolset.Core/CommandLine/CommandLine.cs index 9db1b2f9..97f79755 100644 --- a/src/WixToolset.Core/CommandLine/CommandLine.cs +++ b/src/WixToolset.Core/CommandLine/CommandLine.cs | |||
@@ -260,6 +260,10 @@ namespace WixToolset.Core | |||
260 | case "transform": | 260 | case "transform": |
261 | case ".mst": | 261 | case ".mst": |
262 | return OutputType.Transform; | 262 | return OutputType.Transform; |
263 | |||
264 | case "wixout": | ||
265 | case ".wixout": | ||
266 | return OutputType.Wixout; | ||
263 | } | 267 | } |
264 | 268 | ||
265 | return OutputType.Unknown; | 269 | return OutputType.Unknown; |