Files
tdesktop/snap/snapcraft.yaml
John Preston 0b7af2d638 Patch tlottie to fix broken sticker rendering
Stickers that showed only an outline, gift patterns without their dots
and gift models that were not drawn at all now render like in rlottie.
2026-09-17 12:38:30 +04:00

526 lines
15 KiB
YAML

name: telegram-desktop
adopt-info: telegram
icon: Telegram/Resources/art/icon512@2x.png
base: core24
grade: stable
confinement: strict
compression: lzo
apps:
telegram-desktop:
command: usr/bin/telegram-desktop
common-id: org.telegram.desktop
desktop: usr/share/applications/org.telegram.desktop.desktop
autostart: telegram-desktop_telegram-desktop.desktop
extensions: [gnome]
plugs:
- audio-playback
- audio-record
- bluez
- camera
- hardware-observe
- home
- network
- network-bind
- network-status
- removable-media
- u2f-devices
slots:
- mpris
layout:
/var/tmp:
type: tmpfs
parts:
telegram:
plugin: cmake
source: .
source-type: git
parse-info: [usr/share/metainfo/org.telegram.desktop.metainfo.xml]
build-environment:
- LDFLAGS: ${LDFLAGS:+$LDFLAGS} -Wl,--push-state,--no-as-needed,-ldav1d,--pop-state
build-packages:
- libboost-regex-dev
- libheif-dev
- libjxl-dev
- liblz4-dev
- libxcb-keysyms1-dev
- libxcb-record0-dev
cmake-generator: Ninja
cmake-parameters:
- -DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_PREFIX=/usr
- -DTDESKTOP_API_ID=611335
- -DTDESKTOP_API_HASH=d524b414d21f4d37f08684c1df41ac9c
override-pull: |
craftctl default
version_file=Telegram/build/version
version=$(sed -n "s/AppVersionStr[ ]\+\(.*\)\+/\1/p" $version_file)
beta=$(sed -n "s/BetaChannel[ ]\+\(.*\)\+/\1/p" $version_file)
if [ "$beta" != "0" ]; then
version="$version-beta"
fi
version="${version}$(git describe --tags | sed 's,^v[^-]\+,,')"
craftctl set version="$version"
override-build: |
craftctl default
"$CRAFT_PART_SRC/Telegram/build/minidebug.sh" "$CRAFT_PART_INSTALL/usr/bin/Telegram"
mv "$CRAFT_PART_INSTALL"/usr/bin/{Telegram,telegram-desktop}
APP_ID=org.telegram.desktop
sed -i "s/^Icon=$APP_ID$/Icon=snap.$CRAFT_PROJECT_NAME./g" "$CRAFT_PART_INSTALL/usr/share/applications/$APP_ID.desktop"
for i in $(find "$CRAFT_PART_INSTALL/usr/share/icons" -name "$APP_ID*.svg" -o -name "$APP_ID*.png"); do
PREFIXED="$(dirname "$i")/snap.$CRAFT_PROJECT_NAME.$(basename "$i" | sed "s/$APP_ID//")"
mv "$i" "$PREFIXED"
DEST="$(echo "$PREFIXED" | sed 's@usr/share@meta/gui@')"
DESTDIR="$(dirname "$DEST")"
mkdir -p "$DESTDIR"
RELATIVE="$(realpath -s --relative-to="$DESTDIR" "$PREFIXED")"
ln -sfn "$RELATIVE" "$DEST"
done
after:
- ada
- avif
- ffmpeg
- minizip
- mozjpeg
- openal
- openssl
- qt
- rnnoise
- tde2e
- tlottie
- webrtc
pkgs:
plugin: nil
stage-packages:
- gstreamer1.0-fdkaac
- gstreamer1.0-plugins-bad
- libgeoclue-2-0
- libopenh264-7
- libxcb-cursor0
- libxcb-record0
stage:
- ./usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/gstreamer-1.0/libgstde265.so
- ./usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/gstreamer-1.0/libgstfdkaac.so
- ./usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/gstreamer-1.0/libgstopenh264.so
- ./usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/gstreamer-1.0/libgstsubenc.so
- ./usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/gstreamer-1.0/libgstva.so
- ./usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/gstreamer-1.0/libgstvideoparsersbad.so
- ./usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libfdk-aac.so*
- ./usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libgeoclue-2.so*
- ./usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libopenh264.so*
- ./usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libxcb-cursor.so*
- ./usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libxcb-record.so*
patches:
source: https://github.com/desktop-app/patches.git
source-depth: 1
source-commit: 519aaa084608fa6f9a2bfbd1959d133c44d94227
plugin: nil
override-pull: |
craftctl default
cp -r . "$CRAFT_STAGE/patches"
override-prime: |
rm -rf patches
ada:
source: https://github.com/ada-url/ada.git
source-depth: 1
source-tag: v3.2.4
plugin: cmake
cmake-generator: Ninja
cmake-parameters:
- -DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_PREFIX=/usr
- -DADA_TESTING=OFF
- -DADA_TOOLS=OFF
- -DADA_INCLUDE_URL_PATTERN=OFF
prime: [-./*]
avif:
source: https://github.com/AOMediaCodec/libavif.git
source-depth: 1
source-tag: v1.3.0
plugin: cmake
build-packages:
- libdav1d-dev
cmake-generator: Ninja
cmake-parameters:
- -DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_PREFIX=/usr
- -DBUILD_SHARED_LIBS=OFF
- -DAVIF_CODEC_DAV1D=SYSTEM
- -DAVIF_LIBYUV=OFF
prime: [-./*]
ffmpeg:
source: https://github.com/FFmpeg/FFmpeg.git
source-depth: 1
source-branch: n6.1.6
plugin: autotools
build-packages:
- nasm
- libdav1d-dev
- libopenh264-dev
- libopus-dev
- libvdpau-dev
- libvpx-dev
- libxv-dev
autotools-configure-parameters:
- --prefix=/usr
- --libdir=/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR
- --extra-cflags="-DCONFIG_SAFE_BITSTREAM_READER=1"
- --extra-cxxflags="-DCONFIG_SAFE_BITSTREAM_READER=1"
- --disable-debug
- --disable-programs
- --disable-doc
- --disable-network
- --disable-autodetect
- --disable-everything
- --enable-libdav1d
- --enable-libopenh264
- --enable-libopus
- --enable-libvpx
- --enable-vaapi
- --enable-vdpau
- --enable-xlib
- --enable-libdrm
- --enable-ffnvcodec
- --enable-nvdec
- --enable-cuvid
- --enable-protocol=file
- --enable-hwaccel=av1_vaapi
- --enable-hwaccel=av1_nvdec
- --enable-hwaccel=h264_vaapi
- --enable-hwaccel=h264_vdpau
- --enable-hwaccel=h264_nvdec
- --enable-hwaccel=hevc_vaapi
- --enable-hwaccel=hevc_vdpau
- --enable-hwaccel=hevc_nvdec
- --enable-hwaccel=mpeg2_vaapi
- --enable-hwaccel=mpeg2_vdpau
- --enable-hwaccel=mpeg2_nvdec
- --enable-hwaccel=mpeg4_vaapi
- --enable-hwaccel=mpeg4_vdpau
- --enable-hwaccel=mpeg4_nvdec
- --enable-hwaccel=vp8_vaapi
- --enable-hwaccel=vp8_nvdec
- --enable-decoder=aac
- --enable-decoder=aac_fixed
- --enable-decoder=aac_latm
- --enable-decoder=aasc
- --enable-decoder=ac3
- --enable-decoder=alac
- --enable-decoder=av1
- --enable-decoder=av1_cuvid
- --enable-decoder=eac3
- --enable-decoder=flac
- --enable-decoder=gif
- --enable-decoder=h264
- --enable-decoder=hevc
- --enable-decoder=libdav1d
- --enable-decoder=libvpx_vp8
- --enable-decoder=libvpx_vp9
- --enable-decoder=mp1
- --enable-decoder=mp1float
- --enable-decoder=mp2
- --enable-decoder=mp2float
- --enable-decoder=mp3
- --enable-decoder=mp3adu
- --enable-decoder=mp3adufloat
- --enable-decoder=mp3float
- --enable-decoder=mp3on4
- --enable-decoder=mp3on4float
- --enable-decoder=mpeg4
- --enable-decoder=msmpeg4v2
- --enable-decoder=msmpeg4v3
- --enable-decoder=opus
- --enable-decoder=pcm_alaw
- --enable-decoder=pcm_f32be
- --enable-decoder=pcm_f32le
- --enable-decoder=pcm_f64be
- --enable-decoder=pcm_f64le
- --enable-decoder=pcm_lxf
- --enable-decoder=pcm_mulaw
- --enable-decoder=pcm_s16be
- --enable-decoder=pcm_s16be_planar
- --enable-decoder=pcm_s16le
- --enable-decoder=pcm_s16le_planar
- --enable-decoder=pcm_s24be
- --enable-decoder=pcm_s24daud
- --enable-decoder=pcm_s24le
- --enable-decoder=pcm_s24le_planar
- --enable-decoder=pcm_s32be
- --enable-decoder=pcm_s32le
- --enable-decoder=pcm_s32le_planar
- --enable-decoder=pcm_s64be
- --enable-decoder=pcm_s64le
- --enable-decoder=pcm_s8
- --enable-decoder=pcm_s8_planar
- --enable-decoder=pcm_u16be
- --enable-decoder=pcm_u16le
- --enable-decoder=pcm_u24be
- --enable-decoder=pcm_u24le
- --enable-decoder=pcm_u32be
- --enable-decoder=pcm_u32le
- --enable-decoder=pcm_u8
- --enable-decoder=pcm_zork
- --enable-decoder=vorbis
- --enable-decoder=vp8
- --enable-decoder=wavpack
- --enable-decoder=wmalossless
- --enable-decoder=wmapro
- --enable-decoder=wmav1
- --enable-decoder=wmav2
- --enable-decoder=wmavoice
- --enable-encoder=aac
- --enable-encoder=libopenh264
- --enable-encoder=libopus
- --enable-encoder=pcm_s16le
- --enable-filter=atempo
- --enable-parser=aac
- --enable-parser=aac_latm
- --enable-parser=flac
- --enable-parser=gif
- --enable-parser=h264
- --enable-parser=hevc
- --enable-parser=mpeg4video
- --enable-parser=mpegaudio
- --enable-parser=opus
- --enable-parser=vorbis
- --enable-demuxer=aac
- --enable-demuxer=flac
- --enable-demuxer=gif
- --enable-demuxer=h264
- --enable-demuxer=hevc
- --enable-demuxer=matroska
- --enable-demuxer=m4v
- --enable-demuxer=mov
- --enable-demuxer=mp3
- --enable-demuxer=ogg
- --enable-demuxer=wav
- --enable-muxer=mp4
- --enable-muxer=ogg
- --enable-muxer=opus
- --enable-muxer=wav
override-pull: |
craftctl default
sed -i 's/disable ffnvcodec cuvid nvdec nvenc/:/g' configure
prime: [-./*]
after:
- nv-codec-headers
minizip:
source: https://github.com/madler/zlib.git
source-depth: 1
source-commit: e3dc0a85b7032e98380dec011bc8f2c2ee0d8fca
source-subdir: contrib/minizip
plugin: autotools
autotools-configure-parameters:
- --prefix=/usr
- --libdir=\${exec_prefix}/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR
- --disable-shared
prime: [-./*]
mozjpeg:
source: https://github.com/mozilla/mozjpeg.git
source-depth: 1
source-tag: v4.1.5
plugin: cmake
cmake-generator: Ninja
cmake-parameters:
- -DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_PREFIX=/usr
- -DCMAKE_POLICY_VERSION_MINIMUM=3.5
- -DENABLE_SHARED=OFF
- -DWITH_JPEG8=ON
- -DPNG_SUPPORTED=OFF
prime: [-./*]
openal:
source: https://github.com/kcat/openal-soft.git
source-depth: 1
source-tag: 1.24.3
plugin: cmake
build-packages:
- libpipewire-0.3-dev
cmake-generator: Ninja
cmake-parameters:
- -DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_PREFIX=/usr
- -DLIBTYPE=STATIC
- -DALSOFT_DLOPEN=OFF
- -DALSOFT_EXAMPLES=OFF
- -DALSOFT_UTILS=OFF
- -DALSOFT_INSTALL_CONFIG=OFF
- -DALSOFT_BACKEND_PIPEWIRE=OFF
prime: [-./*]
openssl:
source: https://github.com/openssl/openssl.git
source-depth: 1
source-tag: openssl-3.2.1
plugin: make
build-packages:
- perl
override-build: |
sed -i 's/$cmd $cmdflags -c -o/$cmd $cmdflags -g0 -c -o/' Configurations/unix-Makefile.tmpl
./config \
--prefix=/usr \
--openssldir=/etc/ssl \
--libdir=lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR \
no-shared no-tests no-dso
make -j"${CRAFT_PARALLEL_BUILD_COUNT}"
make DESTDIR="$CRAFT_PART_INSTALL" install_sw
prime: [-./*]
nv-codec-headers:
source: https://github.com/FFmpeg/nv-codec-headers.git
source-depth: 1
source-branch: n12.1.14.0
plugin: make
make-parameters:
- PREFIX=/usr
- LIBDIR=lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR
prime: [-./*]
qt:
source: https://github.com/qt/qt5.git
source-depth: 1
source-tag: v6.11.2
source-submodules:
- qtbase
- qtdeclarative
- qtimageformats
- qtshadertools
- qtsvg
- qtwayland
plugin: cmake
build-packages:
- libxcb-cursor-dev
- libxcb-glx0-dev
- libxcb-icccm4-dev
- libxcb-image0-dev
- libxcb-keysyms1-dev
- libxcb-randr0-dev
- libxcb-render-util0-dev
- libxcb-shape0-dev
- libxcb-sync-dev
- libxcb-util-dev
- libxcb-xfixes0-dev
- libxcb-xkb-dev
- libxkbcommon-x11-dev
cmake-generator: Ninja
cmake-parameters:
- -DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_PREFIX=/usr
- -DINSTALL_LIBDIR=/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR
- -DBUILD_SHARED_LIBS=OFF
- -DQT_QPA_PLATFORMS="wayland;xcb"
- -DFEATURE_eglfs=OFF
- -DINPUT_openssl=linked
override-pull: |
craftctl default
QT="$(grep 'set(QT_REPO_MODULE_VERSION' qtbase/.cmake.conf | sed -r 's/.*"(.*)".*/\1/')"
find $CRAFT_STAGE/patches/qtbase_${QT} -type f -print0 | sort -z | xargs -r0 git -C qtbase apply
find $CRAFT_STAGE/patches/qtwayland_${QT} -type f -print0 | sort -z | xargs -r0 git -C qtwayland apply
prime: [-./*]
after:
- mozjpeg
- openssl
- patches
rnnoise:
source: https://github.com/xiph/rnnoise.git
source-depth: 1
source-tag: v0.2
plugin: autotools
build-packages:
- wget
autotools-configure-parameters:
- --prefix=/usr
- --libdir=\${exec_prefix}/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR
- --disable-shared
- --disable-examples
- --disable-doc
override-pull: |
craftctl default
sed -i 's/os_support.h/common.h/g;s/OPUS_CLEAR/RNN_CLEAR/g' src/vec{,_neon}.h
prime: [-./*]
tde2e:
source: https://github.com/tdlib/td.git
source-depth: 1
source-commit: 51743dfd01dff6179e2d8f7095729caa4e2222e9
plugin: cmake
build-packages:
- gperf
cmake-generator: Ninja
cmake-parameters:
- -DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_PREFIX=/usr
- -DCMAKE_INSTALL_LIBDIR=lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR
- -DTD_E2E_ONLY=ON
prime: [-./*]
after:
- openssl
tlottie:
source: https://github.com/dkaraush/tlottie.git
source-depth: 1
source-commit: 31f1b542f88e7b4be9a01e749920d857535fc715
plugin: nil
build-packages:
- wget
override-pull: |
craftctl default
git apply "$CRAFT_STAGE/patches/tlottie.patch"
override-build: |
RUST_TOOLCHAIN=1.96.1
export RUSTUP_HOME="$CRAFT_PART_BUILD/rustup"
export CARGO_HOME="$CRAFT_PART_BUILD/cargo"
wget -O rustup-init.sh https://sh.rustup.rs
sh rustup-init.sh -y --no-modify-path --profile minimal --default-toolchain $RUST_TOOLCHAIN
rm rustup-init.sh
export RUSTUP_TOOLCHAIN=$RUST_TOOLCHAIN
export PATH="$CARGO_HOME/bin:$PATH"
cargo rustc --lib --release --locked \
--features c-api --crate-type staticlib \
-- --print native-static-libs
LIBDIR="$CRAFT_PART_INSTALL/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR"
INCLUDEDIR="$CRAFT_PART_INSTALL/usr/include/tlottie"
mkdir -p "$LIBDIR" "$INCLUDEDIR"
objcopy --strip-debug target/release/libtlottie.a "$LIBDIR/libtlottie.a"
cp include/tlottie.h "$INCLUDEDIR/tlottie.h"
prime: [-./*]
after:
- patches
webrtc:
source: https://github.com/desktop-app/tg_owt.git
source-depth: 1
source-commit: 26068e29bfa8d74a9dc9c8f7f94172fafbc262b8
plugin: cmake
build-packages:
- libopenh264-dev
- libopus-dev
- libpipewire-0.3-dev
- libvpx-dev
cmake-generator: Ninja
cmake-parameters:
- -DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_PREFIX=/usr
prime: [-./*]
after:
- ffmpeg
- mozjpeg
- openssl