Hello Blair,
Debian's Rust Team is working through the png 0.17 -> 0.18 transition
(tracked as rust-team/debcargo-conf#150). shotman currently pins
"png = 0.17.5" in its Cargo.toml, which blocks it from building against
a future png 0.18 archive. When the librust-png-dev package in the
Debian archive bumps to 0.18, shotman FTBFS until its Cargo.toml is
updated.
The attached quilt patch bumps the dependency to png 0.18.1. No source
changes are required: shotman's png use is encoder-only (Encoder::new,
set_depth, set_color, write_header, write_image_data, finish), and
that surface is API-compatible across 0.17 -> 0.18. The 0.18 breaking
changes (Decoder now requires Seek+BufRead, removed Encoder::set_srgb,
improved compression settings API) don't touch shotman's call sites.
I verified locally on the current main branch (0.4.10 tree equivalent):
cargo build -> clean
cargo test --no-run -> clean
cargo clippy -- -D warnings -> clean
The same patch was submitted upstream to
~whynothugo/shotman@lists.sr.ht today. Carrying this locally in Debian
lets the transition proceed without waiting on upstream merge and
release; it can be dropped when a new upstream tag is cut.
Patch follows.
Thanks,
Greg Lamberson
---
Description: Bump png dependency to 0.18.1
The png 0.18 release series is API-compatible with shotman's encoder
usage (Encoder::new, set_depth, set_color, write_header,
write_image_data, finish). No source changes are required.
.
This unblocks the Debian png 0.17 -> 0.18 transition for shotman
while upstream review of the equivalent patch is pending.
Author: Greg Lamberson <greg@lamco.io>
Forwarded: https://lists.sr.ht/~whynothugo/shotman/patches
Last-Update: 2026-04-19
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -30,7 +30,7 @@ wayland-client = "0.31.11"
wayland-protocols = { version = "0.32.9", features = ["client", "unstable", "staging"] }
wayland-protocols-wlr = { version = "0.3.9", features = ["client"] }
smithay-client-toolkit = { version = "0.19.2" }
-png = "0.17.5"
+png = "0.18.1"
memmap2 = "0.9.0"
itertools = "0.11.0"
thiserror = "1.0.32"