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>
58 lines
1.9 KiB
Markdown
58 lines
1.9 KiB
Markdown
# 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)
|
|
|
|
```sh
|
|
./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:
|
|
```sh
|
|
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
|
|
|
|
```cmd
|
|
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 manifest
|
|
- `sync.sh` — copies root .lua sources → `pkg/`
|
|
- `README.md` — this file
|
|
- `pkg/install_service.bat` — Windows service installer
|
|
- `pkg/start.bat` — manual launcher
|
|
|
|
- **Generated / external** (gitignored):
|
|
- `pkg/lmcp.lua`, `pkg/server.lua`, `pkg/json.lua` — produced by
|
|
`sync.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 expects `pkg/lua/lua.exe`,
|
|
`pkg/lua/lua54.dll`, and the `pkg/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.
|