# Copyright 1999-2025 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # Ebuild also allows to download Windows host software as mountable .iso file. EAPI=8 MY_PN="LookingGlass" MY_PV="${PV//1_beta/B}" MY_PV="${MY_PV//_/-}" inherit cmake linux-mod-r1 desktop tmpfiles xdg DESCRIPTION="A low latency KVM FrameRelay implementation for guests with VGA PCI Passthrough" HOMEPAGE="https://looking-glass.io" SRC_URI="https://looking-glass.io/artifact/${MY_PV}/source -> ${PN}-${MY_PV}.tar.gz host? ( https://looking-glass.io/artifact/${MY_PV}/host -> ${PN}-${MY_PV}-host.zip )" S="${WORKDIR}/${PN}" LICENSE="GPL-2" SLOT="0" KEYWORDS="~amd64 ~x86" IUSE="gnome +host modules obs opengl pipewire pulseaudio wayland X" 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/wayland-protocols" BDEPEND="virtual/pkgconfig host? ( app-arch/unzip app-cdr/cdrtools ) wayland? ( dev-util/wayland-scanner )" CMAKE_USE_DIR="${S}"/client src_unpack() { for FILE in ${A}; do if [[ "${FILE}" == *".tar.gz" ]]; then # unpack source files unpack "${FILE}" mv "${WORKDIR}/${PN}-${MY_PV}" "${WORKDIR}/${PN}" fi if [[ "${FILE}" == *".zip" ]]; then # Extract the host exe file mkdir "${PN}-host" cd "${PN}-host" unpack "${FILE}" fi done } src_prepare() { default if use host ; then # Host file comes as zip but we need it to be .iso in order to mount it in QEMU mkisofs -lJR -iso-level 4 -o "${PN}-host-${MY_PV}.iso" "${WORKDIR}/${PN}-host" \ || die "mkisofs failed" rm -R "${WORKDIR}/${PN}-host" fi # override warning sed -i '1 i\#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"' \ host/platform/Linux/capture/pipewire/src/portal.c || die "sed failed" for project in client$(usex host ' host' '')$(usex obs ' obs' '') ; do CMAKE_USE_DIR="${S}/${project}" cmake_src_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)" ) 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() { einstalldocs 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 #dobin "${BUILD_DIR}"/looking-glass-client newtmpfiles "${FILESDIR}"/looking-glass.tmpfile looking-glass.conf newicon -s 128 "${S}"/resources/icon-128x128.png looking-glass-client.png domenu "${FILESDIR}"/looking-glass.desktop if use host ; then insinto /usr/share/drivers/windows doins "${PN}-host-${MY_PV}.iso" dosym "${PN}-host-${MY_PV}.iso" "/usr/share/drivers/windows/${PN}-host.iso" fi use modules && linux-mod-r1_src_install } pkg_postinst() { tmpfiles_process looking-glass.conf xdg_pkg_postinst use modules && linux-mod-r1_pkg_postinst }