9e53b23b11
Discovered building v1.1.0 that the MSI can be produced entirely on
Linux — no Windows VM, no manual WiX install, no GUI babysitting:
apt install wixl unzip gcc-mingw-w64-x86-64 binutils-mingw-w64-x86-64 \
mingw-w64-x86-64-dev curl
The new build-msi.sh script:
1. Runs sync.sh to refresh pkg/{lmcp,server,json}.lua from root.
2. Downloads Lua 5.4.2 Win64 binaries from LuaBinaries (Tools +
Library zips — interpreter + headers + import lib).
3. Cross-compiles LuaSocket 3.1.0 via x86_64-w64-mingw32-gcc
(produces socket-3.0.0.dll + mime-1.0.3.dll for Win64).
4. Stages pkg/lua/{lua.exe, lua54.dll, socket/, mime/, *.lua} per
the WiX manifest layout.
5. Invokes wixl on the lmcp.wxs manifest (with sed for the
Windows backslash path separators → forward slashes).
Output: lmcp-<version>.msi. Version is read from lmcp.wxs
Version="…", so bump that before each release.
Cold build: ~30s. Warm cache: ~5s. The artifact contains all 17
files the WiX manifest expects, ProductVersion matches lmcp.wxs.
README updated to point at build-msi.sh as the recommended path;
the Windows-side candle/light recipe kept as an alternative.
Reproducibility note (deferred): the MSI is not yet bit-reproducible
across builds — file mtimes in the Lua binaries' zip propagate to
the cab inside the MSI. The debian/lmcp/build-deb.sh in marfrit-
packages uses SOURCE_DATE_EPOCH to fix this; same pattern would
apply here. Out of scope for the first cut.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1.9 KiB
1.9 KiB
lmcp Windows MSI build
This directory contains the WiX manifest and packaging files for the Windows MSI build of lmcp.
Recommended: cross-build on Linux (one command)
./build-msi.sh /path/to/output/dir
Downloads Lua 5.4 Win64 binaries from LuaBinaries, cross-compiles
LuaSocket via mingw-w64, stages pkg/lua/, and runs wixl to
produce lmcp-<version>.msi. No Windows VM required.
Prereqs on a Debian/Ubuntu builder:
sudo apt install wixl unzip gcc-mingw-w64-x86-64 \
binutils-mingw-w64-x86-64 mingw-w64-x86-64-dev curl
Version comes from lmcp.wxs Version="…". Bump that before
building a release.
Alternative: build on Windows via WiX toolset
sync.sh REM see "tracked vs. generated"
REM ensure pkg/lua/ has the runtime — see below
candle.exe lmcp.wxs
light.exe lmcp.wixobj -o lmcp-1.x.y.msi
What's tracked vs. generated
-
Tracked (edit in git):
lmcp.wxs— WiX MSI manifestsync.sh— copies root .lua sources →pkg/README.md— this filepkg/install_service.bat— Windows service installerpkg/start.bat— manual launcher
-
Generated / external (gitignored):
pkg/lmcp.lua,pkg/server.lua,pkg/json.lua— produced bysync.sh. Never edit directly; edit the root files and re-sync.pkg/lua/— the Lua + LuaSocket runtime drop-in. Download separately and place here. Suggested source: the lua-binaries project (https://github.com/rjpcomputing/luaforwindows) or a similar pre-built bundle. The MSI expectspkg/lua/lua.exe,pkg/lua/lua54.dll, and thepkg/lua/socket/+pkg/lua/mime/subdirectories per the manifest.
Issue history
Issue #18 (closed in v1.1.0) introduced this workflow after the
pkg/ lua sources had silently drifted ~6 months out of date,
missing every feature added since April 2026.