aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2017-12-06 11:39:26 -0800
committerRob Mensching <rob@firegiant.com>2017-12-06 11:40:03 -0800
commit5ba862bfa618c89a563d555e8ce7b44a904df406 (patch)
treecc2655422be3eec1f200efcbc0e562349c229274 /src/WixToolset.Core
parente53afb01c6e01bb9e6521fa77d31e575abc73f9c (diff)
downloadwix-5ba862bfa618c89a563d555e8ce7b44a904df406.tar.gz
wix-5ba862bfa618c89a563d555e8ce7b44a904df406.tar.bz2
wix-5ba862bfa618c89a563d555e8ce7b44a904df406.zip
Add support for loading Intermediates from extensions
Diffstat (limited to 'src/WixToolset.Core')
-rw-r--r--src/WixToolset.Core/Bind/ExtractEmbeddedFiles.cs7
-rw-r--r--src/WixToolset.Core/CommandLine/BuildCommand.cs4
-rw-r--r--src/WixToolset.Core/LinkContext.cs4
-rw-r--r--src/WixToolset.Core/Linker.cs52
4 files changed, 20 insertions, 47 deletions
diff --git a/src/WixToolset.Core/Bind/ExtractEmbeddedFiles.cs b/src/WixToolset.Core/Bind/ExtractEmbeddedFiles.cs
index 28fc4817..c6e21973 100644
--- a/src/WixToolset.Core/Bind/ExtractEmbeddedFiles.cs
+++ b/src/WixToolset.Core/Bind/ExtractEmbeddedFiles.cs
@@ -28,19 +28,16 @@ namespace WixToolset.Core.Bind
28 /// <returns>The extract path for the embedded file.</returns> 28 /// <returns>The extract path for the embedded file.</returns>
29 public string AddEmbeddedFileIndex(Uri uri, int embeddedFileIndex, string tempPath) 29 public string AddEmbeddedFileIndex(Uri uri, int embeddedFileIndex, string tempPath)
30 { 30 {
31 string extractPath;
32 SortedList<int, string> extracts;
33
34 // If the uri to the file that contains the embedded file does not already have embedded files 31 // If the uri to the file that contains the embedded file does not already have embedded files
35 // being extracted, create the dictionary to track that. 32 // being extracted, create the dictionary to track that.
36 if (!filesWithEmbeddedFiles.TryGetValue(uri, out extracts)) 33 if (!filesWithEmbeddedFiles.TryGetValue(uri, out var extracts))
37 { 34 {
38 extracts = new SortedList<int, string>(); 35 extracts = new SortedList<int, string>();
39 filesWithEmbeddedFiles.Add(uri, extracts); 36 filesWithEmbeddedFiles.Add(uri, extracts);
40 } 37 }
41 38
42 // If the embedded file is not already tracked in the dictionary of extracts, add it. 39 // If the embedded file is not already tracked in the dictionary of extracts, add it.
43 if (!extracts.TryGetValue(embeddedFileIndex, out extractPath)) 40 if (!extracts.TryGetValue(embeddedFileIndex, out var extractPath))
44 { 41 {
45 string localFileNameWithoutExtension = Path.GetFileNameWithoutExtension(uri.LocalPath); 42 string localFileNameWithoutExtension = Path.GetFileNameWithoutExtension(uri.LocalPath);
46 string unique = this.HashUri(uri.AbsoluteUri); 43 string unique = this.HashUri(uri.AbsoluteUri);
diff --git a/src/WixToolset.Core/CommandLine/BuildCommand.cs b/src/WixToolset.Core/CommandLine/BuildCommand.cs
index 79bacd22..7a63b869 100644
--- a/src/WixToolset.Core/CommandLine/BuildCommand.cs
+++ b/src/WixToolset.Core/CommandLine/BuildCommand.cs
@@ -168,8 +168,10 @@ namespace WixToolset.Core
168 var context = this.ServiceProvider.GetService<ILinkContext>(); 168 var context = this.ServiceProvider.GetService<ILinkContext>();
169 context.Messaging = Messaging.Instance; 169 context.Messaging = Messaging.Instance;
170 context.Extensions = this.ExtensionManager.Create<ILinkerExtension>(); 170 context.Extensions = this.ExtensionManager.Create<ILinkerExtension>();
171 context.Intermediates = intermediates.Union(libraries).ToList(); 171 context.ExtensionData = this.ExtensionManager.Create<IExtensionData>();
172 context.ExpectedOutputType = this.OutputType; 172 context.ExpectedOutputType = this.OutputType;
173 context.Intermediates = intermediates.Union(libraries).ToList();
174 context.TupleDefinitionCreator = creator;
173 175
174 var linker = new Linker(); 176 var linker = new Linker();
175 var output = linker.Link(context); 177 var output = linker.Link(context);
diff --git a/src/WixToolset.Core/LinkContext.cs b/src/WixToolset.Core/LinkContext.cs
index c3631f72..1384cf98 100644
--- a/src/WixToolset.Core/LinkContext.cs
+++ b/src/WixToolset.Core/LinkContext.cs
@@ -21,8 +21,12 @@ namespace WixToolset.Core
21 21
22 public IEnumerable<ILinkerExtension> Extensions { get; set; } 22 public IEnumerable<ILinkerExtension> Extensions { get; set; }
23 23
24 public IEnumerable<IExtensionData> ExtensionData { get; set; }
25
24 public OutputType ExpectedOutputType { get; set; } 26 public OutputType ExpectedOutputType { get; set; }
25 27
26 public IEnumerable<Intermediate> Intermediates { get; set; } 28 public IEnumerable<Intermediate> Intermediates { get; set; }
29
30 public ITupleDefinitionCreator TupleDefinitionCreator { get; set; }
27 } 31 }
28} 32}
diff --git a/src/WixToolset.Core/Linker.cs b/src/WixToolset.Core/Linker.cs
index 7faf69ba..c893a01d 100644
--- a/src/WixToolset.Core/Linker.cs
+++ b/src/WixToolset.Core/Linker.cs
@@ -56,32 +56,6 @@ namespace WixToolset.Core
56 //internal IBindVariableResolver WixVariableResolver { get; set; } 56 //internal IBindVariableResolver WixVariableResolver { get; set; }
57 57
58 /// <summary> 58 /// <summary>
59 /// Adds an extension.
60 /// </summary>
61 /// <param name="extension">The extension to add.</param>
62 //public void AddExtensionData(IExtensionData extension)
63 //{
64 // if (null != extension.TableDefinitions)
65 // {
66 // foreach (TableDefinition tableDefinition in extension.TableDefinitions)
67 // {
68 // if (!this.tableDefinitions.Contains(tableDefinition.Name))
69 // {
70 // this.tableDefinitions.Add(tableDefinition);
71 // }
72 // else
73 // {
74 // throw new WixException(WixErrors.DuplicateExtensionTable(extension.GetType().ToString(), tableDefinition.Name));
75 // }
76 // }
77 // }
78
79 // // keep track of extension data so the libraries can be loaded from these later once all the table definitions
80 // // are loaded; this will allow extensions to have cross table definition dependencies
81 // this.extensionData.Add(extension);
82 //}
83
84 /// <summary>
85 /// Links a collection of sections into an output. 59 /// Links a collection of sections into an output.
86 /// </summary> 60 /// </summary>
87 /// <param name="inputs">The collection of sections to link together.</param> 61 /// <param name="inputs">The collection of sections to link together.</param>
@@ -91,10 +65,19 @@ namespace WixToolset.Core
91 { 65 {
92 this.Context = context ?? throw new ArgumentNullException(nameof(context)); 66 this.Context = context ?? throw new ArgumentNullException(nameof(context));
93 67
94 //IEnumerable<Section> inputs, OutputType expectedOutputType
95
96 var sections = this.Context.Intermediates.SelectMany(i => i.Sections).ToList(); 68 var sections = this.Context.Intermediates.SelectMany(i => i.Sections).ToList();
97 69
70 // Add sections from the extensions with data.
71 foreach (var data in context.ExtensionData)
72 {
73 var library = data.GetLibrary(context.TupleDefinitionCreator);
74
75 if (library != null)
76 {
77 sections.AddRange(library.Sections);
78 }
79 }
80
98#if MOVE_TO_BACKEND 81#if MOVE_TO_BACKEND
99 bool containsModuleSubstitution = false; 82 bool containsModuleSubstitution = false;
100 bool containsModuleConfiguration = false; 83 bool containsModuleConfiguration = false;
@@ -144,19 +127,6 @@ namespace WixToolset.Core
144 } 127 }
145#endif 128#endif
146 129
147#if TODO
148 // Add sections from the extensions with data.
149 foreach (IExtensionData data in this.extensionData)
150 {
151 Library library = data.GetLibrary(this.tableDefinitions);
152
153 if (null != library)
154 {
155 sections.AddRange(library.Sections);
156 }
157 }
158#endif
159
160 // First find the entry section and while processing all sections load all the symbols from all of the sections. 130 // First find the entry section and while processing all sections load all the symbols from all of the sections.
161 // sections.FindEntrySectionAndLoadSymbols(false, this, expectedOutputType, out entrySection, out allSymbols); 131 // sections.FindEntrySectionAndLoadSymbols(false, this, expectedOutputType, out entrySection, out allSymbols);
162 var find = new FindEntrySectionAndLoadSymbolsCommand(sections); 132 var find = new FindEntrySectionAndLoadSymbolsCommand(sections);