| Version | EAPI | Keywords | Slot |
|---|---|---|---|
| 7-r1 | 8 | amd64 x86 | 0 |
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v3
EAPI=8
MODULES_OPTIONAL_IUSE="modules"
inherit cmake desktop linux-mod-r1 tmpfiles xdg
MY_PV="B${PV/_/-}"
DESCRIPTION="A low latency KVM FrameRelay implementation for guests with VGA PCI Passthrough"
HOMEPAGE="https://looking-glass.io https://github.com/gnif/LookingGlass"
SRC_URI="https://looking-glass.io/artifact/${MY_PV}/source -> ${P}.tar.gz
binary? ( https://looking-glass.io/artifact/${MY_PV}/host -> looking-glass-host-${PV}.zip )"
S="${WORKDIR}/${PN}-${MY_PV}"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="amd64 x86"
IUSE="binary gnome host iso obs opengl pipewire pulseaudio wayland X"
REQUIRED_USE="gnome? ( wayland ) iso? ( binary )"
RESTRICT="mirror"
PATCHES=(
"${FILESDIR}/as-root.patch"
"${FILESDIR}/hide-gcc-warning.patch"
)
RDEPEND="media-libs/fontconfig:1.0
media-libs/libglvnd
sys-libs/binutils-libs:=
x11-libs/libxkbcommon
obs? ( media-video/obs-studio )
opengl? ( virtual/opengl )
pipewire? ( media-video/pipewire:=
media-libs/libsamplerate )
pulseaudio? ( media-libs/libpulse
media-libs/libsamplerate )
X? ( x11-libs/libX11
x11-libs/libXi
x11-libs/libXfixes
x11-libs/libXScrnSaver
x11-libs/libXinerama
x11-libs/libXcursor
x11-libs/libXpresent )
wayland? ( dev-libs/wayland
gnome? ( gui-libs/libdecor ) )"
DEPEND="${RDEPEND}
app-emulation/spice-protocol
dev-libs/nettle[gmp]
wayland? ( dev-libs/wayland-protocols )"
BDEPEND="virtual/pkgconfig
iso? ( app-cdr/cdrtools )
wayland? ( dev-util/wayland-scanner )
app-alternatives/gzip
app-alternatives/tar
app-arch/unzip"
CONFIG_CHECK="~UIO"
src_unpack() {
unpack "${P}.tar.gz"
if use binary ; then
mkdir "looking-glass-host" || die
cd "looking-glass-host" || die
unpack "looking-glass-host-${PV}.zip"
fi
}
src_prepare() {
default
if use iso ; then
mkisofs -lJR -iso-level 4 -o "looking-glass-host-${MY_PV}.iso" "${WORKDIR}/looking-glass-host" \
|| die "mkisofs failed"
fi
# override warning
sed -i '1 i\#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"' \
host/platform/Linux/capture/pipewire/src/portal.c || die "sed failed"
sed -i \
's|\${OBS_PLUGIN_PREFIX}/\${CMAKE_PROJECT_NAME}/bin/\${OBS_PLUGIN_DIR}|\${CMAKE_INSTALL_LIBDIR}/obs-plugins|g' \
obs/CMakeLists.txt || die "sed failed"
for project in client$(usex host ' host' '')$(usex obs ' obs' '') ; do
CMAKE_USE_DIR="${S}/${project}"
cmake_prepare "$@"
done
}
src_configure() {
local mycmakeargs=(
-DENABLE_EGL=ON
-DENABLE_LIBDECOR="$(usex gnome)"
-DENABLE_OPENGL="$(usex opengl)"
-DENABLE_PIPEWIRE="$(usex pipewire)"
-DENABLE_PULSEAUDIO="$(usex pulseaudio)"
-DENABLE_WAYLAND="$(usex wayland)"
-DENABLE_X11="$(usex X)"
-DCMAKE_POLICY_VERSION_MINIMUM=3.5
)
for project in client$(usex host ' host' '')$(usex obs ' obs' '') ; do
CMAKE_USE_DIR="${S}/${project}"
BUILD_DIR="${CMAKE_USE_DIR}_build"
cmake_src_configure "$@"
done
set_arch_to_kernel
}
src_compile() {
for project in client$(usex host ' host' '')$(usex obs ' obs' '') ; do
CMAKE_USE_DIR="${S}/${project}"
BUILD_DIR="${CMAKE_USE_DIR}_build"
cmake_src_compile "$@"
done
local modlist=( kvmfr=misc:module )
local modargs=( KVER="${KV_FULL}" KDIR="${KV_OUT_DIR}" )
use modules && linux-mod-r1_src_compile
}
src_install() {
for project in client$(usex host ' host' '')$(usex obs ' obs' '') ; do
CMAKE_USE_DIR="${S}/${project}"
BUILD_DIR="${CMAKE_USE_DIR}_build"
cmake_src_install "$@"
done
newtmpfiles "${FILESDIR}"/looking-glass.tmpfile looking-glass.conf
newicon -s 128 "${S}"/resources/icon-128x128.png looking-glass-client.png
if use X && ! use wayland || ! use X && use wayland ; then
domenu "${FILESDIR}"/looking-glass.desktop
fi
if use X && use wayland ; then
domenu "${FILESDIR}/looking-glass-x.desktop"
domenu "${FILESDIR}/looking-glass-wayland.desktop"
fi
insinto /usr/share/looking-glass
use binary && doins "${WORKDIR}"/looking-glass-host/looking-glass-host-setup.exe
use iso && doins "looking-glass-host-${MY_PV}.iso"
use modules && linux-mod-r1_src_install
}
pkg_postinst() {
tmpfiles_process looking-glass.conf
xdg_pkg_postinst
use modules && linux-mod-r1_pkg_postinst
}
media-libs/fontconfig:1.0 media-libs/libglvnd sys-libs/binutils-libs:= x11-libs/libxkbcommon obs? ( media-video/obs-studio ) opengl? ( virtual/opengl ) pipewire? ( media-video/pipewire:= media-libs/libsamplerate ) pulseaudio? ( media-libs/libpulse media-libs/libsamplerate ) X? ( x11-libs/libX11 x11-libs/libXi x11-libs/libXfixes x11-libs/libXScrnSaver x11-libs/libXinerama x11-libs/libXcursor x11-libs/libXpresent ) wayland? ( dev-libs/wayland gnome? ( gui-libs/libdecor ) ) app-emulation/spice-protocol dev-libs/nettle[gmp] wayland? ( dev-libs/wayland-protocols )
media-libs/fontconfig:1.0 media-libs/libglvnd sys-libs/binutils-libs:= x11-libs/libxkbcommon obs? ( media-video/obs-studio ) opengl? ( virtual/opengl ) pipewire? ( media-video/pipewire:= media-libs/libsamplerate ) pulseaudio? ( media-libs/libpulse media-libs/libsamplerate ) X? ( x11-libs/libX11 x11-libs/libXi x11-libs/libXfixes x11-libs/libXScrnSaver x11-libs/libXinerama x11-libs/libXcursor x11-libs/libXpresent ) wayland? ( dev-libs/wayland gnome? ( gui-libs/libdecor ) )
virtual/pkgconfig iso? ( app-cdr/cdrtools ) wayland? ( dev-util/wayland-scanner ) app-alternatives/gzip app-alternatives/tar app-arch/unzip