You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
compat.yaml-cpp 0.8.0 and 0.9.0, measured on openkal; the site's openkal facet names openkal-ecosystem and openkal-compat; a shorter README
compat.yaml-cpp builds upstream's CMake target as it is (src/*.cpp plus the
contrib GraphBuilder), from the GitHub tag archives mirrored byte for byte to
gitcode mcpp-res/yaml-cpp. YAML_CPP_STATIC_DEFINE, a PUBLIC definition of a
static build upstream, reaches consumers through a yaml-cpp/dll.h shim, since
descriptor `defines` stay package-private; the test asserts it at compile time.
Each version has a member (yaml-cpp, yaml-cpp-v080), and both are measured on
openkal.
The test found an upstream defect: GraphBuilderInterface's pure virtual
destructor is defined nowhere, so a derived class links only when its user
defines it. The test does, as any consumer must; the descriptor does not.
The site's openkal facet had three sentences for values (openkal itself /
runs on openkal / fails on openkal). It now has two names: openkal-ecosystem
for the packages that make up openkal, openkal-compat for packages measured
to run in an openkal graph. A package that only builds or fails is filed
under neither; its page still shows the per-target measurement.
The README keeps one line per shape in its reference table; the long
explanations for recastnavigation and huxerui move into the descriptor
catalog, which gains a yaml-cpp row.
Copy file name to clipboardExpand all lines: README.md
+40-67Lines changed: 40 additions & 67 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,24 +2,14 @@
2
2
3
3
**English** | [简体中文](README.zh-CN.md)
4
4
5
-
> The default package index repository for the [`mcpp`](https://github.com/mcpp-community/mcpp) build tool.
5
+
> The default package index for the [`mcpp`](https://github.com/mcpp-community/mcpp) build tool.
6
6
> Browse every package online: **https://mcpplibs.github.io/mcpp-index/**
7
7
8
-
This repository hosts the C++23 packages that `mcpp` can `add` directly — both modular libraries that are ready to
9
-
`import`, and third-party C/C++ libraries built from upstream sources or headers in `compat` form. Every package maps
10
-
to one `pkgs/<initial>/<name>.lua` descriptor file.
11
-
12
-
> **Engine floor (mcpp 2026.9.18.3):**`openkal-musl 0.15.0` and any future
13
-
> `[c-abi]` package require the engine that ships with `mcpp 2026.9.18.3`
14
-
> or later — the host-macro strip on Windows hosts and the freestanding
15
-
> wchar realisation are what let the c-abi probe verify a declaration
16
-
> without host contamination. The `min_mcpp` floor on `[indices]`,
17
-
> `MCPP_VERSION`, and the per-package pins under `tests/openkal/pins.toml`
18
-
> all gate this together (raising only the index floor would still let
19
-
> 30 members E0006 before reading any source line). Older engines
20
-
> silently misbuild `[c-abi]` packages: the build succeeds, the probe
21
-
> fails, the program compiles against the wrong environment. Upgrade:
22
-
> `xlings install mcpp --force`.
8
+
The C++23 packages `mcpp` can `add` directly: modular libraries ready to `import`, and third-party C/C++ libraries
9
+
built from upstream sources in `compat` form. Each package is one `pkgs/<initial>/<name>.lua` descriptor.
10
+
11
+
> **Requires mcpp 2026.9.18.3 or later** (`min_mcpp` in [`index.toml`](index.toml)). Older engines silently misbuild
12
+
> `[c-abi]` packages such as `openkal-musl`. Upgrade: `xlings install mcpp --force`.
23
13
24
14
## Usage
25
15
@@ -31,44 +21,36 @@ mcpp search <keyword> # search and refresh the index
31
21
mcpp self config --mirror CN # switch to the CN mirror; GLOBAL upstream is the default
32
22
```
33
23
34
-
For the full package list, see the **[online index site](https://mcpplibs.github.io/mcpp-index/)**.
35
-
36
-
## Package ecosystem and contributing
24
+
## Package kinds
37
25
38
-
Two kinds of packages live here:
39
-
40
-
-**Native mcpp module libraries**: shipped as C++23 modules and ready to `import` — `mcpplibs.*`, `nlohmann.json`,
41
-
`imgui`, `ffmpeg`, `opencv`, plus libraries developed on top of mcpp by users and registered into the index (such as
42
-
`tensorvia-cpu` and `huxerui.huxerui`). Their upstream usually carries its own `mcpp.toml`, so the descriptor (Form A) only declares
43
-
metadata and a download address.
44
-
-**Third-party C/C++ libraries (`compat`)**: upstream offers no mcpp support, so the descriptor (Form B) inlines the
45
-
build information. These come in several shapes — header-only, plain C sources, C++23 module wrapper — with optional
46
-
components gated behind `features` and a GitCode CN mirror configured.
26
+
-**Native mcpp module libraries** (Form A): upstream carries its own `mcpp.toml`; the descriptor only declares
27
+
metadata and a download address. `mcpplibs.*`, `nlohmann.json`, `imgui`, `opencv`, `tensorvia-cpu`, …
28
+
-**Third-party C/C++ libraries** (`compat`, Form B): upstream has no mcpp support, so the descriptor inlines the build.
29
+
Header-only, C/C++ sources, or a C++23 module wrapper; optional parts sit behind `features`; a GitCode CN mirror
30
+
serves the same bytes.
47
31
48
32
### Reference examples
49
33
50
-
A few descriptors worth opening first, one per common shape:
51
-
52
-
| Shape | Example | What it shows |
53
-
|------|------|------|
54
-
| Native module library (Form A) |[`mcpplibs.cmp`](pkgs/c/cmp.lua) · [`mcpplibs.tinyhttps`](pkgs/t/tinyhttps.lua) · [`gzj-creator.galay`](pkgs/g/gzj-creator.galay.lua)| Upstream carries its own `mcpp.toml`; CMP demonstrates a coroutine runtime, while Galay demonstrates a multi-module package with feature-scoped protocol layers |
55
-
| C-source compat |[`compat.cjson`](pkgs/c/compat.cjson.lua)| One `.c` compiled into a lib; the optional extension sits behind a `features` gate |
56
-
| Header-only |[`compat.gtl`](pkgs/c/compat.gtl.lua)| Nothing to compile — `include_dirs` and an anchor TU |
57
-
| Whole-source build + generated config |[`compat.c-ares`](pkgs/c/compat.c-ares.lua)| The config header configure would have produced is snapshotted into `generated_files`|
58
-
| Multi-component upstream flattened into one lib | [`compat.recastnavigation`](pkgs/c/compat.recastnavigation.lua) | Recast Navigation 1.6.0 — upstream is five inter-dependent CMake libraries; here the two every consumer uses are the base and the other three are `features`, all compiled into one lib. Their dependency edges have to be rebuilt by hand, which is why `debug-utils` carries `implies = { "tilecache" }`: upstream links DetourTileCache unconditionally, and without the implication a consumer asking only for debug drawing fails at link with missing `dtTileCache*` symbols. Upstream's install puts every header flat under `include/recastnavigation/` **and** keeps both that directory and its parent on the interface include path, so both `<Recast.h>` and `<recastnavigation/Recast.h>` are legal against a real install — 26 generated forwarding headers restore the second spelling for a source-tree build. `RECASTNAVIGATION_DT_POLYREF64` and `RECASTNAVIGATION_DT_VIRTUAL_QUERYFILTER` are deliberately NOT features: they change the ABI of types crossing the library boundary, and a feature's `defines` reach only the package's own TUs |
59
-
| C++23 module wrapper |[`nlohmann.json`](pkgs/n/nlohmann.json.lua)| A generated `.cppm` turns a header-only library into `import`|
60
-
| C++23 module, upstream's own |[`khronos.vulkan-hpp`](pkgs/k/khronos.vulkan-hpp.lua)| Khronos ships `vulkan.cppm`, so the descriptor just names it — `import vulkan;` with nothing authored here |
61
-
| External build system |[`compat.openssl`](pkgs/c/compat.openssl.lua)| An `install()` hook drives upstream's own Perl Configure + Make |
62
-
| Form A whose consumer deps must be written by hand |[`huxerui.huxerui`](pkgs/h/huxerui.huxerui.lua)| HuxerUI declares its GTK4 stack on the TARGET axis, which is the form mcpp recommends and which a descriptor structurally cannot carry — three platform blocks, and a cfg selector is not a platform. `mcpp emit xpkg` says so and emits empty `deps`, so the 36-entry closure is transcribed into `xpm.linux.deps` at PLATFORM level (a per-version `deps` is inert). Its `licenses`/`repo` also deliberately disagree with what emit produces |
34
+
One descriptor per common shape:
63
35
64
-
The full catalog — every shape this index has needed, and the reasoning behind each descriptor including what it
65
-
deliberately leaves out — is in **[Descriptor examples by shape](docs/descriptor-examples.md)**.
36
+
| Shape | Example |
37
+
|------|------|
38
+
| Native module library (Form A) |[`mcpplibs.tinyhttps`](pkgs/t/tinyhttps.lua) · [`gzj-creator.galay`](pkgs/g/gzj-creator.galay.lua)|
39
+
| C sources + `features`|[`compat.cjson`](pkgs/c/compat.cjson.lua)|
40
+
| C++ sources, several versions |[`compat.yaml-cpp`](pkgs/c/compat.yaml-cpp.lua)|
0 commit comments