Skip to content

Commit 2d65b39

Browse files
feat: add godotengine.godot-cpp 0.0.1 (import godot_cpp) (#144)
* feat: add godotengine.godot-cpp 0.0.1 (import godot_cpp) Form A registration of mcpplibs/godot-cpp-m: the C++23 module layer over godot-cpp's unchanged API. `import godot_cpp;` re-exports the whole public `godot` namespace, so a file that opened with a stack of The index stays light: the 1022-TU source build lives in compat.godot-cpp and the module layer lives in its own repo, so this side carries only the descriptor -- the same split ffmpeg/opencv use. Module name is one segment, `godot_cpp`, matching the library and the reserved for packages exposing several submodules (opencv.cv, ffmpeg.av). Two things the module deliberately does not carry, both upstream's shape rather than a wrapper choice: * MACROS -- GDCLASS, GDREGISTER_CLASS, GDVIRTUAL_*, D_METHOD, memnew and the ERR_* family. A named module cannot export them, and GDExtension code is written in them, so the package ships <godot-cpp-m/macros.h> to include next to the import. godot-cpp's headers are in the module's global module fragment, so both spellings denote the same entities. * HashMap/HashSet and their default hashers, which reach hash_murmur3_one_float/double -- `static` functions declaring an unnamed union. Exposing a TU-local TYPE from a module interface is a hard error, not the -Wexpose-global-module-tu-local warning. The member consumes the package the way a user would and asserts the same numbers tests/examples/godot-cpp asserts through headers, so a divergence means the re-export changed behaviour. Note on ordering: this member declares [indices] godotengine, and a member-level table REPLACES the root's, so the transitive compat.godot-cpp resolves from the PUBLISHED index -- the constraint ffmpeg-module documents. It therefore only goes green after the compat.godot-cpp PR merges and publish-artifact reruns. Simulating a published index locally does not work: mcpp refreshes on a resolution miss and wipes the injected state. * ci: refresh the published index before the workspace tests The workspace jobs never refreshed the published index. The snapshot in play is whatever the pinned mcpp release vendored -- the Download step `cp -a`s the release's registry/ over ~/.mcpp/registry, on top of the restored cache -- so it is by construction older than main, and it never moves, because the cache is saved with that same stale copy inside it. This stayed invisible because mcpp DOES refresh on a miss for a direct dependency, and because every member so far resolved its packages either from this checkout or from compat packages that have been in the index far longer than any snapshot. tests/examples/godot-cpp-module is the first member to depend on a package added in the same cycle THROUGH a Form-A package -- a transitive dependency, which is the path with no refresh -- and it failed with error: dependency 'compat.godot-cpp': no package found ... index: local index 160c389 (never refreshed) on all three platforms, minutes after `Publish Index Artifact` had already republished an index that contained it. Reproduced locally against a snapshot of the same age, and `mcpp index update` alone turns that run green: test result ok. 1 passed; 0 failed; finished in 72.94s * fix: name the module package godot-cpp-m, version tracks upstream Two changes that only make sense together. The version becomes 4.5.0 rather than 0.0.1: a module layer that only re-exports an API has no version of its own worth inventing, and what a consumer needs from the number is which Godot they are targeting -- the same version compat.godot-cpp carries. That is exactly what makes the short name matter. This package and its own compat.godot-cpp dependency are always resolved together, and mcpp's installed-package lookup matches on (name, version) WITHOUT the namespace. With both named `godot-cpp` at 4.5.0, resolving this one lands on compat's unpacked directory: error: dependency 'godotengine.godot-cpp': index entry has no `mcpp = ...` field, and no mcpp.toml was found at <verdir>/mcpp.toml or <verdir>/*/mcpp.toml and it is cache-order dependent, so a clean runner passes and a warm one fails. Reproduced with a namespace unrelated to either package: leave a single <anything>-x-godot-cpp/4.5.0 in the store and the resolution goes to it; remove it and the same descriptor installs and builds fine. The store DIRECTORIES are namespaced (ns-x-name) -- the lookup is not. `godot-cpp-m` sidesteps it, keeps the version tracking upstream, and matches the repository name. `import godot_cpp;` is unchanged. Verified both ways with the CI-pinned mcpp 2026.8.3.3: cold store (both packages downloaded, 27.80s) and warm store with compat-x-godot-cpp and godotengine-x-godot-cpp-m side by side (3.52s) -- the state that previously failed. Both `test result ok`. * feat: godotengine.godot-cpp-m 10.0.0-rc1 (Godot 4.6) Second version of the module layer, tracking upstream one for one as compat.godot-cpp's do: 10.0.0-rc1 binds Godot 4.6, 4.5.0 binds Godot 4.5. Getting there needed a shim on the package side. godot-cpp declares hash_murmur3_one_float/_double `static`, and each declares an unnamed union in its body -- a class with no linkage inside a TU-local function. With 10.x the module interface exposes those functions (reachable from many inline bodies) and GCC rejects it outright: error: 'uint32_t godot::hash_murmur3_one_float(float, uint32_t)' exposes TU-local entity 'union ...::<unnamed>' -Wno-expose-global-module-tu-local, -fpermissive and -Wno-error= all leave it standing, and exporting less does not converge -- a single engine class is enough to trigger it. The package now generates a shim: upstream's header with `static` dropped from those two, scoped to its own include path, so compat.godot-cpp still compiles upstream's copy untouched. With it the export surface actually GREW (1818 names) because nothing has to be held back any more -- HashMap, HashSet, AHashMap and PairHash re-export normally. The new member asserts the version through TYPES rather than GODOT_VERSION_MAJOR/_MINOR: those are macros, and a module cannot export macros. EditorDock and AHashMap exist in 4.6 and not in 4.5, which also doubles as proof the shim did its job. Verified with the CI-pinned mcpp 2026.8.3.3: godot-cpp-module -> ok (1 passed) godot-cpp-module-v10 -> version=true ... ok (1 passed) --------- Co-authored-by: Sunrisepeak <x.d2learn.org@gmail.com>
1 parent bca4af4 commit 2d65b39

10 files changed

Lines changed: 377 additions & 6 deletions

File tree

.agents/docs/2026-08-04-add-godot-cpp-plan.md

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -116,17 +116,44 @@ godot_cpp ... ok (0.12s)
116116
直接链接跑通 —— 用来提前确认「依赖 .o 全量入链」下没有未解析符号(不需要 `-ldl`/`-lpthread`)。
117117
CPU 时间约 16 分钟,4 核 runner 上折合 4~5 分钟。
118118

119-
## 6. 后续:模块层 godotengine.godot-cpp
119+
## 6. 后续:模块层 godotengine.godot-cpp-m
120120

121121
模块包****放在本索引里内联(避免索引变重,也避免把 1000 TU 再编一遍):按 Form A 走外部仓
122-
`mcpplibs/godot-cpp-m`,其 `mcpp.toml` 依赖 `compat.godot-cpp`,提供 `import godot_cpp;`
122+
`mcpplibs/godot-cpp-m`(版本号**与上游对齐**,即 4.5.0 —— 只做 API 重导出的模块层没有自己的版本值得编,
123+
消费者从 `godot-cpp = "4.5.0"` 需要知道的就是它对着哪个 Godot),其 `mcpp.toml` 依赖 `compat.godot-cpp`,提供 `import godot_cpp;`
123124
(单段模块名,与 `#include <godot_cpp/...>` 和库名对应;点号在本索引里留给子模块,如 `opencv.cv`)。
124125

125126
**顺序是硬约束**:模块成员的测试工程只能声明一条 `[indices]`,给 `godotengine`;它的传递依赖
126127
`compat.godot-cpp` 于是从**已发布**的远端索引解析(tests/examples/ffmpeg-module 的注释写的就是这件事)。
127128
所以必须先合并本 PR、`publish-artifact` 重新发布 artifact,第二个 PR 的 CI 才可能绿。
128129

129-
模块 wrapper 的生成方式已验证可行:1077 个头在单个 TU 里全部编过只要 3.5 秒 / 728 MB RSS,
130-
按命名空间作用域声明批量产出 `export using ::godot::X;` 即可。**宏不在其中** —— `GDCLASS`
131-
`GDREGISTER_CLASS``memnew``ERR_*``GDVIRTUAL_*` 是预处理器构造,模块带不走,做类注册的 TU
132-
仍需 `#include` 对应头;这一条要在 godot-cpp-m 的 README 与描述符注释里写明。
130+
### 已完成(mcpplibs/godot-cpp-m 0.0.1)
131+
132+
`src/godot_cpp.cppm``tools/gen_module_cppm.py` **生成**:扫描头文件(带花括号/命名空间状态机),
133+
`godot` 命名空间作用域的全部声明批量产出为 `export using ::godot::X;`,约 1750 个名字 ——
134+
全部引擎类、全部 builtin Variant 类型、全局枚举**连同枚举量**(所以 `godot::OK` 拼法不变)、
135+
`godot::Math`、模板。手工罗列这个面积不现实,且每个 Godot 版本都会变,故生成 + 编译器校验。
136+
137+
踩到的两类坑:
138+
139+
- **宏带不走**`GDCLASS``GDREGISTER_CLASS``GDVIRTUAL_*``D_METHOD``memnew``ERR_*` 是预处理器
140+
构造,而 GDExtension 代码正是用它们写的。解法照搬 ffmpeg-m:附一个侧头文件
141+
`<godot-cpp-m/macros.h>`,与 import 并排包含。godot-cpp 的头在模块的 GMF 里,两种拼法指向同一批
142+
global-module 实体,混用是良构的 —— `tests/godot_cpp_macros.cpp` 就是这个形状,通过。
143+
- **TU-local 暴露是硬错误,不是告警**`HashMap`/`HashSet` 及其默认 hasher 的内联体会走到
144+
`hash_murmur3_one_float/double`,这两个既是 `static`,体内又声明了匿名 union;从模块接口暴露一个
145+
TU-local **类型**是 error(不是 `-Wexpose-global-module-tu-local` 那条 warning)。用二分法在 1759 个
146+
导出名里定位到 7 个(含 `PairHash`),排除即可 —— 它们是 godot-cpp 内部容器,扩展代码用
147+
Dictionary/Array/TypedArray,头文件里也仍然拿得到。另外那 3300 条 warning 级暴露用
148+
`-Wno-expose-global-module-tu-local` 静掉,是上游头的形态,包一层改变不了。
149+
150+
验证:`mcpp test` 两条全过(模块面 + 宏面),`examples/summator`(真 GDExtension,`kind = "shared"`)
151+
构建出 `libsummator.so` 且导出 `summator_library_init`
152+
153+
### 本 PR(索引侧)可验证到哪一步
154+
155+
`godotengine.godot-cpp` 是 Form A,索引侧只有描述符;成员的 `[indices]` 给了 `godotengine`,
156+
所以传递依赖 `compat.godot-cpp` 必须从**已发布**的索引解析。合并前本地伪造 published index 来验证
157+
是走不通的:mcpp 在解析不到时会主动 refresh 一次,把注入的状态直接冲掉(参见
158+
[[stale-global-index-masks-descriptor-bugs]] 的反面)。因此这一步的唯一真实验证就是
159+
compat PR 合并 + artifact 重新发布之后的 CI。

.github/workflows/validate.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,30 @@ jobs:
409409
echo "MEMBERS=$sel" >> "$GITHUB_ENV"
410410
echo "selected members: ${sel:-<none>}"
411411
412+
# ── Refresh the PUBLISHED index before testing ────────────────────
413+
# Most members resolve everything from this checkout, but a member that
414+
# redirects a namespace other than `compat` gets the REST from the
415+
# published index — and nothing here ever refreshed it. The snapshot in
416+
# play is whatever the pinned mcpp release vendored (the Download step
417+
# `cp -a`s the release's registry/ over ~/.mcpp/registry, on top of the
418+
# restored cache), so it is by construction older than main, and it
419+
# never moves: the cache is saved with that same stale copy inside it.
420+
#
421+
# mcpp does refresh on a miss for a DIRECT dependency, which is why this
422+
# went unnoticed — the gap is a Form-A package's TRANSITIVE dependency.
423+
# tests/examples/godot-cpp-module hit it head-on: the module package's
424+
# own compat.godot-cpp dep resolved against a snapshot predating the
425+
# commit that added it, and failed with `index: local index <sha> (never
426+
# refreshed)` even though the artifact had already been republished.
427+
# (Older members never noticed: their compat packages have been in the
428+
# index far longer than any snapshot.)
429+
- name: Refresh the published package index
430+
shell: bash
431+
env:
432+
MCPP_INDEX_MIRROR: GLOBAL
433+
run: |
434+
"$MCPP" index update
435+
412436
- name: mcpp test (workspace or affected members)
413437
shell: bash
414438
env:

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ Two kinds of packages live here:
5151
| Multiple majors in one package (shape switches with the version) | [`compat.catch2`](pkgs/c/compat.catch2.lua) (3.x compiles `src/catch2/` into a static library; 2.x goes header-only through `single_include/`) |
5252
| External build system (`install()` builds from source) | [`compat.openblas`](pkgs/c/compat.openblas.lua) (Make) · [`compat.openssl`](pkgs/c/compat.openssl.lua) (Perl Configure + Make, static libssl/libcrypto) |
5353
| Whole-source direct build (config snapshot + source list, no external build system) | [`compat.ffmpeg`](pkgs/c/compat.ffmpeg.lua) (2281 TUs including NASM assembly, declared through 28 directory globs) |
54+
| Module layer over a compat source build (external Form-A repo) | [`godotengine.godot-cpp-m`](pkgs/g/godotengine.godot-cpp-m.lua) (two versions tracking upstream: `10.0.0-rc1` = Godot 4.6, `4.5.0` = Godot 4.5. `import godot_cpp;` re-exports the whole `godot` namespace, ~1800 names GENERATED from the headers rather than curated; the 1022-TU build stays in `compat.godot-cpp`, so the index carries only this descriptor. Macros — `GDCLASS`, `GDREGISTER_CLASS`, `memnew`, `ERR_*` — are the one thing a named module cannot export, so the package ships a side header to include next to the import. It also ships a generated `hashfuncs.hpp` shim — upstream's header minus `static` on two functions whose bodies declare an unnamed union — without which GCC refuses the module interface outright, a hard error no `-W` flag reaches) |
5455
| C++23 module wrapper | [`nlohmann.json`](pkgs/n/nlohmann.json.lua) · [`marzer.tomlplusplus`](pkgs/m/marzer.tomlplusplus.lua) · [`neargye.magic_enum`](pkgs/n/neargye.magic_enum.lua) · [`boost-ext.ut`](pkgs/b/boost-ext.ut.lua) (upstream's own `include/boost/ut.cppm` reproduced verbatim but for one `__argc`/`__argv` shim that Clang-on-MSVC needs; namespace `boost-ext` since it is NOT an official Boost library) |
5556

5657
### Adding a package

README.zh-CN.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ mcpp self config --mirror CN # 切换至国内镜像,默认使用 GLOBAL 上
4848
| 单包多 major(形态随版本切换) | [`compat.catch2`](pkgs/c/compat.catch2.lua)(3.x 编 `src/catch2/` 出静态库;2.x 走 `single_include/` header-only) |
4949
| 外部构建系统(`install()` 从源码构建) | [`compat.openblas`](pkgs/c/compat.openblas.lua)(Make) · [`compat.openssl`](pkgs/c/compat.openssl.lua)(Perl Configure + Make,静态 libssl/libcrypto) |
5050
| 全源码直编(config 快照 + 源列表,零外部构建系统) | [`compat.ffmpeg`](pkgs/c/compat.ffmpeg.lua)(2281 TU 含 NASM 汇编,28 个目录 glob 声明) |
51+
| 模块层叠在 compat 源码构建之上(外部 Form-A 仓) | [`godotengine.godot-cpp-m`](pkgs/g/godotengine.godot-cpp-m.lua)(两个版本与上游对齐:`10.0.0-rc1` 对应 Godot 4.6,`4.5.0` 对应 Godot 4.5。`import godot_cpp;` 重导出整个 `godot` 命名空间,约 1800 个名字由头文件**生成**而非手工罗列;1022 个 TU 的构建留在 `compat.godot-cpp`,索引侧只留这一个描述符。宏 —— `GDCLASS``GDREGISTER_CLASS``memnew``ERR_*` —— 是具名模块唯一带不走的东西,故包内附一个与 import 并排包含的侧头文件。另外还带一份生成的 `hashfuncs.hpp` 遮蔽头 —— 上游那个头去掉两个函数的 `static`(它们体内声明了匿名 union)—— 否则 GCC 直接拒绝该模块接口,且是任何 `-W` 开关都够不到的硬错误) |
5152
| C++23 module wrapper | [`nlohmann.json`](pkgs/n/nlohmann.json.lua) · [`marzer.tomlplusplus`](pkgs/m/marzer.tomlplusplus.lua) · [`neargye.magic_enum`](pkgs/n/neargye.magic_enum.lua) · [`boost-ext.ut`](pkgs/b/boost-ext.ut.lua)(逐字复用上游自带的 `include/boost/ut.cppm`,仅加一处 Clang-on-MSVC 需要的 `__argc`/`__argv` shim;命名空间取 `boost-ext`,因其并非 boost 官方库) |
5253

5354
### 新增一个包

mcpp.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ members = [
3030
"tests/examples/ffmpeg-module",
3131
"tests/examples/fmtlib.fmt",
3232
"tests/examples/godot-cpp",
33+
"tests/examples/godot-cpp-module",
34+
"tests/examples/godot-cpp-module-v10",
3335
"tests/examples/godot-cpp-v10",
3436
"tests/examples/gui-stack",
3537
"tests/examples/imgui",

pkgs/g/godotengine.godot-cpp-m.lua

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
-- Form A descriptor: the godot-cpp module package ships its own mcpp.toml.
2+
-- mcpp's default lookup finds <verdir>/*/mcpp.toml inside the GitHub source
3+
-- tarball wrap.
4+
--
5+
-- The package is the thin C++23 module layer over godot-cpp's unchanged C++
6+
-- API: `import godot_cpp;` re-exports the whole public `godot` namespace, so
7+
-- code that used to open with a stack of `#include <godot_cpp/...>` opens with
8+
-- one import and is otherwise the same. godot-cpp's sources and its
9+
-- pre-generated GDExtension bindings arrive through the package's own
10+
-- compat.godot-cpp dependency (1022-TU source build -- see
11+
-- pkgs/c/compat.godot-cpp.lua).
12+
--
13+
-- Module name: ONE segment, `godot_cpp`, matching the library and the
14+
-- `#include <godot_cpp/...>` root users already type. The dotted spelling is
15+
-- reserved here for packages that expose several submodules (opencv.cv,
16+
-- ffmpeg.av); this one has a single interface unit.
17+
--
18+
-- What the module cannot carry: MACROS. GDCLASS, GDREGISTER_CLASS,
19+
-- GDVIRTUAL_*, D_METHOD, memnew/memdelete and the ERR_* family are
20+
-- preprocessor constructs, and GDExtension code is written in them. The
21+
-- package ships `<godot-cpp-m/macros.h>` for exactly that, to be included
22+
-- next to the import; godot-cpp's headers sit in the module's global module
23+
-- fragment, so the two spellings denote the same entities and mixing them is
24+
-- well-formed. The package's own tests cover both shapes.
25+
--
26+
-- Also not re-exported (upstream's shape, not a wrapper choice): the internal
27+
-- container templates HashMap/HashSet and their default hashers. Their inline
28+
-- bodies reach `hash_murmur3_one_float/double`, which are `static` AND declare
29+
-- an unnamed union -- and exposing a TU-local TYPE from a module interface is
30+
-- a hard error, not the -Wexpose-global-module-tu-local warning. Extension
31+
-- code uses Dictionary/Array/TypedArray; the headers still have the rest.
32+
--
33+
-- The version TRACKS UPSTREAM rather than counting the wrapper's own
34+
-- iterations: 4.5.0 is the godot-cpp release it wraps, and the version
35+
-- compat.godot-cpp carries, so the version tells a consumer the one thing
36+
-- that matters -- which Godot they are targeting.
37+
--
38+
-- The name is `godot-cpp-m`, NOT `godot-cpp`, and that is load-bearing rather
39+
-- than cosmetic. This package and its own compat.godot-cpp dependency are
40+
-- always resolved together, and mcpp's installed-package lookup matches on
41+
-- (name, version) WITHOUT the namespace: with both named `godot-cpp` at the
42+
-- same version -- which "the version tracks upstream" guarantees -- resolving
43+
-- this one lands on compat's unpacked directory and fails with "no mcpp.toml
44+
-- at <verdir>/*/mcpp.toml". Reproducible with a namespace unrelated to either
45+
-- package: leave a single <anything>-x-godot-cpp/4.5.0 in the store and the
46+
-- resolution goes to it; remove it and the same descriptor installs fine. The
47+
-- store DIRECTORIES are namespaced (ns-x-name) -- the lookup is not. Distinct
48+
-- short names sidestep it, keep the version tracking upstream, and `-m`
49+
-- matches the repository name. `import godot_cpp;` is unaffected.
50+
--
51+
-- Versions track upstream godot-cpp one for one, as compat.godot-cpp's do:
52+
-- 10.0.0-rc1 binds Godot 4.6, 4.5.0 binds Godot 4.5.
53+
--
54+
-- 10.0.0-rc1 additionally ships a generated `hashfuncs.hpp` shim -- upstream's
55+
-- header with `static` dropped from two functions -- without which GCC refuses
56+
-- the module interface outright ("exposes TU-local entity 'union <unnamed>'",
57+
-- a hard error no -W flag reaches). It is scoped to the package's own include
58+
-- path, so compat.godot-cpp still compiles upstream's copy untouched. See the
59+
-- package README.
60+
--
61+
-- CN tags carry an `-m` suffix: the gitcode mirror repo is shared with the
62+
-- compat.godot-cpp archives, which already hold the bare-version tags.
63+
--
64+
-- Three platforms, one OS-neutral tarball: godot-cpp is portable C++ and
65+
-- compat.godot-cpp covers all three.
66+
package = {
67+
spec = "1",
68+
name = "godot-cpp-m",
69+
namespace = "godotengine",
70+
description = "C++23 module package for godot-cpp (import godot_cpp) — Godot GDExtension API, C++ API unchanged",
71+
licenses = {"MIT"}, -- module layer; upstream godot-cpp is MIT as well
72+
repo = "https://github.com/mcpplibs/godot-cpp-m",
73+
type = "package",
74+
75+
xpm = {
76+
linux = {
77+
["10.0.0-rc1"] = {
78+
url = {
79+
GLOBAL = "https://github.com/mcpplibs/godot-cpp-m/archive/refs/tags/v10.0.0-rc1.tar.gz",
80+
CN = "https://gitcode.com/mcpp-res/godot-cpp/releases/download/v10.0.0-rc1-m/godot-cpp-m-10.0.0-rc1.tar.gz",
81+
},
82+
sha256 = "895975f32456d821b1297dbd5298ea3e9b925b00557a187927f3dacf2f035220",
83+
},
84+
["4.5.0"] = {
85+
url = {
86+
GLOBAL = "https://github.com/mcpplibs/godot-cpp-m/archive/refs/tags/v4.5.0.tar.gz",
87+
CN = "https://gitcode.com/mcpp-res/godot-cpp/releases/download/v4.5.0-m/godot-cpp-m-4.5.0.tar.gz",
88+
},
89+
sha256 = "d91794f46ec4a74c1f8c61c894efdecceaf54feff103b9b139fd6a8f16e43051",
90+
},
91+
},
92+
macosx = {
93+
["10.0.0-rc1"] = {
94+
url = {
95+
GLOBAL = "https://github.com/mcpplibs/godot-cpp-m/archive/refs/tags/v10.0.0-rc1.tar.gz",
96+
CN = "https://gitcode.com/mcpp-res/godot-cpp/releases/download/v10.0.0-rc1-m/godot-cpp-m-10.0.0-rc1.tar.gz",
97+
},
98+
sha256 = "895975f32456d821b1297dbd5298ea3e9b925b00557a187927f3dacf2f035220",
99+
},
100+
["4.5.0"] = {
101+
url = {
102+
GLOBAL = "https://github.com/mcpplibs/godot-cpp-m/archive/refs/tags/v4.5.0.tar.gz",
103+
CN = "https://gitcode.com/mcpp-res/godot-cpp/releases/download/v4.5.0-m/godot-cpp-m-4.5.0.tar.gz",
104+
},
105+
sha256 = "d91794f46ec4a74c1f8c61c894efdecceaf54feff103b9b139fd6a8f16e43051",
106+
},
107+
},
108+
windows = {
109+
["10.0.0-rc1"] = {
110+
url = {
111+
GLOBAL = "https://github.com/mcpplibs/godot-cpp-m/archive/refs/tags/v10.0.0-rc1.tar.gz",
112+
CN = "https://gitcode.com/mcpp-res/godot-cpp/releases/download/v10.0.0-rc1-m/godot-cpp-m-10.0.0-rc1.tar.gz",
113+
},
114+
sha256 = "895975f32456d821b1297dbd5298ea3e9b925b00557a187927f3dacf2f035220",
115+
},
116+
["4.5.0"] = {
117+
url = {
118+
GLOBAL = "https://github.com/mcpplibs/godot-cpp-m/archive/refs/tags/v4.5.0.tar.gz",
119+
CN = "https://gitcode.com/mcpp-res/godot-cpp/releases/download/v4.5.0-m/godot-cpp-m-4.5.0.tar.gz",
120+
},
121+
sha256 = "d91794f46ec4a74c1f8c61c894efdecceaf54feff103b9b139fd6a8f16e43051",
122+
},
123+
},
124+
},
125+
126+
-- (no `mcpp` field -- default lookup will find <verdir>/*/mcpp.toml)
127+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# godotengine.godot-cpp-m 10.0.0-rc1 (Godot 4.6) module-layer test project.
2+
#
3+
# Separate member from godot-cpp-module for the same reason compat has two:
4+
# the versions are different bindings of different engine releases, and each
5+
# has to be built and asserted on its own.
6+
#
7+
# Overrides the workspace-root redirect: root declares `compat`, this member
8+
# needs `godotengine`. A member-level [indices] REPLACES the inherited table,
9+
# so the module package's own compat.godot-cpp dependency resolves from the
10+
# GLOBAL published index -- that descriptor is pre-merge-validated by
11+
# tests/examples/godot-cpp-v10.
12+
[indices]
13+
godotengine = { path = "../../.." }
14+
15+
[package]
16+
name = "godot-cpp-module-v10-tests"
17+
version = "0.1.0"
18+
19+
[dependencies]
20+
godotengine.godot-cpp-m = "10.0.0-rc1"

0 commit comments

Comments
 (0)