build(spice): vendor guacd SPICE protocol support (patch 008)

Vendors native SPICE protocol support (libguac-client-spice) from upstream
PR apache/guacamole-server#688 (GUACAMOLE-261) as patch 008, on top of the
pinned guacd (6719b20d) + existing patches. Wires --with-spice and the
libspice-client-glib-2.0-dev build dep into build-deb.sh, install.sh,
Dockerfile, and dev.sh. guacclip is kept in the source but not built
(--disable-guacclip, like guacenc/guaclog); the PR's incidental non-SPICE
terminal.c keyboard change is excluded.

guacd builds green with libguac-client-spice on Debian 13 under -Werror.
rustguac-side wiring (SessionType::Spice / SpiceParams) still to come.
This commit is contained in:
Dave Kempe
2026-07-24 08:52:02 +10:00
parent 413619857c
commit c2c5679cad
6 changed files with 16783 additions and 3 deletions
+3 -1
View File
@@ -33,7 +33,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
libpango1.0-dev libpulse-dev \ libpango1.0-dev libpulse-dev \
libavcodec-dev libavformat-dev libavutil-dev libswscale-dev \ libavcodec-dev libavformat-dev libavutil-dev libswscale-dev \
libcunit1-dev libtelnet-dev libwebsockets-dev \ libcunit1-dev libtelnet-dev libwebsockets-dev \
uuid-dev freerdp3-dev \ uuid-dev freerdp3-dev libspice-client-glib-2.0-dev \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
WORKDIR /build WORKDIR /build
@@ -58,10 +58,12 @@ RUN /build/guacamole-server/configure \
--with-ssh \ --with-ssh \
--with-vnc \ --with-vnc \
--with-rdp \ --with-rdp \
--with-spice \
--without-telnet \ --without-telnet \
--without-kubernetes \ --without-kubernetes \
--disable-guacenc \ --disable-guacenc \
--disable-guaclog \ --disable-guaclog \
--disable-guacclip \
--disable-static \ --disable-static \
&& make -j"$(nproc)" \ && make -j"$(nproc)" \
&& make install \ && make install \
+2
View File
@@ -103,10 +103,12 @@ build_guacd() {
--with-ssh \ --with-ssh \
--with-vnc \ --with-vnc \
--with-rdp \ --with-rdp \
--with-spice \
--without-telnet \ --without-telnet \
--without-kubernetes \ --without-kubernetes \
--disable-guacenc \ --disable-guacenc \
--disable-guaclog \ --disable-guaclog \
--disable-guacclip \
--disable-static --disable-static
info "Compiling guacd..." info "Compiling guacd..."
+3 -1
View File
@@ -49,7 +49,7 @@ cmd_deps() {
libpango1.0-dev libssh2-1-dev libssl-dev \ libpango1.0-dev libssh2-1-dev libssl-dev \
libvncserver-dev libtelnet-dev libwebsockets-dev \ libvncserver-dev libtelnet-dev libwebsockets-dev \
libpulse-dev libwebp-dev libcunit1-dev \ libpulse-dev libwebp-dev libcunit1-dev \
freerdp3-dev freerdp3-dev libspice-client-glib-2.0-dev
# uuid-dev is the standard package on Debian; fall back to libossp-uuid-dev # uuid-dev is the standard package on Debian; fall back to libossp-uuid-dev
sudo apt-get install -y uuid-dev 2>/dev/null || true sudo apt-get install -y uuid-dev 2>/dev/null || true
@@ -108,10 +108,12 @@ cmd_build_guacd() {
--with-ssh \ --with-ssh \
--with-vnc \ --with-vnc \
--with-rdp \ --with-rdp \
--with-spice \
--without-telnet \ --without-telnet \
--without-kubernetes \ --without-kubernetes \
--disable-guacenc \ --disable-guacenc \
--disable-guaclog \ --disable-guaclog \
--disable-guacclip \
--disable-static --disable-static
fi fi
+3 -1
View File
@@ -74,7 +74,7 @@ install_deps() {
libpango1.0-dev libpulse-dev \ libpango1.0-dev libpulse-dev \
libavcodec-dev libavformat-dev libavutil-dev libswscale-dev \ libavcodec-dev libavformat-dev libavutil-dev libswscale-dev \
libcunit1-dev libtelnet-dev libwebsockets-dev \ libcunit1-dev libtelnet-dev libwebsockets-dev \
freerdp3-dev freerdp3-dev libspice-client-glib-2.0-dev
# uuid-dev (Debian standard) or fallback # uuid-dev (Debian standard) or fallback
apt-get install -y uuid-dev 2>/dev/null || apt-get install -y libossp-uuid-dev || true apt-get install -y uuid-dev 2>/dev/null || apt-get install -y libossp-uuid-dev || true
@@ -177,10 +177,12 @@ build_guacd() {
--with-ssh \ --with-ssh \
--with-vnc \ --with-vnc \
--with-rdp \ --with-rdp \
--with-spice \
--without-telnet \ --without-telnet \
--without-kubernetes \ --without-kubernetes \
--disable-guacenc \ --disable-guacenc \
--disable-guaclog \ --disable-guaclog \
--disable-guacclip \
--disable-static --disable-static
info "Compiling guacd..." info "Compiling guacd..."
File diff suppressed because it is too large Load Diff
+8
View File
@@ -141,6 +141,14 @@ Ported from [pletch/guacamole-server@b28bdac](https://github.com/pletch/guacamol
|------|-----| |------|-----|
| `src/protocols/rdp/channels/disp.c` | Round display dimensions down to mod-16 in `guac_rdp_disp_set_size()` | | `src/protocols/rdp/channels/disp.c` | Round display dimensions down to mod-16 in `guac_rdp_disp_set_size()` |
## 008-spice-protocol.patch
**Feature:** Adds native SPICE protocol support (`libguac-client-spice`), vendored from the upstream PR [apache/guacamole-server#688](https://github.com/apache/guacamole-server/pull/688) ([GUACAMOLE-261](https://issues.apache.org/jira/browse/GUACAMOLE-261)). Enables connecting to SPICE displays (e.g. Proxmox VE / QEMU consoles). Requires `libspice-client-glib-2.0-dev` (>= 0.38) at build time; guacd is configured `--with-spice`.
Vendored as the diff of the PR branch against its merge-base with our pinned guacd. The PR's incidental, non-SPICE change to `src/terminal/terminal.c` (SSH terminal keyboard-modifier handling) is **excluded** here: it is unrelated to SPICE and conflicted with our pinned base. The bundled `guacclip` tool is included in the source but not built (`--disable-guacclip`, matching how we treat guacenc/guaclog); see [sol1/rustguac#181](https://github.com/sol1/rustguac/issues/181) for a possible future clipboard-audit feature.
**Files patched:** new `src/protocols/spice/*` and `src/guacclip/*` trees, plus additive hooks in `configure.ac`, `Makefile.am`, `src/libguac/*` (protocol constants, user handlers, rect), and per-protocol `input.c`.
## Applying patches ## Applying patches
Patches are applied automatically by all build scripts (`build-deb.sh`, `build-rpm.sh`, `install.sh`, `dev.sh`, `Dockerfile`). To apply manually: Patches are applied automatically by all build scripts (`build-deb.sh`, `build-rpm.sh`, `install.sh`, `dev.sh`, `Dockerfile`). To apply manually: