From 04c71d02e0f1adf7da618a105f344aa424497cd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?= <francois-simon.fauteux-chapleau@savoirfairelinux.com> Date: Tue, 16 Apr 2024 13:53:26 -0400 Subject: [PATCH] snap: build PipeWire from source This is necessary because we use the core20 base snap, which is built from Ubuntu 20.04 and therefore doesn't have a recent enough version of PipeWire available by default. Change-Id: Id039ec446f4b3f0e89b9ec27f37f81cfd6b3587e --- .../gnu-linux/docker/Dockerfile_snap | 1 - .../gnu-linux/rules/snap/jami/snapcraft.yaml | 7 +++- .../scripts/install-pipewire-from-source.sh | 38 +++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100755 extras/packaging/gnu-linux/scripts/install-pipewire-from-source.sh diff --git a/extras/packaging/gnu-linux/docker/Dockerfile_snap b/extras/packaging/gnu-linux/docker/Dockerfile_snap index e9a59a486..2b32a044c 100644 --- a/extras/packaging/gnu-linux/docker/Dockerfile_snap +++ b/extras/packaging/gnu-linux/docker/Dockerfile_snap @@ -83,7 +83,6 @@ ENV PATH="/snap/bin:/snap/snapcraft/current/usr/bin:/snap/snapcraft/current/libe ENV SNAP="/snap/snapcraft/current" ENV SNAP_NAME="snapcraft" ENV SNAP_ARCH="amd64" -ENV DISABLE_PIPEWIRE=true ADD extras/packaging/gnu-linux/scripts/build-package-snap.sh /opt/build-package-snap.sh CMD ["/opt/build-package-snap.sh"] diff --git a/extras/packaging/gnu-linux/rules/snap/jami/snapcraft.yaml b/extras/packaging/gnu-linux/rules/snap/jami/snapcraft.yaml index c32cd20a6..b25655bcd 100644 --- a/extras/packaging/gnu-linux/rules/snap/jami/snapcraft.yaml +++ b/extras/packaging/gnu-linux/rules/snap/jami/snapcraft.yaml @@ -138,6 +138,10 @@ apps: autostart: jami.desktop common-id: net.jami.Jami desktop: usr/share/applications/jami.desktop + environment: + PIPEWIRE_CONFIG_NAME: "$SNAP/usr/share/pipewire/pipewire.conf" + PIPEWIRE_MODULE_DIR: "$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/pipewire-0.3" + SPA_PLUGIN_DIR: "$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/spa-0.2" slots: - dbus-jami - dbus-ring @@ -255,6 +259,8 @@ parts: sed -i -E 's|(tmpName) << (PACKAGE_NAME << "_shm_")|\1 << "snap.jami." << \2|' ./daemon/src/media/video/sinkclient.cpp sed -i -E 's|^Icon=.*|Icon=${SNAP}/usr/share/icons/hicolor/scalable/apps/jami.svg|' extras/data/jami.desktop override-build: | + $SNAPCRAFT_PART_BUILD/extras/packaging/gnu-linux/scripts/install-pipewire-from-source.sh + cd $SNAPCRAFT_PART_BUILD/daemon/contrib mkdir -p native cd native @@ -304,7 +310,6 @@ parts: - libswscale-dev - libva-dev - libvdpau-dev - - libpipewire-0.2-dev - libargon2-0-dev # opendht - libexpat1-dev - libjsoncpp-dev diff --git a/extras/packaging/gnu-linux/scripts/install-pipewire-from-source.sh b/extras/packaging/gnu-linux/scripts/install-pipewire-from-source.sh new file mode 100755 index 000000000..1d132181b --- /dev/null +++ b/extras/packaging/gnu-linux/scripts/install-pipewire-from-source.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +# The purpose of this script is to build PipeWire from source in a snap based on core20 / Ubuntu 20.04 +# It must be called in the "override-build" section of the relevant part in snapcraft.yaml + +set -e + +OLD_WD=$(pwd) +cd /tmp + +# Install PipeWire's build dependencies +apt-get install --yes gcc git libasound2-dev libdbus-1-dev libglib2.0-dev ninja-build pkg-config + +# Get a version of Meson that's recent enough to build PipeWire 1.0.5 (the one available via apt is too old) +wget -q https://github.com/mesonbuild/meson/releases/download/0.61.1/meson-0.61.1.tar.gz +echo "feb2cefb325b437dbf36146df7c6b87688ddff0b0205caa31dc64055c6da410c meson-0.61.1.tar.gz" | sha256sum --check +tar xzf meson-0.61.1.tar.gz + +# Build PipeWire 1.0.5 and install it in the /usr directory of the build environment +wget -q https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/1.0.5/pipewire-1.0.5.tar.gz +echo "c5a5de26d684a1a84060ad7b6131654fb2835e03fccad85059be92f8e3ffe993 pipewire-1.0.5.tar.gz" | sha256sum --check +tar xzf pipewire-1.0.5.tar.gz +cd pipewire-1.0.5 +../meson-0.61.1/meson.py setup builddir -Dsession-managers=media-session -Dalsa=disabled -Dprefix=/usr +../meson-0.61.1/meson.py compile -C builddir +../meson-0.61.1/meson.py install -C builddir + +# The files installed by the previous command are only for the "Build" step of the snap +# creation process (https://snapcraft.io/docs/how-snapcraft-builds). In order to ensure +# that PipeWire is installed in the final snap archive, we also need to copy all the +# required files under the $SNAPCRAFT_PART_INSTALL directory. +../meson-0.61.1/meson.py configure builddir -Dprefix=$SNAPCRAFT_PART_INSTALL/usr/ +../meson-0.61.1/meson.py install -C builddir + +# Cleanup +cd /tmp +rm -rf meson-0.61.1 meson-0.61.1.tar.gz pipewire-1.0.5 pipewire-1.0.5.tar.gz +cd $OLD_WD \ No newline at end of file -- GitLab