Story: Hotfix: Windows Clang CI compiler-launcher wrapper

Table of Contents

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

Goal

Restore the Windows Clang CI builds (windows-clang-debug-ninja and windows-clang-release-ninja), which currently fail to configure with ninja: fatal: CreateProcess: %1 is not a valid Win32 application.

Root cause: CMakePresets.json's hidden clang preset sets CMAKE_C_COMPILER_LAUNCHER=/=CMAKE_CXX_COMPILER_LAUNCHER to build/scripts/compiler_cache_wrapper.sh via its environment block. CMake seeds the CMAKE_<LANG>_COMPILER_LAUNCHER cache variable from the same-named environment variable at project()-time, before CMakeLists.txt's own WIN32-aware launcher logic (which would otherwise pick the sccache/ccache binary directly) gets a chance to run. windows-clang inherits the clang preset and so inherits this leak; windows-msvc* presets do not inherit clang=/=gcc and are unaffected.

Status

Field Value
State DONE
Parent sprint Sprint 23
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-07-11

Acceptance

  • windows-clang-debug-ninja and windows-clang-release-ninja configure and build successfully in CI (verified via a scheduled/triggered run or local Windows-equivalent reasoning, since we cannot run Windows CI locally).
  • windows-msvc* and Linux/macOS presets are unaffected.

Tasks

Task State Start End Description
Scaffold story: Hotfix: Windows Clang CI compiler-launcher wrapper DONE 2026-07-11 2026-07-11 Story scaffolding rides this task: documents, sprint wiring, and the scaffold PR. Close it before merging that PR.
Implement Hotfix: Windows Clang CI compiler-launcher wrapper DONE 2026-07-11 2026-07-11 Initial task for: Hotfix: Windows Clang CI compiler-launcher wrapper

Decisions

  • Split the launcher environment override out of the shared clang=/=gcc hidden presets into a new unix-compiler-cache-wrapper preset, inherited only by the Linux clang/gcc presets, rather than making CMakeLists.txt's WIN32 branch run before project() (not possible) or adding a Windows-specific override in windows-clang (would leave the same footgun for future Unix-inheriting presets).

Out of scope

Emacs 29.3 (Org mode 9.6.15)