@joebigelow / wix / commits / 4c3640ad

Write EngineVersion, ProtocolVersion, and Win64 to the Burn manifest.

Sean Hall committed Apr 13, 2022 at 10:14 UTC 4c3640ad5ef05b5be44df2aee2a23baa40471422
15 files changed +230 -57
src/api/wix/WixToolset.Data/Symbols/WixBundleBundlePackageSymbol.cs
+8
@@ -12,6 +12,7 @@ namespace WixToolset.Data
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.Attributes), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.BundleId), IntermediateFieldType.String),
15 + new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.EngineVersion), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.Version), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.InstallCommand), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.RepairCommand), IntermediateFieldType.String),
@@ -29,6 +30,7 @@ namespace WixToolset.Data.Symbols
30 {
31 Attributes,
32 BundleId,
33 + EngineVersion,
34 Version,
35 InstallCommand,
36 RepairCommand,
@@ -66,6 +68,12 @@ namespace WixToolset.Data.Symbols
68 set => this.Set((int)WixBundleBundlePackageSymbolFields.BundleId, value);
69 }
70
71 + public string EngineVersion
72 + {
73 + get => (string)this.Fields[(int)WixBundleBundlePackageSymbolFields.EngineVersion];
74 + set => this.Set((int)WixBundleBundlePackageSymbolFields.EngineVersion, value);
75 + }
76 +
77 public string Version
78 {
79 get => (string)this.Fields[(int)WixBundleBundlePackageSymbolFields.Version];
src/api/wix/WixToolset.Data/Symbols/WixBundleHarvestedBundlePackageSymbol.cs
+8
@@ -12,6 +12,7 @@ namespace WixToolset.Data
12 {
13 new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.Attributes), IntermediateFieldType.Number),
14 new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.BundleId), IntermediateFieldType.String),
15 + new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.EngineVersion), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.ManifestNamespace), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.ProtocolVersion), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.Version), IntermediateFieldType.String),
@@ -30,6 +31,7 @@ namespace WixToolset.Data.Symbols
31 {
32 Attributes,
33 BundleId,
34 + EngineVersion,
35 ManifestNamespace,
36 ProtocolVersion,
37 Version,
@@ -69,6 +71,12 @@ namespace WixToolset.Data.Symbols
71 set => this.Set((int)WixBundleHarvestedBundlePackageSymbolFields.BundleId, value);
72 }
73
74 + public string EngineVersion
75 + {
76 + get => this.Fields[(int)WixBundleHarvestedBundlePackageSymbolFields.EngineVersion].AsString();
77 + set => this.Set((int)WixBundleHarvestedBundlePackageSymbolFields.EngineVersion, value);
78 + }
79 +
80 public string ManifestNamespace
81 {
82 get => this.Fields[(int)WixBundleHarvestedBundlePackageSymbolFields.ManifestNamespace].AsString();
src/burn/Directory.Build.props
+4
@@ -7,4 +7,8 @@
7 </PropertyGroup>
8
9 <Import Project="..\Directory.Build.props" />
10 +
11 + <PropertyGroup>
12 + <BurnGeneratedHeaderDirectory>$(BaseIntermediateOutputPath)..\</BurnGeneratedHeaderDirectory>
13 + </PropertyGroup>
14 </Project>
src/burn/engine/engine.vcxproj
+23 -9
@@ -35,13 +35,14 @@
35 <TargetName>engine</TargetName>
36 <CharacterSet>Unicode</CharacterSet>
37 <Description>Native component of WixToolset.Burn</Description>
38 + <CustomBuildBeforeTargets>ClCompile</CustomBuildBeforeTargets>
39 </PropertyGroup>
40
41 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
42 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
43
44 <PropertyGroup>
44 - <ProjectAdditionalIncludeDirectories>..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;$(ProjectAdditionalIncludeDirectories)</ProjectAdditionalIncludeDirectories>
45 + <ProjectAdditionalIncludeDirectories>..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;$(BurnGeneratedHeaderDirectory);$(ProjectAdditionalIncludeDirectories)</ProjectAdditionalIncludeDirectories>
46 </PropertyGroup>
47
48 <ImportGroup Label="ExtensionSettings">
@@ -144,14 +145,15 @@
145 <ClInclude Include="variant.h" />
146 </ItemGroup>
147
147 - <ItemGroup>
148 - <CustomBuild Include="engine.mc">
148 + <ItemDefinitionGroup>
149 + <CustomBuildStep>
150 <Message>Compiling message file...</Message>
151 <Command>mc.exe -h "$(IntDir)." -r "$(IntDir)." -A -c -z engine.messages "$(InputDir)engine.mc"
152 rc.exe -fo "$(OutDir)engine.res" "$(IntDir)engine.messages.rc"</Command>
153 + <Inputs>$(InputDir)engine.mc</Inputs>
154 <Outputs>$(IntDir)engine.messages.h;$(IntDir)engine.messages.rc</Outputs>
153 - </CustomBuild>
154 - </ItemGroup>
155 + </CustomBuildStep>
156 + </ItemDefinitionGroup>
157
158 <Target Name="SetWixVersion" DependsOnTargets="__SetPropertiesFromGit" BeforeTargets="ClCompile">
159 <PropertyGroup>
@@ -160,14 +162,26 @@ rc.exe -fo "$(OutDir)engine.res" "$(IntDir)engine.messages.rc"</Command>
162 <rup>$(GitBaseVersionPatch)</rup>
163 <rpr>$(GitCommits)</rpr>
164 <szVerMajorMinorBuild>$(rmj).$(rmm).$(rup).$(rpr)</szVerMajorMinorBuild>
163 - <wixver>rmj=$(rmj);rmm=$(rmm);rup=$(rup);rpr=$(rpr);szVerMajorMinorBuild="$(szVerMajorMinorBuild)"</wixver>
165 </PropertyGroup>
166
167 <ItemGroup>
167 - <ClCompile>
168 - <PreprocessorDefinitions>$(wixver);%(PreprocessorDefinitions)</PreprocessorDefinitions>
169 - </ClCompile>
168 + <BurnVersionLines Include="
169 +// &lt;auto-generated/&gt;
170 +#ifndef _VERSION_FILE_H_
171 +#define _VERSION_FILE_H_
172 +
173 +#define szVerMajorMinorBuild &quot;$(szVerMajorMinorBuild)&quot;
174 +#define wzVerMajorMinorBuild L&quot;$(szVerMajorMinorBuild)&quot;
175 +#define rmj $(rmj)
176 +#define rmm $(rmm)
177 +#define rup $(rup)
178 +#define rpr $(rpr)
179 +
180 +#endif
181 +"/>
182 </ItemGroup>
183 +
184 + <WriteLinesToFile Overwrite="true" File="$(BurnGeneratedHeaderDirectory)engine.version.h" Lines="@(BurnVersionLines)" />
185 </Target>
186
187 <ItemGroup>
src/burn/engine/manifest.cpp
+50
@@ -7,6 +7,11 @@ static HRESULT ParseFromXml(
7 __in IXMLDOMDocument* pixdDocument,
8 __in BURN_ENGINE_STATE* pEngineState
9 );
10 +#if DEBUG
11 +static void ValidateHarvestingAttributes(
12 + __in IXMLDOMDocument* pixdDocument
13 + );
14 +#endif
15
16 // function definitions
17
@@ -43,6 +48,10 @@ extern "C" HRESULT ManifestLoadXmlFromBuffer(
48 hr = XmlLoadDocumentFromBuffer(pbBuffer, cbBuffer, &pixdDocument);
49 ExitOnFailure(hr, "Failed to load manifest as XML document.");
50
51 +#if DEBUG
52 + ValidateHarvestingAttributes(pixdDocument);
53 +#endif
54 +
55 hr = ParseFromXml(pixdDocument, pEngineState);
56
57 LExit:
@@ -162,3 +171,44 @@ LExit:
171 ReleaseObject(pixeBundle);
172 return hr;
173 }
174 +
175 +#if DEBUG
176 +static void ValidateHarvestingAttributes(
177 + __in IXMLDOMDocument* pixdDocument
178 + )
179 +{
180 + HRESULT hr = S_OK;
181 + IXMLDOMElement* pixeBundle = NULL;
182 + LPWSTR sczEngineVersion = NULL;
183 + DWORD dwProtocolVersion = 0;
184 + BOOL fWin64 = FALSE;
185 +
186 + hr = pixdDocument->get_documentElement(&pixeBundle);
187 + ExitOnFailure(hr, "Failed to get document element.");
188 +
189 + hr = XmlGetAttributeEx(pixeBundle, L"EngineVersion", &sczEngineVersion);
190 + ExitOnRequiredXmlQueryFailure(hr, "Failed to get BurnManifest/@EngineVersion attribute.");
191 +
192 + hr = XmlGetAttributeUInt32(pixeBundle, L"ProtocolVersion", &dwProtocolVersion);
193 + ExitOnRequiredXmlQueryFailure(hr, "Failed to get BurnManifest/@ProtocolVersion attribute.");
194 +
195 + hr = XmlGetYesNoAttribute(pixeBundle, L"Win64", &fWin64);
196 + ExitOnRequiredXmlQueryFailure(hr, "Failed to get BurnManifest/@Win64 attribute.");
197 +
198 + Assert(CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, sczEngineVersion, -1, wzVerMajorMinorBuild, -1));
199 +
200 + Assert(BURN_PROTOCOL_VERSION == dwProtocolVersion);
201 +
202 +#if !defined(_WIN64)
203 + Assert(!fWin64);
204 +#else
205 + Assert(fWin64);
206 +#endif
207 +
208 +LExit:
209 + AssertSz(SUCCEEDED(hr), "Failed to get harvesting attributes.");
210 +
211 + ReleaseStr(sczEngineVersion);
212 + ReleaseObject(pixeBundle);
213 +}
214 +#endif
src/burn/engine/precomp.h
+1
@@ -103,4 +103,5 @@
103 #include "EngineForApplication.h"
104 #include "EngineForExtension.h"
105 #include "engine.messages.h"
106 +#include "engine.version.h"
107 #include "engine.h"
src/burn/test/BurnUnitTest/BurnTestFixture.h
+1 -1
@@ -33,7 +33,7 @@ namespace Bootstrapper
33
34 this->testDirectory = WixBuildTools::TestSupport::TestData::Get();
35
36 - LogInitialize(::GetModuleHandleW(NULL));
36 + LogInitialize(::GetModuleHandleW(L"BurnUnitTest.dll"));
37
38 LogSetLevel(REPORT_DEBUG, FALSE);
39
src/burn/test/BurnUnitTest/BurnUnitTest.vcxproj
+2 -2
@@ -39,8 +39,8 @@
39 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
40
41 <PropertyGroup>
42 - <ProjectAdditionalIncludeDirectories>$(ProjectAdditionalIncludeDirectories);..\..\engine;..\..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;..\..\..\libs\dutil\WixToolset.Dutil\inc</ProjectAdditionalIncludeDirectories>
43 - <ProjectAdditionalLinkLibraries>cabinet.lib;crypt32.lib;msi.lib;rpcrt4.lib;shlwapi.lib;wininet.lib;wintrust.lib;$(RootBuildFolder)libs\$(Configuration)\$(WixNativeSdkLibraryToolset)\$(PlatformTarget)\dutil.lib</ProjectAdditionalLinkLibraries>
42 + <ProjectAdditionalIncludeDirectories>$(ProjectAdditionalIncludeDirectories);$(BurnGeneratedHeaderDirectory);..\..\engine;..\..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;..\..\..\libs\dutil\WixToolset.Dutil\inc</ProjectAdditionalIncludeDirectories>
43 + <ProjectAdditionalLinkLibraries>cabinet.lib;crypt32.lib;msi.lib;rpcrt4.lib;shlwapi.lib;wininet.lib;wintrust.lib;$(RootBuildFolder)libs\$(Configuration)\$(WixNativeSdkLibraryToolset)\$(PlatformTarget)\dutil.lib;engine.res</ProjectAdditionalLinkLibraries>
44 </PropertyGroup>
45
46 <ItemGroup>
src/burn/test/BurnUnitTest/ManifestTest.cpp
+8 -2
@@ -30,7 +30,13 @@ namespace Bootstrapper
30 try
31 {
32 LPCSTR szDocument =
33 - "<Bundle>"
33 + "<BurnManifest EngineVersion='" szVerMajorMinorBuild "' ProtocolVersion='1' Win64='"
34 +#if !defined(_WIN64)
35 + "no"
36 +#else
37 + "yes"
38 +#endif
39 + "'>"
40 " <UX UxDllPayloadId='ux.dll'>"
41 " <Payload Id='ux.dll' FilePath='ux.dll' Packaging='embedded' SourcePath='ux.dll' Hash='000000000000' />"
42 " </UX>"
@@ -38,7 +44,7 @@ namespace Bootstrapper
44 " <Variable Id='Variable1' Type='numeric' Value='1' Hidden='no' Persisted='no' />"
45 " <RegistrySearch Id='Search1' Type='exists' Root='HKLM' Key='SOFTWARE\\Microsoft' Variable='Variable1' Condition='0' />"
46 " <CommandLine Variables='upperCase' />"
41 - "</Bundle>";
47 + "</BurnManifest>";
48
49 hr = CacheInitialize(&engineState.cache, &engineState.internalCommand);
50 TestThrowOnFailure(hr, L"Failed initialize cache.");
src/burn/test/BurnUnitTest/precomp.h
+2
@@ -71,6 +71,8 @@
71 #include "splashscreen.h"
72 #include "detect.h"
73
74 +#include "engine.version.h"
75 +
76 #pragma managed
77 #include <vcclr.h>
78
src/wix/WixToolset.Core.Burn/Bundles/BurnCommon.cs
+2
@@ -111,8 +111,10 @@ namespace WixToolset.Core.Burn.Bundles
111 protected const uint BURN_SECTION_OFFSET_ATTACHEDCONTAINERSIZE0 = 52;
112 protected const uint BURN_SECTION_MIN_SIZE = BURN_SECTION_OFFSET_ATTACHEDCONTAINERSIZE0;
113
114 + // Keep in sync with burn\engine\inc\engine.h
115 protected const uint BURN_SECTION_MAGIC = 0x00f14300;
116 protected const uint BURN_SECTION_VERSION = 0x00000002;
117 + public const uint BURN_PROTOCOL_VERSION = 0x00000001;
118
119 protected string fileExe;
120 protected uint peOffset = UInt32.MaxValue;
src/wix/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs
+5
@@ -70,6 +70,11 @@ namespace WixToolset.Core.Burn.Bundles
70
71 writer.WriteStartElement("BurnManifest", BurnCommon.BurnNamespace);
72
73 + // Write attributes to support harvesting bundles.
74 + writer.WriteAttributeString("EngineVersion", $"{ThisAssembly.Git.BaseVersion.Major}.{ThisAssembly.Git.BaseVersion.Minor}.{ThisAssembly.Git.BaseVersion.Patch}.{ThisAssembly.Git.Commits}");
75 + writer.WriteAttributeString("ProtocolVersion", BurnCommon.BURN_PROTOCOL_VERSION.ToString());
76 + writer.WriteAttributeString("Win64", this.BundleSymbol.Platform == Platform.X86 ? "no" : "yes");
77 +
78 // Write the condition, if there is one
79 if (null != this.BundleSymbol.Condition)
80 {
src/wix/WixToolset.Core.Burn/Bundles/ProcessBundlePackageCommand.cs
+70 -43
@@ -72,7 +72,8 @@ namespace WixToolset.Core.Burn.Bundles
72
73 this.ChainPackage.Win64 = harvestedBundlePackage.Win64;
74 this.BundlePackage.BundleId = Guid.Parse(harvestedBundlePackage.BundleId).ToString("B").ToUpperInvariant();
75 - this.BundlePackage.SupportsBurnProtocol = harvestedBundlePackage.ProtocolVersion == 1; // Keep in sync with burn\engine\inc\engine.h
75 + this.BundlePackage.EngineVersion = harvestedBundlePackage.EngineVersion;
76 + this.BundlePackage.SupportsBurnProtocol = harvestedBundlePackage.ProtocolVersion == BurnCommon.BURN_PROTOCOL_VERSION;
77
78 var supportsArpSystemComponent = BurnCommon.BurnV3Namespace != harvestedBundlePackage.ManifestNamespace;
79 if (!supportsArpSystemComponent && !this.ChainPackage.Visible)
@@ -104,6 +105,7 @@ namespace WixToolset.Core.Burn.Bundles
105 {
106 bool win64;
107 string bundleId;
108 + string engineVersion;
109 int protocolVersion;
110 string manifestNamespace;
111 bool perMachine;
@@ -133,50 +135,8 @@ namespace WixToolset.Core.Burn.Bundles
135 this.TrackedFiles.Add(this.BackendHelper.TrackFile(filePath, TrackedFileType.Temporary, sourceLineNumbers));
136 }
137
136 - switch (burnReader.MachineType)
137 - {
138 - case BurnCommon.IMAGE_FILE_MACHINE_AM33:
139 - case BurnCommon.IMAGE_FILE_MACHINE_ARM:
140 - case BurnCommon.IMAGE_FILE_MACHINE_ARMNT:
141 - case BurnCommon.IMAGE_FILE_MACHINE_I386:
142 - case BurnCommon.IMAGE_FILE_MACHINE_LOONGARCH32:
143 - case BurnCommon.IMAGE_FILE_MACHINE_M32R:
144 - win64 = false;
145 - break;
146 - case BurnCommon.IMAGE_FILE_MACHINE_AMD64:
147 - case BurnCommon.IMAGE_FILE_MACHINE_ARM64:
148 - case BurnCommon.IMAGE_FILE_MACHINE_IA64:
149 - case BurnCommon.IMAGE_FILE_MACHINE_LOONGARCH64:
150 - win64 = true;
151 - break;
152 - case BurnCommon.IMAGE_FILE_MACHINE_EBC:
153 - case BurnCommon.IMAGE_FILE_MACHINE_MIPS16:
154 - case BurnCommon.IMAGE_FILE_MACHINE_MIPSFPU:
155 - case BurnCommon.IMAGE_FILE_MACHINE_MIPSFPU16:
156 - case BurnCommon.IMAGE_FILE_MACHINE_POWERPC:
157 - case BurnCommon.IMAGE_FILE_MACHINE_POWERPCFP:
158 - case BurnCommon.IMAGE_FILE_MACHINE_R4000:
159 - case BurnCommon.IMAGE_FILE_MACHINE_RISCV32:
160 - case BurnCommon.IMAGE_FILE_MACHINE_RISCV64:
161 - case BurnCommon.IMAGE_FILE_MACHINE_RISCV128:
162 - case BurnCommon.IMAGE_FILE_MACHINE_SH3:
163 - case BurnCommon.IMAGE_FILE_MACHINE_SH3DSP:
164 - case BurnCommon.IMAGE_FILE_MACHINE_SH4:
165 - case BurnCommon.IMAGE_FILE_MACHINE_SH5:
166 - case BurnCommon.IMAGE_FILE_MACHINE_THUMB:
167 - case BurnCommon.IMAGE_FILE_MACHINE_WCEMIPSV2:
168 - default:
169 - win64 = false;
170 - this.Messaging.Write(BurnBackendWarnings.UnknownCoffMachineType(sourceLineNumbers, sourcePath, burnReader.MachineType));
171 - break;
172 - }
173 -
138 bundleId = burnReader.BundleId.ToString("B").ToUpperInvariant();
139
176 - // Assume that the .wixburn section version will change when the Burn protocol changes.
177 - // This should be a safe assumption since we will need to add the protocol version to the section to support this harvesting.
178 - protocolVersion = burnReader.Version == 2 ? 1 : 0;
179 -
140 try
141 {
142 var document = new XmlDocument();
@@ -189,6 +149,10 @@ namespace WixToolset.Core.Burn.Bundles
149 return null;
150 }
151
152 + engineVersion = document.DocumentElement.GetAttribute("EngineVersion");
153 + protocolVersion = this.ProcessProtocolVersion(burnReader, document);
154 + win64 = this.ProcessWin64(burnReader, document, sourceLineNumbers, sourcePath);
155 +
156 manifestNamespace = document.DocumentElement.NamespaceURI;
157
158 namespaceManager.AddNamespace("burn", document.DocumentElement.NamespaceURI);
@@ -227,6 +191,7 @@ namespace WixToolset.Core.Burn.Bundles
191 {
192 Win64 = win64,
193 BundleId = bundleId,
194 + EngineVersion = engineVersion,
195 ManifestNamespace = manifestNamespace,
196 ProtocolVersion = protocolVersion,
197 PerMachine = perMachine,
@@ -236,6 +201,68 @@ namespace WixToolset.Core.Burn.Bundles
201 });
202 }
203
204 + private int ProcessProtocolVersion(BurnReader burnReader, XmlDocument document)
205 + {
206 + var protocolVersionValue = document.DocumentElement.GetAttribute("ProtocolVersion");
207 +
208 + if (Int32.TryParse(protocolVersionValue, out var protocolVersion))
209 + {
210 + return protocolVersion;
211 + }
212 +
213 + // Assume that the .wixburn section version will change when the Burn protocol changes.
214 + // This should be a safe assumption since only old bundles should be missing the ProtocolVersion from the manifest.
215 + return burnReader.Version == 2 ? 1 : 0;
216 + }
217 +
218 + private bool ProcessWin64(BurnReader burnReader, XmlDocument document, SourceLineNumber sourceLineNumbers, string sourcePath)
219 + {
220 + var win64Value = document.DocumentElement.GetAttribute("Win64");
221 +
222 + switch (win64Value)
223 + {
224 + case "yes":
225 + return true;
226 + case "no":
227 + return false;
228 + }
229 +
230 + switch (burnReader.MachineType)
231 + {
232 + case BurnCommon.IMAGE_FILE_MACHINE_ARM:
233 + case BurnCommon.IMAGE_FILE_MACHINE_ARMNT:
234 + case BurnCommon.IMAGE_FILE_MACHINE_I386:
235 + case BurnCommon.IMAGE_FILE_MACHINE_LOONGARCH32:
236 + return false;
237 + case BurnCommon.IMAGE_FILE_MACHINE_AMD64:
238 + case BurnCommon.IMAGE_FILE_MACHINE_ARM64:
239 + case BurnCommon.IMAGE_FILE_MACHINE_IA64:
240 + case BurnCommon.IMAGE_FILE_MACHINE_LOONGARCH64:
241 + return true;
242 + case BurnCommon.IMAGE_FILE_MACHINE_AM33:
243 + case BurnCommon.IMAGE_FILE_MACHINE_EBC:
244 + case BurnCommon.IMAGE_FILE_MACHINE_M32R:
245 + case BurnCommon.IMAGE_FILE_MACHINE_MIPS16:
246 + case BurnCommon.IMAGE_FILE_MACHINE_MIPSFPU:
247 + case BurnCommon.IMAGE_FILE_MACHINE_MIPSFPU16:
248 + case BurnCommon.IMAGE_FILE_MACHINE_POWERPC:
249 + case BurnCommon.IMAGE_FILE_MACHINE_POWERPCFP:
250 + case BurnCommon.IMAGE_FILE_MACHINE_R4000:
251 + case BurnCommon.IMAGE_FILE_MACHINE_RISCV32:
252 + case BurnCommon.IMAGE_FILE_MACHINE_RISCV64:
253 + case BurnCommon.IMAGE_FILE_MACHINE_RISCV128:
254 + case BurnCommon.IMAGE_FILE_MACHINE_SH3:
255 + case BurnCommon.IMAGE_FILE_MACHINE_SH3DSP:
256 + case BurnCommon.IMAGE_FILE_MACHINE_SH4:
257 + case BurnCommon.IMAGE_FILE_MACHINE_SH5:
258 + case BurnCommon.IMAGE_FILE_MACHINE_THUMB:
259 + case BurnCommon.IMAGE_FILE_MACHINE_WCEMIPSV2:
260 + default:
261 + this.Messaging.Write(BurnBackendWarnings.UnknownCoffMachineType(sourceLineNumbers, sourcePath, burnReader.MachineType));
262 + return false;
263 + }
264 + }
265 +
266 private long ProcessPackages(XmlDocument document, XmlNamespaceManager namespaceManager)
267 {
268 long packageInstallSize = 0;
src/wix/WixToolset.Core.Burn/WixToolset.Core.Burn.csproj
+2
@@ -10,6 +10,8 @@
10 <DebugType>embedded</DebugType>
11 <PublishRepositoryUrl>true</PublishRepositoryUrl>
12 <CreateDocumentationFile>true</CreateDocumentationFile>
13 +
14 + <GitThisAssembly>true</GitThisAssembly>
15 </PropertyGroup>
16
17 <ItemGroup>
src/wix/test/WixToolsetTest.CoreIntegration/BundleFixture.cs
+44
@@ -109,6 +109,28 @@ namespace WixToolsetTest.CoreIntegration
109 var extractedBextManifestData = File.ReadAllText(Path.Combine(baFolderPath, "BundleExtensionData.xml"), Encoding.UTF8);
110 Assert.Equal(extractedBextManifestData, bextManifestData);
111
112 + foreach (XmlAttribute attribute in extractResult.ManifestDocument.DocumentElement.Attributes)
113 + {
114 + switch (attribute.LocalName)
115 + {
116 + case "EngineVersion":
117 + Assert.Equal($"{ThisAssembly.Git.BaseVersion.Major}.{ThisAssembly.Git.BaseVersion.Minor}.{ThisAssembly.Git.BaseVersion.Patch}.{ThisAssembly.Git.Commits}", attribute.Value);
118 + break;
119 + case "ProtocolVersion":
120 + Assert.Equal("1", attribute.Value);
121 + break;
122 + case "Win64":
123 + Assert.Equal("no", attribute.Value);
124 + break;
125 + case "xmlns":
126 + Assert.Equal("http://wixtoolset.org/schemas/v4/2008/Burn", attribute.Value);
127 + break;
128 + default:
129 + Assert.False(true, $"Attribute: '{attribute.LocalName}', Value: '{attribute.Value}'");
130 + break;
131 + }
132 + }
133 +
134 var commandLineElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:CommandLine");
135 var commandLineElement = (XmlNode)Assert.Single(commandLineElements);
136 Assert.Equal("<CommandLine Variables='upperCase' />", commandLineElement.GetTestXml());
@@ -190,6 +212,28 @@ namespace WixToolsetTest.CoreIntegration
212
213 var extractResult = BundleExtractor.ExtractAllContainers(null, exePath, baFolderPath, attachedFolderPath, extractFolderPath);
214 extractResult.AssertSuccess();
215 +
216 + foreach (XmlAttribute attribute in extractResult.ManifestDocument.DocumentElement.Attributes)
217 + {
218 + switch (attribute.LocalName)
219 + {
220 + case "EngineVersion":
221 + Assert.Equal($"{ThisAssembly.Git.BaseVersion.Major}.{ThisAssembly.Git.BaseVersion.Minor}.{ThisAssembly.Git.BaseVersion.Patch}.{ThisAssembly.Git.Commits}", attribute.Value);
222 + break;
223 + case "ProtocolVersion":
224 + Assert.Equal("1", attribute.Value);
225 + break;
226 + case "Win64":
227 + Assert.Equal("yes", attribute.Value);
228 + break;
229 + case "xmlns":
230 + Assert.Equal("http://wixtoolset.org/schemas/v4/2008/Burn", attribute.Value);
231 + break;
232 + default:
233 + Assert.False(true, $"Attribute: '{attribute.LocalName}', Value: '{attribute.Value}'");
234 + break;
235 + }
236 + }
237 }
238 }
239