Skip to content

feat(msvc): add 14.52.36629 -- the toolset xrgui needs -- and qualify the curl dep - #628

Merged
Sunrisepeak merged 2 commits into
mainfrom
feat/msvc-multi-version
Aug 16, 2026
Merged

Sunrisepeak merged 2 commits into
mainfrom
feat/msvc-multi-version

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

接续 #626 / #627。两件事,第一件比看上去重要。

1. 加上 xrgui 真正需要的 toolset:14.52.36629

msvc 目前只有 14.44.35207(release 通道,VS 2022 17.14),而它构建不了 Sunrisepeak/xrgui#3 —— 那个仓库需要 14.52 preview,而比它低一级的 14.51 不是「差一点」,是直接 ICE

mo_yanxi_utility/src/utility/math/basic/vector2.ixx(67):
  fatal error C1001: Internal compiler error.   note: IFC import detected.

14.44 更老,从来就不可能满足它。所以这个包在补上 14.52 之前,对最初驱动它的那个用例是没用的。

14.52 来自 Insiders 通道aka.ms/vs/18/insiders/channel)—— 另一份清单,包 id 的拼法也不一样:Microsoft.VC.14.52.* 而不是 Microsoft.VC.14.44.17.14.*

它带着一个 release 条目没有的风险

微软会轮换 Insiders 的 payload。等 14.52.36629 下架,这些 URL 会 404 —— 响亮地失败,而且 sha256 仍然钉着,所以一个轮换后的新构建不可能悄悄顶替它。这正是值得拥有的失败模式。

也正因如此 latest 留在 release 通道:要一个 preview toolset 应当是个明确的选择,而不是 xlings install msvc 默认给你的东西。

2. 多版本从「方案上支持」变成「真的有两个」

payload 表现在按 toolset 分组,所以 xlings use msvc <ver> 有东西可切。

每个版本的目录版本都是从真实 payload 里读出来的,不是推断的 —— 这一步不能省:

toolset payload 包版本 解压后的目录版本
14.44 Tools 35228 / Headers 35220 / CRT 35226 14.44.35207(三者都解到这里)
14.52 36629 14.52.36629(一致)

两者规律不同,猜错的话没有任何东西会落在 recipe 查找的位置。

3. curl 依赖限定 + 移除豁免

curl 已随 #627 发布,所以两处裸名依赖改成 xim:curl@8.21.0check-dep-namespace.lua 里的两条 EXEMPT 移除 —— 这正是那个列表自己的注释要求的:

REMOVE it in the follow-up that lands after publication. An entry left behind is the bug this check exists to catch, wearing a permit.

本地已通过

static + isolation   1785 passed
lint x3              libpath / blocking-stdin / dep-namespace 全 PASS
payload 表求值       两个版本各 4 个 payload,url/sha256 成对、长度合法

windows-test 会实际安装 —— 注意它测的是 latest(14.44),14.52 那条路径本 PR 不会被 CI 覆盖,两者的差异只在 payload URL 和目录版本,而后者已按上表逐个核对过。

… it is published

Two things, and the first one matters more than it looks.

**14.52.36629 — the toolset xrgui actually needs.** The package shipped with
14.44.35207 only, and that does not build Sunrisepeak/xrgui#3: that tree needs
a 14.52 preview, and the toolset one step below it (14.51) does not merely
differ, it ICEs --

    mo_yanxi_utility/src/utility/math/basic/vector2.ixx(67):
      fatal error C1001: Internal compiler error.  note: IFC import detected.

so 14.44 was never going to serve it. 14.52 comes from the Insiders channel
(aka.ms/vs/18/insiders/channel), a different manifest with differently spelled
package ids -- Microsoft.VC.14.52.* rather than Microsoft.VC.14.44.17.14.*.

It carries a risk the release entry does not: Microsoft rotates Insiders
payloads. When 14.52.36629 goes, the URLs 404 -- loudly, and with the sha256
still pinned, so a rotated build cannot quietly take its place. That is the
failure mode worth having, and it is why `latest` stays on the release channel:
asking for a preview toolset should be a choice.

The payload table is now keyed by toolset, which is also what makes the
multi-version claim real rather than theoretical -- two toolsets, side by side,
`xlings use msvc <ver>` between them. Each one's directory version was read off
a real payload, not assumed: 14.44's payloads carry 35228 / 35220 / 35226 and
all unpack into 14.44.35207, while 14.52's payloads and directory agree at
36629.

**curl.** It is published, so the two bare dependencies become
`xim:curl@8.21.0` and the EXEMPT entries come out of check-dep-namespace.lua --
which is exactly what that list's own comment asks for: "REMOVE it in the
follow-up that lands after publication. An entry left behind is the bug this
check exists to catch, wearing a permit."
    msvc.lua:116: attempt to index a nil value (global 'TOOLSETS')

A function that closes over a local has to be written below that local. Placed
above it, the name it captures is a global -- which is nil, and says so only
when the hook runs.

Nothing a syntax check can catch, and the local gates cannot either: they read
the recipe, they do not install it. windows-test does.
@Sunrisepeak
Sunrisepeak merged commit 5969111 into main Aug 16, 2026
15 checks passed
@Sunrisepeak
Sunrisepeak deleted the feat/msvc-multi-version branch August 16, 2026 04:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants