Story: Build and packaging

Table of Contents

This page documents a story in Sprint 04. It captures the goal, current status, acceptance criteria, and the tasks that compose it.

Goal

Get the Windows package installable on a real Windows machine, fix the local-time / shutdown-crash regressions surfaced along the way, and clear up assets packaging.

Status

Field Value
State DONE
Parent sprint Sprint 04
Now Completed 2025-11-20.
Waiting on None.
Next None.
Last touched 2025-11-20

Continued in: Build platform follow-up (sprint 07) — WSL setup, prebuilt Qt switch, Windows clang build breaks.

Acceptance

  • Windows package installs and runs (console end-to-end).
  • Windows clang build compiles -Werror clean (no localtime deprecation).
  • Qt UI shuts down without crash.

Tasks

Task State Start End Description
Install Windows package on Windows machine DONE 2025-11-20 2025-11-20 Verify the Windows package produced by CI installs and runs end-to-end on a real Windows machine.
Fix broken Windows build due to local time DONE 2025-11-20 2025-11-20 Resolve a Windows-only build break triggered by a local-time API mismatch.
Resolve crash on shutdown DONE 2025-11-20 2025-11-20 Diagnose and fix a crash that occurs on application shutdown.

Decisions

Adopt X_VCPKG_APPLOCAL_DEPS_INSTALL=true
copies Qt and other DLLs into the bin folder during install; closes the bulk of the Windows runtime-dependency failures.
safe_localtime helper
Windows uses localtime_s, the rest use localtime_r. Behind one function so call sites stay simple.
Sole-ownership rule for detachable MDI widgets
fixes the shutdown crash; widgets stay parent-less, MainWindow owns them, QObject::destroyed cleans the lookup maps.

Out of scope

  • macOS code signing.
  • Windows installer beyond the basic vcpkg-driven packaging.

See also

Emacs 29.1 (Org mode 9.6.6)