package: build the Windows installer with wixl again - #578
Merged
Merged
Conversation
WiX refused a plainly relative directory name: meshbench.wxs(135) : error WIX0389: The Directory/@name attribute's value, 'MeshBench', is not a relative path. 'MeshBench' is relative by any reading, so this is WiX's own path handling rather than the authoring, and the line above it in the same log says what is wrong with the machine: "icotool: cannot set locale: No such file or directory". Two unrelated tools, one missing locale. It is a known shape on Linux - wixtoolset/issues#7154, Ubuntu 22.04, closed "not planned" - and the reports cluster in minimal environments, that issue and the Docker SDK images beside it, which is what a runner with no locale is. WiX only claims to support Windows at all, so none of this is a supported configuration. C.UTF-8 rather than a generated en_GB: glibc has carried it built in since 2.35, which is this runner's floor, so nothing has to be installed for it to exist. Why this is only appearing now: v0.0.5's installer was built by wixl, which had no such trouble. WiX arrived with the dialogs, because wixl builds none, and the Windows job has failed before reaching the MSI on every run since - the dotnet install, then the pins. This is the first time WiX has actually run here, so it is the first time this could have been seen. Found by a dispatched build rather than by a fourth failed tag. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9HbD44EKWWTRYgxbFGxf6
WiX cannot build an MSI on Linux. Not "has a bug on Linux": it needs Windows' own msi.dll to write the database, and its first line of output has been saying so all along - "The WiX Toolset only supports Windows. All behavior after this point is undefined." Proven rather than argued, by running the toolset here: - every Directory/@name is refused as "not a relative path", whatever the name. MeshBench, meshbench, Mesh, mb, A, abc - all WIX0389, on a machine with a perfectly good locale, which is what rules out the locale this branch started as a fix for - remove the Name and it compiles, then dies on DllNotFoundException: Unable to load shared library 'msi.dll' - WiX 6.0.2 does the same. WiX 7 refuses to run at all without accepting the Open Source Maintenance Fee EULA, which is not a dependency to take on in passing So the toolset moved for the dialogs and could never have built here. v0.0.5's installer was built by wixl, which is a native Linux implementation and needs none of that; it is still installed by this job, as part of msitools. Restored from v0.0.5: meshbench.wxs, windows-msi.sh and verify-msi.sh, which had grown assertions for the dialogs and would now refuse a correct package. The WiX setup steps are gone with them - they were the source of two of tonight's faults on their own. What this costs is the install-folder dialog, which has never shipped: 0.0.6 is not out, so nothing released regresses, and the installer is what v0.0.5's was plus everything else in this release. The switches still do the whole job and docs/install.md now says so outright rather than describing a dialog that will not appear. The locale stays. It fixed a real complaint from icotool on the same runner - "cannot set locale: No such file or directory" - which was true, just not what WiX was objecting to. Building the installer on a Windows runner is what the dialogs would cost, and that is a change to the shape of the pipeline rather than to any of these files. Left for 0.0.7. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9HbD44EKWWTRYgxbFGxf6
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This branch began as a locale fix. That was wrong, and proving it wrong is what
found the real answer.
WiX cannot build an MSI on Linux
Not "has a bug on Linux". I ran the toolset locally against the .NET runtime,
which turned three CI cycles into three minutes:
Directory/@Nameis refused as "not a relative path", whatever thename -
MeshBench,meshbench,Mesh,mb,A,abc- on a machine witha perfectly good
en_GB.UTF-8locale. That is what rules out the locale.Nameand it compiles, then dies onDllNotFoundException: Unable to load shared library 'msi.dll'- Windows'own installer API, which is how WiX writes the database.
accepting the Open Source Maintenance Fee EULA.
Its own first line of output has been saying this the whole time:
WIX0000: The WiX Toolset only supports Windows. All behavior after this point is undefined.So the toolset moved for the dialogs (wixl builds none, GNOME/msitools#3) and
could never have worked here. v0.0.5's installer was built by wixl, a native
Linux implementation that needs none of it, and which this job still installs
as part of
msitools.What changed
Restored from v0.0.5:
meshbench.wxs,windows-msi.sh, andverify-msi.sh-that last one had grown assertions for the dialogs and would have refused a
correct wixl package. The WiX setup steps go too; they caused two of tonight's
four faults on their own.
The restored file's line 124 is
<Directory Id="INSTALLDIR" Name="MeshBench"/>Two changes beyond the revert, so the tree does not claim something untrue:
docs/install.mddescribed a folder prompt that will not appear. It now saysthe installer asks nothing, and gives the
msiexec INSTALLDIR=andMSIINSTALLPERUSER=1switches - both verified present in the restored.wxsThe locale fix stays.
icotool: cannot set localewas a real fault on thatrunner, just not the one I was chasing.
What it costs, and what it does not
The install-folder dialog, which has never shipped - 0.0.6 is not out, so
nothing released regresses. 0.0.6's installer is v0.0.5's plus everything else
in the release. Building it on a Windows runner is what the dialogs would cost,
and that is a change to the shape of the pipeline; left for 0.0.7.
Verified
Dispatched build 33850054475,
release: false, no Mac. Windows passed for the first time in thispipeline:
Both MSIs, both zips. Linux green in the same run; macOS and Linux were already
green in the real release build.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Q9HbD44EKWWTRYgxbFGxf6