aboutsummaryrefslogtreecommitdiff
path: root/src/setup/MetadataTask/GenerateMetadata.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/setup/MetadataTask/GenerateMetadata.cs72
1 files changed, 67 insertions, 5 deletions
diff --git a/src/setup/MetadataTask/GenerateMetadata.cs b/src/setup/MetadataTask/GenerateMetadata.cs
index 65e6f7a4..645b7750 100644
--- a/src/setup/MetadataTask/GenerateMetadata.cs
+++ b/src/setup/MetadataTask/GenerateMetadata.cs
@@ -36,13 +36,22 @@ namespace WixToolset.Tasks
36 36
37 var section = intermediate.Sections.Single(); 37 var section = intermediate.Sections.Single();
38 38
39 if (section.Type != SectionType.Bundle) 39 Metadata metadata;
40 SourceLineNumber sourceLineNumber;
41
42 if (section.Type == SectionType.Bundle)
43 {
44 (metadata, sourceLineNumber) = this.GetBundleMetadata(section, "WixToolset.AdditionalTools");
45 }
46 else if (section.Type == SectionType.Package)
47 {
48 (metadata, sourceLineNumber) = this.GetPackageMetadata(section, "WixToolset.CommandLineTools");
49 }
50 else
40 { 51 {
41 return false; 52 return false;
42 } 53 }
43 54
44 (var metadata, var sourceLineNumber) = this.GetBundleMetadata(section);
45
46 if (metadata != null) 55 if (metadata != null)
47 { 56 {
48 this.PopulateFileInfo(metadata); 57 this.PopulateFileInfo(metadata);
@@ -53,13 +62,13 @@ namespace WixToolset.Tasks
53 return true; 62 return true;
54 } 63 }
55 64
56 private (Metadata, SourceLineNumber) GetBundleMetadata(IntermediateSection section) 65 private (Metadata, SourceLineNumber) GetBundleMetadata(IntermediateSection section, string defaultId)
57 { 66 {
58 var bundleSymbol = section.Symbols.OfType<WixBundleSymbol>().Single(); 67 var bundleSymbol = section.Symbols.OfType<WixBundleSymbol>().Single();
59 68
60 var metadata = new Metadata 69 var metadata = new Metadata
61 { 70 {
62 Id = "WixToolset.AdditionalTools", 71 Id = bundleSymbol.Id?.Id ?? defaultId,
63 Type = MetadataType.Burn, 72 Type = MetadataType.Burn,
64 Name = bundleSymbol.Name, 73 Name = bundleSymbol.Name,
65 Version = bundleSymbol.Version, 74 Version = bundleSymbol.Version,
@@ -76,6 +85,31 @@ namespace WixToolset.Tasks
76 return (metadata, bundleSymbol.SourceLineNumbers); 85 return (metadata, bundleSymbol.SourceLineNumbers);
77 } 86 }
78 87
88 private (Metadata, SourceLineNumber) GetPackageMetadata(IntermediateSection section, string defaultId)
89 {
90 var packageSymbol = section.Symbols.OfType<WixPackageSymbol>().Single();
91 var propertySymbols = section.Symbols.OfType<PropertySymbol>().ToDictionary(p => p.Id.Id);
92 var platform = GetPlatformFromSummaryInformation(section.Symbols.OfType<SummaryInformationSymbol>());
93
94 var metadata = new Metadata
95 {
96 Id = packageSymbol.Id?.Id ?? defaultId,
97 Type = MetadataType.Msi,
98 Name = packageSymbol.Name,
99 Version = packageSymbol.Version,
100 Publisher = packageSymbol.Manufacturer,
101 Description = "Installation for " + packageSymbol.Name,
102 License = "MS-RL",
103 SupportUrl = propertySymbols["ARPHELPLINK"].Value,
104 ProductCode = propertySymbols["ProductCode"].Value,
105 UpgradeCode = propertySymbols["UpgradeCode"].Value,
106 AboutUrl = propertySymbols["ARPURLINFOABOUT"].Value,
107 Architecture = PlatformToArchitecture(platform),
108 };
109
110 return (metadata, packageSymbol.SourceLineNumbers);
111 }
112
79 private void PopulateFileInfo(Metadata metadata) 113 private void PopulateFileInfo(Metadata metadata)
80 { 114 {
81 var fi = new FileInfo(this.TargetFile); 115 var fi = new FileInfo(this.TargetFile);
@@ -101,6 +135,34 @@ namespace WixToolset.Tasks
101 File.WriteAllText(metadataFilePath, json); 135 File.WriteAllText(metadataFilePath, json);
102 } 136 }
103 137
138 private static Platform GetPlatformFromSummaryInformation(IEnumerable<SummaryInformationSymbol> symbols)
139 {
140 foreach (var symbol in symbols)
141 {
142 if (symbol.PropertyId == SummaryInformationType.PlatformAndLanguage)
143 {
144 var value = symbol.Value;
145 var separatorIndex = value.IndexOf(';');
146 var platformValue = separatorIndex > 0 ? value.Substring(0, separatorIndex) : value;
147
148 switch (platformValue)
149 {
150 case "x64":
151 return Platform.X64;
152
153 case "Arm64":
154 return Platform.ARM64;
155
156 case "Intel":
157 default:
158 return Platform.X86;
159 }
160 }
161 }
162
163 return Platform.X86;
164 }
165
104 private static ArchitectureType PlatformToArchitecture(Platform platform) 166 private static ArchitectureType PlatformToArchitecture(Platform platform)
105 { 167 {
106 switch (platform) 168 switch (platform)