Spec: M4 — zixl builds WiX v4 sources #23
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jeff/zixl#23
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem Statement
zixl reads only WiX v3, the language msitools' wixl reads. Every WiX release since v4 has used a new language: a new namespace,
<Package>in place of<Product>and<Package>, standard directories withoutTARGETDIR,BitnessforWin64, conditions as attributes, and from v5 on, defaults for what a source leaves out. WiX sources written today are in that language, so zixl cannot build them.Solution
The same
zixlcommand, and the same library andbuild.zigstep, build WiX v4 sources: a source's<Wix>namespace says which language it is in. For WiX v4, zixl does what the current WiX documents (ADR-0007). Where the documentation is silent on something that would change the output, zixl refuses it by name with the reason, or infers a default and says so in ADR-0007.User Stories
zixl product.wxsto build it, so that I need no .NET toolchain.<Package>to carry the product's name, version, manufacturer, upgrade code and code page, as WiX v4 has it.StandardDirectory, includingProgramFiles6432Folder, which follows the package's bitness.Subdirectoryon directories, components and component groups, so that I need not write aDirectoryfor every level.Bitnessto make one component 32-bit in a 64-bit package.Component/@Condition,Feature'sLevelchildren andLaunch, which replace v3'sConditionelement.MediaTemplateto lay out cabinets for me.INSTALLFOLDERand nakedFiles, as WiX v5 and later have them.!(bind.Property.NAME)in a value.SummaryInformationto set the package's description, comments, keywords and code page.Implementation Decisions
Subdirectorymakes, and aDirectoryorFilewith noId. A component with noIdtakes its key path's, as WiX v6 does.Package:Compressed="yes",InstallerVersion="500",Scope="perMachine",Codepage="65001"(by number or web name),Language="0"(inferred), and a generatedProductCode;Component/@Guid="*";Feature/@Level="1";MediaTemplate:cab{0}.cab, external, medium compression, 200 MB per cabinet.DefaultFeature, holding every component; an undefinedINSTALLFOLDERbecomes[ProgramFiles6432Folder]Manufacturer Name; a nakedFilegets a component of its own.Package/@Id,Files, access modifiers, the dual-purpose scopes, binder variables other than!(bind.Property.NAME), and!(loc.…). A package expecting the default major upgrade is warned that it has none.sys.BUILDARCHSHORT(X86,X64,A64) andsys.WIXMAJORVERSION(4) for v4 sources.Testing Decisions
tests/database.zigcover each v4 element, attribute, default and refusal through the public interface, as for v3.tests/e2e/fixtureshas a WiX v3 twin intests/e2e/fixtures/twins. zixl must build the two into the same tables, apart from what the fixture's.twin-differencesfile lists, each with the WiX documentation behind it. The twin stands where wixl stands for a v3 fixture, and the rest ofcompare.shapplies unchanged: Wine install and uninstall,.installedand.registrychecks, reproducibility, and the msitools cross-check of the reader.Out of Scope
.wxl) and!(loc.…).Filesharvesting,Package/@Id, the default major upgrade, and the dual-purpose scopes, until their behavior is documented or the file source can list directories.Further Notes
The documentation used is the WiX schema reference, the release notes and the improvement proposals at
docs.firegiant.com, each added to the references as it is used. ADR-0007 records what is inferred.Tickets
Every ticket is done: #24 (
323c9f9), #25 (e34d153), #26 (5479149), #27 (31e85de). Every v4 fixture has a v3 twin and a .twin-differences file, and5d54f16added the last three v4 fixtures (compressed4, media4, upgrade4) to the fuzz corpus.