From 40df304afe43fcd546b5b817bcad63168ee31813 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Fri, 12 Jul 2024 11:24:37 -0700 Subject: Introducing wix-cli.msi Fixes 8623 --- src/setup/MetadataTask/GenerateMetadata.cs | 72 +++++++++++++++++++++++++++--- 1 file changed, 67 insertions(+), 5 deletions(-) (limited to 'src/setup/MetadataTask') 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 var section = intermediate.Sections.Single(); - if (section.Type != SectionType.Bundle) + Metadata metadata; + SourceLineNumber sourceLineNumber; + + if (section.Type == SectionType.Bundle) + { + (metadata, sourceLineNumber) = this.GetBundleMetadata(section, "WixToolset.AdditionalTools"); + } + else if (section.Type == SectionType.Package) + { + (metadata, sourceLineNumber) = this.GetPackageMetadata(section, "WixToolset.CommandLineTools"); + } + else { return false; } - (var metadata, var sourceLineNumber) = this.GetBundleMetadata(section); - if (metadata != null) { this.PopulateFileInfo(metadata); @@ -53,13 +62,13 @@ namespace WixToolset.Tasks return true; } - private (Metadata, SourceLineNumber) GetBundleMetadata(IntermediateSection section) + private (Metadata, SourceLineNumber) GetBundleMetadata(IntermediateSection section, string defaultId) { var bundleSymbol = section.Symbols.OfType().Single(); var metadata = new Metadata { - Id = "WixToolset.AdditionalTools", + Id = bundleSymbol.Id?.Id ?? defaultId, Type = MetadataType.Burn, Name = bundleSymbol.Name, Version = bundleSymbol.Version, @@ -76,6 +85,31 @@ namespace WixToolset.Tasks return (metadata, bundleSymbol.SourceLineNumbers); } + private (Metadata, SourceLineNumber) GetPackageMetadata(IntermediateSection section, string defaultId) + { + var packageSymbol = section.Symbols.OfType().Single(); + var propertySymbols = section.Symbols.OfType().ToDictionary(p => p.Id.Id); + var platform = GetPlatformFromSummaryInformation(section.Symbols.OfType()); + + var metadata = new Metadata + { + Id = packageSymbol.Id?.Id ?? defaultId, + Type = MetadataType.Msi, + Name = packageSymbol.Name, + Version = packageSymbol.Version, + Publisher = packageSymbol.Manufacturer, + Description = "Installation for " + packageSymbol.Name, + License = "MS-RL", + SupportUrl = propertySymbols["ARPHELPLINK"].Value, + ProductCode = propertySymbols["ProductCode"].Value, + UpgradeCode = propertySymbols["UpgradeCode"].Value, + AboutUrl = propertySymbols["ARPURLINFOABOUT"].Value, + Architecture = PlatformToArchitecture(platform), + }; + + return (metadata, packageSymbol.SourceLineNumbers); + } + private void PopulateFileInfo(Metadata metadata) { var fi = new FileInfo(this.TargetFile); @@ -101,6 +135,34 @@ namespace WixToolset.Tasks File.WriteAllText(metadataFilePath, json); } + private static Platform GetPlatformFromSummaryInformation(IEnumerable symbols) + { + foreach (var symbol in symbols) + { + if (symbol.PropertyId == SummaryInformationType.PlatformAndLanguage) + { + var value = symbol.Value; + var separatorIndex = value.IndexOf(';'); + var platformValue = separatorIndex > 0 ? value.Substring(0, separatorIndex) : value; + + switch (platformValue) + { + case "x64": + return Platform.X64; + + case "Arm64": + return Platform.ARM64; + + case "Intel": + default: + return Platform.X86; + } + } + } + + return Platform.X86; + } + private static ArchitectureType PlatformToArchitecture(Platform platform) { switch (platform) -- cgit v1.2.3-55-g6feb