Skip to content

Commit 65c7ae1

Browse files
committed
fix(huxerui): drop xim:wix, and name the four deps rather than the closure
Two corrections the PR's own CI earned. NO xim:wix ON WINDOWS `mcpp emit xpkg` emits `deps = { "xim:wix@5.0.2" }` because upstream declares wix on the HOST axis, which is the axis a descriptor can carry. Emitted is not the same as needed: wix.exe builds an MSI, nothing else in the SDK touches it, upstream's rule tolerates its absence by construction inline ... wix() { const std::string root = mcpp::xpkg_dir("xim", "wix"); if (root.empty()) return {}; and upstream's manifest says an application that wants an installer "declares this line too". The dependency belongs to that application, not to everyone who imports huxerui on Windows. It was also breaking both Windows shards outright -- `xim:wix`'s install hook fails on a clean runner: E_INTERNAL: [wix] failed: install hook failed: tar -xf "...\xim-x-wix\5.0.2\.nupkg\wix.nupkg" -C "...\tool" ; wix installed but registered none of its declared programs taking every Windows consumer down with it for a tool almost none would run. That hook is a separate xim-pkgindex defect; this descriptor should not have been asking for wix either way. FOUR DEPS, NOT THIRTY-SIX The list existed to guarantee the payloads are INSTALLED, and installation is transitive: each xim package declares its own deps, and `xlings remove pango` is refused, naming `xim:gtk4` as the holder, so the reverse edges are live. Discovery is a different mechanism -- `mcpp::xpkg_dir` answers from the BUILDING package's own manifest, and upstream's mcpp.toml already declares the whole closure on its target axis. So the descriptor needs only what upstream's cmake and build.mcpp ask pkg-config for directly. Verified by clearing the member's sandbox and rebuilding with the short list: `test result ok. 1 passed`. Naming the other 32 restates pins this index does not own. Note the asymmetry with the xim-pkgindex entry, which is NOT a mistake: there the deps drive both installation and, through the aggregated sysroot pkgconfig view, discovery. Here upstream's manifest owns discovery. Same four names, different reasons. The pin move and the mysql-connector-cpp regression it surfaces are a separate matter, still under investigation.
1 parent 7f28bd9 commit 65c7ae1

1 file changed

Lines changed: 44 additions & 38 deletions

File tree

pkgs/h/huxerui.huxerui.lua

Lines changed: 44 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -73,45 +73,24 @@ package = {
7373

7474
xpm = {
7575
linux = {
76-
-- The transitive .pc closure of gtk4 + epoxy + libsoup, pinned,
77-
-- copied from the v0.3.0 tag's [target.'cfg(linux)'.xlings.workspace].
76+
-- DIRECT dependencies only -- the four modules upstream's cmake
77+
-- and build.mcpp actually ask pkg-config for. The rest of the GTK
78+
-- stack arrives through them: each xim package declares its own
79+
-- deps, and xlings resolves them transitively (`xlings remove
80+
-- pango` is REFUSED, naming `xim:gtk4` as the holder, so the
81+
-- reverse edges are live).
82+
--
83+
-- What this list is FOR is installation, not discovery. Discovery
84+
-- goes through `mcpp::xpkg_dir`, which answers from the BUILDING
85+
-- package's own manifest -- and upstream's mcpp.toml already
86+
-- declares the full closure on its target axis. So the descriptor
87+
-- only has to guarantee the payloads are present; naming the other
88+
-- 32 here would restate pins this index does not own.
7889
deps = {
79-
"xim:cairo@1.18.4",
80-
"xim:expat@2.6.2",
81-
"xim:fontconfig@2.15.0.1",
82-
"xim:freetype@2.13.2",
83-
"xim:fribidi@1.0.13",
84-
"xim:gdk-pixbuf@2.44.8",
85-
"xim:glib@2.88.3",
86-
"xim:graphene@1.10.8",
8790
"xim:gtk4@4.16.13",
88-
"xim:harfbuzz@14.4.0",
89-
"xim:libX11@1.8.10",
90-
"xim:libXau@1.0.11",
91-
"xim:libXdmcp@1.1.5",
92-
"xim:libXext@1.3.6",
93-
"xim:libXft@2.3.9",
94-
"xim:libXrender@0.9.11",
95-
"xim:libdatrie@0.2.14",
9691
"xim:libepoxy@1.5.10",
97-
"xim:libffi@3.4.4",
98-
"xim:libglvnd@1.7.0.1",
99-
"xim:libjpeg-turbo@3.2.0",
100-
"xim:libpng@1.6.43",
101-
"xim:libpsl@0.23.3",
102-
"xim:libselinux@3.11",
92+
"xim:glib@2.88.3",
10393
"xim:libsoup@3.6.6",
104-
"xim:libthai@0.1.30",
105-
"xim:libtiff@4.7.2",
106-
"xim:libxcb@1.17.0",
107-
"xim:nghttp2@1.70.0",
108-
"xim:pango@1.52.1",
109-
"xim:pcre2@10.42",
110-
"xim:pixman@0.42.2",
111-
"xim:sqlite@3.53.4",
112-
"xim:util-linux@2.40.2",
113-
"xim:xorgproto@2024.1",
114-
"xim:zlib@1.3.1",
11594
},
11695
["0.3.0"] = {
11796
url = {
@@ -131,9 +110,36 @@ package = {
131110
},
132111
},
133112
windows = {
134-
-- HOST axis, and emitted as such: wix.exe runs on the build
135-
-- machine. Only a project that builds an MSI reaches it.
136-
deps = { "xim:wix@5.0.2" },
113+
-- NO `xim:wix`, and that is not an oversight.
114+
--
115+
-- `mcpp emit xpkg` emits `deps = { "xim:wix@5.0.2" }` here because
116+
-- upstream declares wix on the HOST axis (top-level
117+
-- `[xlings.workspace]`), and the host axis is the one a descriptor
118+
-- CAN carry. Emitted is not the same as "every consumer needs it".
119+
--
120+
-- wix.exe builds an MSI. Nothing else in the SDK touches it, the
121+
-- rule tolerates its absence by design --
122+
--
123+
-- inline ... wix() {
124+
-- const std::string root = mcpp::xpkg_dir("xim", "wix");
125+
-- if (root.empty()) return {};
126+
--
127+
-- and upstream's own manifest says an application that asks
128+
-- huxerui.rules for an installer "declares this line too". So the
129+
-- dependency belongs to that application, not to everyone who
130+
-- imports huxerui on Windows.
131+
--
132+
-- Declaring it here was also actively breaking: `xim:wix`'s
133+
-- install hook fails on a clean Windows runner --
134+
--
135+
-- E_INTERNAL: [wix] failed: install hook failed:
136+
-- tar -xf "...\xim-x-wix\5.0.2\.nupkg\wix.nupkg" -C "...\tool"
137+
-- ; wix installed but registered none of its declared programs
138+
--
139+
-- which took every Windows consumer of this package down with it,
140+
-- for a tool almost none of them would ever run. Reported against
141+
-- xim-pkgindex separately; this descriptor should not have been
142+
-- asking for it either way.
137143
["0.3.0"] = {
138144
url = {
139145
GLOBAL = "https://github.com/HuxerUI/HuxerUI/archive/refs/tags/v0.3.0.tar.gz",

0 commit comments

Comments
 (0)