Tracer bullet: an empty installer package, end to end #2
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Blocks
#14 Codepages
jeff/zixl
Reference
jeff/zixl#2
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?
Parent
Part of #1
What to build
The thinnest path through every stage.
zixl -o out.msi product.wxsturns a WiX source holding onlyWix,Product,Package,FeatureandProperty— every GUID written out explicitly, built for x64 in codepage 1252 — into an installer package that Windows Installer opens and installs, though it installs nothing.This brings into being the parts every later ticket widens: the
zixlmodule's compiling, linking and writing stages (preprocessing is a pass-through until the preprocessor tickets); the installer database as a format-level model of tables, rows and summary information; the string pool, the table streams and the summary information stream; the compound-file writer per [MS-CFB] version 3; the file source the library reads through; diagnostics carrying file, line and column; and the command line with-o,-vand--version, refusing the reference implementation's options zixl does not implement (--ext,--extdir,--wxidir) and any WiX element it does not support.It also brings the end-to-end test harness, as NixOS VM tests run by
nix flake checkonnixos-do-m, which every later ticket adds fixtures to.Acceptance criteria
zig build test) builds the installer database for the fixture from an in-memory file source and asserts its tables, rows and summary information.zixl --ext ui,--extdirand--wxidireach stop with an error saying the option is not supported.msidumpof each, with generated columns masked, gives identical tables.msiinfoopens zixl's output and reports the summary information the WiX source set.wine msiexec /iinstalls zixl's output and/xremoves it, both exiting 0.nixos-do-mwith the niks3 push.Done in
6b37bf4; CI run 2 is green:test,e2eanddocs.How each acceptance criterion is met:
tests/database.zigbuilds installer databases from in-memory WiX sources and checks the Property, Feature and sequence tables and the summary information. It also covers the diagnostics for unsupported elements and attributes, missing required attributes, duplicate IDs, invalid values, the wrong namespace and malformed XML.--ext,--extdir,--wxidir,-D,-Iand-Eare each refused by name (tests/e2e/cli.sh).tests/e2e/compare.shruns zixl and wixl on each fixture (tracer.wxs, andfeatures.wxswith nested features, every feature attribute and a per-user package). It sorts themsidumpoutput of both and diffs it with summary information 9, 12, 13 and 18 masked. Every table matches.msiexec /iand/xboth succeed. The product's Uninstall key is checked to appear after install and to be gone after uninstall.e2ejob onnixos-do-mrunsnix flake checkand pushes to niks3.Deviations from the ticket:
nix flake check, not NixOS VM tests, because Wine runs headless in the build sandbox. They need no KVM.docs/msi-layout.mddescribes it from rust-msi (MIT).Package/@Idand writes a random package code. zixl uses the one written, and the comparison masks it.Display=2rather than numbering them.Compressed="no".Product/@Codepagefor the database; that question is noted on #14.-o, the package is written beside its WiX source, as wixl does. This settles user story 8 on #1.