forked from unom/punktfunk
The dependency currency wave took skia-safe/skia-bindings 0.87.0 -> 0.99.0 in
crates/pf-console-ui/Cargo.toml, but packaging/flatpak/io.unom.Punktfunk.yml still
pinned the 0.87.0 prebuilt archive, so every flatpak leg since the merge dies with
error[E0599]: no variant, associated function, or constant named `Default`
found for enum `SkPathFillType` (and `SkPathDirection`)
--> cargo/vendor/skia-bindings-0.99.0/src/defaults.rs:57
Nothing about that message points at the manifest, so it reads like a crate bug. It
isn't. `SKIA_BINARIES_URL: file://…` makes skia-bindings unpack the pinned tarball
verbatim into target/…/build/skia-bindings-*/out/skia/ — *including the bindings.rs
it was generated with*. Those two `Default`s are associated consts emitted INTO
bindings.rs, so they travel with the archive, not with the crate: 0.99.0's
src/defaults.rs was compiling against 0.87.0-era bindings. Verified directly — the
0.99.0 archive carries `impl SkPathFillType { pub const Default = Winding }` and
`impl SkPathDirection { pub const Default = CW }` on both x86_64 and aarch64.
Because the URL is file://, the fetch can never fail, so there is no download error
to notice — the only symptom is a compile error deep in a vendored crate.
The asset name changed across the bump: `jpeg` entered skia-safe's defaults at 0.99,
so the resolved-feature key went `pdf-textlayout-vulkan` -> `jpegd-jpege-pdf-textlayout-vulkan`.
Confirmed against each archive's own key.txt/tag.txt (tag 0.99.0, key
a25a0fdb7d90429aa2d1-<target>-jpegd-jpege-pdf-textlayout-vulkan), and libskparagraph.a
plus the Vulkan backend symbols are present, so the feature set still matches what
pf-console-ui resolves.
Everything else in the offline chain (Cargo.lock, cargo-sources.json) is regenerated
from the lock and self-corrects; this tarball is the single hand-maintained pin, which
is exactly why it was the thing left behind. Both bump sites now carry a pointer to
the other so the next one can't split-brain the same way.
66 lines
3.7 KiB
TOML
66 lines
3.7 KiB
TOML
[package]
|
|
name = "pf-console-ui"
|
|
description = "The Skia console UI for the Vulkan session binary — stats OSD, capture HUD, and (next) the gamepad library; renders on the presenter's device via the Overlay contract"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
authors.workspace = true
|
|
repository.workspace = true
|
|
|
|
# Same Linux+Windows gating as the rest of the client stack.
|
|
[target.'cfg(any(target_os = "linux", windows))'.dependencies]
|
|
pf-presenter = { path = "../pf-presenter" }
|
|
# MenuEvent/MenuPulse (the gamepad service's menu mode drives the library).
|
|
# `default-features = false` like every other consumer (pf-presenter, cli, session, clients/windows):
|
|
# pf-client-core's default is `pyrowave`, which compiles the vendored PyroWave C++ — fatal on
|
|
# Windows ARM64. Whether that backend is on is the session binary's call (it forwards a `pyrowave`
|
|
# feature); this crate needs none of it, and taking defaults here quietly turned it on.
|
|
pf-client-core = { path = "../pf-client-core", default-features = false }
|
|
|
|
# Skia on the presenter's VkDevice (`vulkan`); `textlayout` = skparagraph/harfbuzz for
|
|
# the typography the console library needs (~15 MB stripped, prebuilt binaries exist for
|
|
# this feature set on x86_64-unknown-linux-gnu AND x86_64-pc-windows-msvc — a source
|
|
# build is never triggered on either).
|
|
#
|
|
# The prebuilt-binary claim is the whole reason this dep is affordable, so re-verify it on
|
|
# EVERY bump: the build log must say `DOWNLOAD AND INSTALL SUCCEEDED`. skia-bindings does not
|
|
# fail when no matching asset exists — it silently falls back to a gn/ninja build of Skia from
|
|
# source, which turns a 2-minute CI leg into a multi-hour one. Verified at 0.99.0, both targets:
|
|
# skia-binaries-a25a0fdb7d90429aa2d1-<target>-jpegd-jpege-pdf-textlayout-vulkan.tar.gz
|
|
# ⚠ The asset name CHANGED across this bump — at 0.87 it was `<target>-pdf-textlayout-vulkan`,
|
|
# because `jpeg` was not yet in skia-safe's DEFAULT feature set (0.87: binary-cache, embed-icudtl,
|
|
# pdf; 0.99: + jpeg). We take defaults, so the JPEG codecs came along with the bump. That is a
|
|
# feature here rather than bloat: `screens/library.rs` feeds host poster art straight to
|
|
# `Image::from_encoded`, which silently returned `None` for JPEG posters before.
|
|
#
|
|
# 🛑 BUMPING THIS LINE IS ONLY HALF THE BUMP. packaging/flatpak/io.unom.Punktfunk.yml pins the
|
|
# archive above by URL + sha256 BY HAND (the offline sandbox can't fetch it) and nothing derives
|
|
# that pin from this file. Leave it stale and the flatpak leg unpacks the OLD archive's
|
|
# pre-generated bindings.rs under the NEW crate, failing with `no variant, associated function,
|
|
# or constant named 'Default' found for enum SkPathFillType`. That is exactly how #193 shipped.
|
|
skia-safe = { version = "0.99", features = ["vulkan", "textlayout"] }
|
|
ash = { version = "0.38", features = ["loaded"] }
|
|
|
|
anyhow = "1"
|
|
tracing = "0.1"
|
|
# `config::GamepadPref` keys the button-glyph style (PlayStation shapes vs ABXY).
|
|
punktfunk-core = { path = "../punktfunk-core" }
|
|
|
|
# Linux links the system SDL3; Windows builds it from source (same choice as the rest
|
|
# of the workspace's Windows SDL consumers).
|
|
[target.'cfg(target_os = "linux")'.dependencies]
|
|
sdl3 = { version = "0.18", features = ["hidapi", "ash"] }
|
|
|
|
[target.'cfg(windows)'.dependencies]
|
|
sdl3 = { version = "0.18", features = ["hidapi", "ash", "build-from-source"] }
|
|
|
|
# The shared console parity vectors (`clients/shared/console-vectors.json`) are read by three
|
|
# tests here — the palette table, the tab names and the transition motion. Dev-only: nothing in the
|
|
# shipping crate parses JSON. `pf-client-core` reads its own deeplink vectors the same way.
|
|
[dev-dependencies]
|
|
serde_json = "1"
|
|
|
|
[lints]
|
|
workspace = true
|