Files
lmcp/windows/README.md
T
test0r 9e53b23b11 windows/build-msi.sh: cross-build the MSI on Linux via wixl + mingw-w64
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>
2026-05-17 20:27:32 +00:00

1.9 KiB

lmcp Windows MSI build

This directory contains the WiX manifest and packaging files for the Windows MSI build of lmcp.

./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 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.