diff mbox series

[bug#57655,2/5] gnu: webrtc-for-telegram-desktop: Update to a5fbc9.

Message ID y76wnae8yyk.wl-hako@ultrarare.space
State Accepted
Headers show
Series gnu: telegram-desktop: Update to 4.1.1. | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git-branch success View Git branch
cbaines/applying patch success View Laminar job
cbaines/issue success View issue

Commit Message

Hilton Chain Sept. 8, 2022, 12:57 a.m. UTC
* gnu/packages/telegram.scm (webrtc-for-telegram-desktop):
Update to a5fbc9123e056e611e69acf0ceb4252ddd838adb.
Use abseil-cpp-for-webrtc-for-telegram-desktop for abseil-cpp.
[patches]:
Add missing <cstdint.h> header.
Add flag for disabling X11.
[snippet]:
Don't keep these files: openh264, usrsctp, libvpx.
Remove use of bundled openh264.
[#:configure-flags]: Comment out.
[#:phases]:
Drop bundled libvpx.
Copy crc32c.
Use cmake tool for compilation and installation (and use ninja).
[inputs]:
Simplify.
Drop unneeded inputs.
Add external-sources variable for managing recursive checkouts.
Add crc32c.
[native-inputs]:
Add ninja.
Drop perl.
[propagated-inputs]: Move libraries also needed by telegram-desktop here from
inputs.
[license]: Update according to source tree updates.

* gnu/packages/patches/webrtc-for-telegram-desktop-add-missing-cstdint.patch:
New file.
* gnu/packages/patches/webrtc-for-telegram-desktop-allow-disabling-X11.patch:
New file.
* gnu/local.mk: Add patches.
---
 gnu/local.mk                                  |   2 +
 ...telegram-desktop-add-missing-cstdint.patch |  21 +++
 ...telegram-desktop-allow-disabling-X11.patch | 123 +++++++++++++
 gnu/packages/telegram.scm                     | 171 ++++++++++--------
 4 files changed, 242 insertions(+), 75 deletions(-)
 create mode 100644 gnu/packages/patches/webrtc-for-telegram-desktop-add-missing-cstdint.patch
 create mode 100644 gnu/packages/patches/webrtc-for-telegram-desktop-allow-disabling-X11.patch

--
2.37.2

Comments

Liliana Marie Prikler Sept. 8, 2022, 2:29 p.m. UTC | #1
Am Donnerstag, dem 08.09.2022 um 08:57 +0800 schrieb Hilton Chain:
> 
> * gnu/packages/telegram.scm (webrtc-for-telegram-desktop):
> Update to a5fbc9123e056e611e69acf0ceb4252ddd838adb.
> Use abseil-cpp-for-webrtc-for-telegram-desktop for abseil-cpp.
> [patches]:
> Add missing <cstdint.h> header.
> Add flag for disabling X11.
Mention the patches first in the ChangeLog, then you can just say "Add
[patch basename]".
> [snippet]:
> Don't keep these files: openh264, usrsctp, libvpx.
> Remove use of bundled openh264.
Can be shortened to "Remove bundled openh264, ..."
> [#:configure-flags]: Comment out.
> [#:phases]:
> Drop bundled libvpx.
You might want to do this in the snippet.
> Copy crc32c.
> Use cmake tool for compilation and installation (and use ninja).
You should still be able to produce Unix Makefiles with CMake.  If
ninja is really required, invoke it as ninja.
> [inputs]:
> Simplify.
> Drop unneeded inputs.
> Add external-sources variable for managing recursive checkouts.
> Add crc32c.
I think it's wiser to declare the external sources as variables, e.g.
(define libyuv-for-telegram-desktop (origin ...))
and then just refer to those variables in the post-unpack unpack step
via G-Expressions.
> [native-inputs]:
> Add ninja.
> Drop perl.
> [propagated-inputs]: Move libraries also needed by telegram-desktop
> here from
> inputs.
> [license]: Update according to source tree updates.
> 
> * gnu/packages/patches/webrtc-for-telegram-desktop-add-missing-
> cstdint.patch:
> New file.
> * gnu/packages/patches/webrtc-for-telegram-desktop-allow-disabling-
> X11.patch:
> New file.
> * gnu/local.mk: Add patches.
> ---
Please avoid gratuitous newlines in the ChangeLog.

>  gnu/local.mk                                  |   2 +
>  ...telegram-desktop-add-missing-cstdint.patch |  21 +++
>  ...telegram-desktop-allow-disabling-X11.patch | 123 +++++++++++++
>  gnu/packages/telegram.scm                     | 171 ++++++++++------
> --
>  4 files changed, 242 insertions(+), 75 deletions(-)
>  create mode 100644 gnu/packages/patches/webrtc-for-telegram-desktop-
> add-missing-cstdint.patch
>  create mode 100644 gnu/packages/patches/webrtc-for-telegram-desktop-
> allow-disabling-X11.patch
> 
> diff --git a/gnu/local.mk b/gnu/local.mk
> index 19102113c9..d0e5aeb125 100644
> --- a/gnu/local.mk
> +++ b/gnu/local.mk
> @@ -1966,6 +1966,8 @@ dist_patch_DATA
> =                                         \
>    %D%/packages/patches/warsow-qfusion-fix-bool-return-
> type.patch       \
>    %D%/packages/patches/webkitgtk-adjust-bubblewrap-paths.patch \
>    %D%/packages/patches/webrtc-audio-processing-big-
> endian.patch        \
> +  %D%/packages/patches/webrtc-for-telegram-desktop-add-missing-
> cstdint.patch \
> +  %D%/packages/patches/webrtc-for-telegram-desktop-allow-disabling-
> X11.patch \
>    %D%/packages/patches/websocketpp-fix-for-cmake-3.15.patch    \
>    %D%/packages/patches/widelands-add-missing-map-include.patch \
>    %D%/packages/patches/widelands-system-wide_minizip.patch     \
> diff --git a/gnu/packages/patches/webrtc-for-telegram-desktop-add-
> missing-cstdint.patch b/gnu/packages/patches/webrtc-for-telegram-
> desktop-add-missing-cstdint.patch
> new file mode 100644
> index 0000000000..9dee9cf8e3
> --- /dev/null
> +++ b/gnu/packages/patches/webrtc-for-telegram-desktop-add-missing-
> cstdint.patch
> @@ -0,0 +1,21 @@
> +From 86d2bcd7afb8706663d29e30f65863de5a626142 Mon Sep 17 00:00:00
> 2001
> +From: Xiretza <xiretza@xiretza.xyz>
> +Date: Sun, 15 May 2022 12:47:41 +0200
> +Subject: [PATCH] fix(h265_pps_parser): fix missing cstdint include
> +
> +---
> + src/common_video/h265/h265_pps_parser.h | 1 +
> + 1 file changed, 1 insertion(+)
> +
> +diff --git a/src/common_video/h265/h265_pps_parser.h
> b/src/common_video/h265/h265_pps_parser.h
> +index 28c95ea9..c180b1b9 100644
> +--- a/src/common_video/h265/h265_pps_parser.h
> ++++ b/src/common_video/h265/h265_pps_parser.h
> +@@ -12,6 +12,7 @@
> + #define COMMON_VIDEO_H265_PPS_PARSER_H_
> +
> + #include "absl/types/optional.h"
> ++#include <cstdint>
> +
> + namespace rtc {
> + class BitBuffer;
> diff --git a/gnu/packages/patches/webrtc-for-telegram-desktop-allow-
> disabling-X11.patch b/gnu/packages/patches/webrtc-for-telegram-
> desktop-allow-disabling-X11.patch
> new file mode 100644
> index 0000000000..977f72475f
> --- /dev/null
> +++ b/gnu/packages/patches/webrtc-for-telegram-desktop-allow-
> disabling-X11.patch
> @@ -0,0 +1,123 @@
> +Add -DTG_OWT_USE_X11
> +
> +Allows disabling X11 desktop capturing independently of pipewire
> support, for
> +the few people that run wayland without any X11 support whatsoever.
> +
> +This setup is untested, but supported by the GNI build system, see:
> +* src/modules/desktop_capture/BUILD.gn (option
> rtc_use_x11_extensions)
> +
> +Toggling the WEBRTC_USE_X11 define also affects some files under
> +src/modules/audio_device, but that falls under "X11 support",
> regardless...
> +
> +diff --git a/CMakeLists.txt b/CMakeLists.txt
> +index 2e081ae7..c269177b 100644
> +--- a/CMakeLists.txt
> ++++ b/CMakeLists.txt
> +@@ -24,13 +24,14 @@ endif()
> +
> + option(BUILD_SHARED_LIBS "Builds shared libraries instead of
> static." OFF)
> + option(TG_OWT_USE_PROTOBUF "Use protobuf to generate additional
> headers. Useful for packaged build." ${BUILD_SHARED_LIBS})
> ++cmake_dependent_option(TG_OWT_USE_X11 "Use X11 for desktop capture
> on non-Apple Unix."  ON "UNIX; NOT APPLE" OFF)
> + cmake_dependent_option(TG_OWT_USE_PIPEWIRE "Use pipewire for
> desktop capture." ON "UNIX; NOT APPLE" OFF)
> + cmake_dependent_option(TG_OWT_DLOPEN_PIPEWIRE "dlopen pipewire for
> desktop capture." ${not_packaged_build} TG_OWT_USE_PIPEWIRE OFF)
> + option(TG_OWT_BUILD_AUDIO_BACKENDS "Build webrtc audio backends."
> OFF)
> +
> + if (BUILD_SHARED_LIBS)
> +     set(CMAKE_POSITION_INDEPENDENT_CODE ON)
> +-    message(WARNING
> ++    message(DEBUG
> +         "tg_owt is a fork of Google's webrtc library and is
> developed by them as a static library without stable ABI in mind."
> +         "The feature of building tg_owt as a shared library is
> community maintained, it may and will break at any time without
> guarantee to work again."
> +         "Please reconsider your decision. Good luck."
> +@@ -96,6 +97,10 @@ endif()
> + add_library(tg_owt)
> + init_target(tg_owt)
> +
> ++if (TG_OWT_USE_X11)
> ++    link_x11(tg_owt)
> ++endif()
> ++
> + if (TG_OWT_USE_PIPEWIRE)
> +     if (TG_OWT_DLOPEN_PIPEWIRE)
> +         include(cmake/generate_stubs.cmake)
> +@@ -188,10 +193,6 @@ endif()
> + include(cmake/libwebrtcbuild.cmake)
> + target_link_libraries(tg_owt PUBLIC tg_owt::libwebrtcbuild)
> +
> +-if (UNIX AND NOT APPLE)
> +-    link_x11(tg_owt)
> +-endif()
> +-
> + function(add_sublibrary postfix)
> +     add_library(tg_owt_${postfix} OBJECT)
> +     init_feature_target(tg_owt_${postfix} ${postfix})
> +@@ -2369,6 +2370,39 @@ if (NOT TG_OWT_USE_PROTOBUF)
> +     )
> + endif()
> +
> ++if (NOT TG_OWT_USE_X11)
> ++    remove_target_sources(tg_owt ${webrtc_loc}
> ++        # src/modules/desktop_capture/BUILD.gn
> (rtc_use_x11_extensions)
> ++       
> modules/desktop_capture/linux/x11/mouse_cursor_monitor_x11.cc
> ++       
> modules/desktop_capture/linux/x11/mouse_cursor_monitor_x11.h
> ++        modules/desktop_capture/linux/x11/screen_capturer_x11.cc
> ++        modules/desktop_capture/linux/x11/screen_capturer_x11.h
> ++        modules/desktop_capture/linux/x11/shared_x_display.cc
> ++        modules/desktop_capture/linux/x11/shared_x_display.h
> ++        modules/desktop_capture/linux/x11/window_capturer_x11.cc
> ++        modules/desktop_capture/linux/x11/window_capturer_x11.h
> ++        modules/desktop_capture/linux/x11/window_finder_x11.cc
> ++        modules/desktop_capture/linux/x11/window_finder_x11.h
> ++        modules/desktop_capture/linux/x11/window_list_utils.cc
> ++        modules/desktop_capture/linux/x11/window_list_utils.h
> ++        modules/desktop_capture/linux/x11/x_atom_cache.cc
> ++        modules/desktop_capture/linux/x11/x_atom_cache.h
> ++        modules/desktop_capture/linux/x11/x_error_trap.cc
> ++        modules/desktop_capture/linux/x11/x_error_trap.h
> ++        modules/desktop_capture/linux/x11/x_server_pixel_buffer.cc
> ++        modules/desktop_capture/linux/x11/x_server_pixel_buffer.h
> ++        modules/desktop_capture/linux/x11/x_window_property.cc
> ++        modules/desktop_capture/linux/x11/x_window_property.h
> ++
> ++        # screen_drawer_linux.cc depends on x11, rest are revdeps
> ++        modules/desktop_capture/screen_drawer.cc
> ++        modules/desktop_capture/screen_drawer.h
> ++        modules/desktop_capture/screen_drawer_linux.cc
> ++        modules/desktop_capture/screen_drawer_lock_posix.cc
> ++        modules/desktop_capture/screen_drawer_lock_posix.h
> ++    )
> ++endif()
> ++
> + if (NOT TG_OWT_USE_PIPEWIRE)
> +     remove_target_sources(tg_owt ${webrtc_loc}
> +        
> modules/desktop_capture/linux/wayland/base_capturer_pipewire.cc
> +diff --git a/cmake/libwebrtcbuild.cmake b/cmake/libwebrtcbuild.cmake
> +index 4d037f4b..388b7aa9 100644
> +--- a/cmake/libwebrtcbuild.cmake
> ++++ b/cmake/libwebrtcbuild.cmake
> +@@ -29,6 +29,13 @@ INTERFACE
> +     BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=0
> + )
> +
> ++if (TG_OWT_USE_X11)
> ++    target_compile_definitions(libwebrtcbuild
> ++    INTERFACE
> ++        WEBRTC_USE_X11
> ++    )
> ++endif()
> ++
> + if (TG_OWT_USE_PIPEWIRE)
> +     target_compile_definitions(libwebrtcbuild
> +     INTERFACE
> +@@ -65,11 +72,6 @@ else()
> +         INTERFACE
> +             WEBRTC_MAC
> +         )
> +-    else()
> +-        target_compile_definitions(libwebrtcbuild
> +-        INTERFACE
> +-            WEBRTC_USE_X11
> +-        )
> +     endif()
> +
> +     if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
> diff --git a/gnu/packages/telegram.scm b/gnu/packages/telegram.scm
> index 25d6a3e226..d339bae017 100644
> --- a/gnu/packages/telegram.scm
> +++ b/gnu/packages/telegram.scm
> @@ -30,6 +30,7 @@ (define-module (gnu packages telegram)
>    #:use-module (gnu packages digest)
>    #:use-module (gnu packages fcitx)
>    #:use-module (gnu packages fcitx5)
> +  #:use-module (gnu packages gl)
>    #:use-module (gnu packages glib)
>    #:use-module (gnu packages gnome)
>    #:use-module (gnu packages gnupg)
> @@ -43,6 +44,7 @@ (define-module (gnu packages telegram)
>    #:use-module (gnu packages linux)
>    #:use-module (gnu packages lxqt)
>    #:use-module (gnu packages lua)
> +  #:use-module (gnu packages ninja)
>    #:use-module (gnu packages perl)
>    #:use-module (gnu packages pkg-config)
>    #:use-module (gnu packages protobuf)
> @@ -58,11 +60,13 @@ (define-module (gnu packages telegram)
>    #:use-module (gnu packages tls)
>    #:use-module (gnu packages video)
>    #:use-module (gnu packages web)
> +  #:use-module (gnu packages xdisorg)
>    #:use-module (gnu packages xiph)
>    #:use-module (gnu packages xorg)
>    #:use-module ((guix licenses) #:prefix license:)
>    #:use-module (guix packages)
>    #:use-module (guix utils)
> +  #:use-module (guix gexp)
>    #:use-module (guix git-download)
>    #:use-module (guix build-system cmake)
>    #:use-module (guix build-system copy)
> @@ -83,9 +87,12 @@ (define-public abseil-cpp-for-webrtc-for-telegram-
> desktop
>            ((#:configure-flags flags)
>             `(cons* "-DCMAKE_CXX_STANDARD=17" ,flags))))))))
> 
> +;; NOTE: Here's Telegram Desktop's official build guide.
> +;;
> https://github.com/telegramdesktop/tdesktop/wiki/The-Packaged-Building-Mode
>  (define-public webrtc-for-telegram-desktop
> -  (let ((commit "91d836dc84a16584c6ac52b36c04c0de504d9c34")
> -        (revision "166"))
> +  (let ((abseil-cpp abseil-cpp-for-webrtc-for-telegram-desktop)
> +        (commit "a5fbc9123e056e611e69acf0ceb4252ddd838adb")
> +        (revision "167"))
>      (hidden-package
>       (package
>         (name "webrtc-for-telegram-desktop")
> @@ -96,94 +103,110 @@ (define-public webrtc-for-telegram-desktop
>            (method git-fetch)
>            (uri
>             (git-reference
> -            (url "https://github.com/desktop-app/tg_owt.git")
> +            (url "https://github.com/desktop-app/tg_owt")
>              (commit commit)))
>            (file-name
>             (git-file-name name version))
>            (sha256
> -           (base32
> "0plwdp6xgxi27hif5j7kpq425cidxyxbbga3z2f64dsninwy5p1x"))
> +           (base32
> "12qirihhabv46vn27dpw7dz0smlngb7wqjpypa9fm6k2zvf5py32"))
>            (modules '((guix build utils)
>                       (ice-9 ftw)
>                       (srfi srfi-1)))
> +          (patches
> +           (search-patches
> +            ;; https://github.com/desktop-app/tg_owt/pull/101
> +            "webrtc-for-telegram-desktop-add-missing-cstdint.patch"
> +            ;; Picked from Gentoo's repository.
> +            ;; TODO: There's also a patch for using standalone
> crc32c, we can
> +            ;; grab that patch once crc32c's been packaged.
> +            "webrtc-for-telegram-desktop-allow-disabling-
> X11.patch"))
>            (snippet
>             `(begin
>                (let ((keep
> -                     '( ;; Custom forks which are incompatible with
> the ones in Guix.
> -                       "abseil-cpp" "libsrtp" "openh264" "rnnoise"
> +                     '(;; Custom forks which are incompatible with
> the ones in Guix.
> +                       "abseil-cpp" "libsrtp" "rnnoise"
>                         ;; Not available in Guix.
> -                       "pffft" "usrsctp"
> -                       ;; Has cmake support files for libvpx input.
> -                       "libvpx")))
> +                       "pffft")))
>                  (with-directory-excursion "src/third_party"
>                    (for-each delete-file-recursively
>                              (lset-difference string=?
>                                               (scandir ".")
> -                                             (cons* "." ".."
> keep))))
> -                #t)))))
> +                                             (cons* "." ".."
> keep)))))
> +              ;; Force using standalone openh264.
> +              (substitute* "CMakeLists.txt"
> +               
> (("\\include\\(cmake\\/libopenh264\\.cmake\\)")""))))))
>         (build-system cmake-build-system)
>         (arguments
> -        `(#:tests? #f                   ; No target
> -          #:configure-flags
> -          (list
> -           "-DCMAKE_C_FLAGS=-fPIC"
> -           "-DCMAKE_CXX_FLAGS=-fPIC")
> -          #:phases
> -          (modify-phases %standard-phases
> -            (add-after 'unpack 'copy-inputs
> -              (lambda* (#:key inputs outputs #:allow-other-keys)
> -                (let* ((libvpx-from (assoc-ref inputs "libvpx"))
> -                       (libyuv-from (assoc-ref inputs "libyuv"))
> -                       (libvpx-to (string-append (getcwd)
> -                                                
> "/src/third_party/libvpx/source/libvpx"))
> -                       (libyuv-to (string-append (getcwd)
> -                                                
> "/src/third_party/libyuv")))
> -                  (copy-recursively libvpx-from libvpx-to)
> -                  (copy-recursively libyuv-from libyuv-to))
> -                #t)))))
> -       (native-inputs
> -        `(("perl" ,perl)
> -          ("pkg-config" ,pkg-config)
> -          ("python" ,python-wrapper)
> -          ("yasm" ,yasm)))
> +        (list #:tests? #f                   ; No target
> +              ;; NOTE: Options commented are default values.
> +              ;; See also: comments in inputs.
> +              ;; #:configure-flags
> +              ;; #~'("-DTG_OWT_USE_PIPEWIRE=ON"
> +              ;;     "-DTG_OWT_USE_X11=ON"
> +              ;;     "-DTG_OWT_USE_PROTOBUF=ON")
> +              #:phases
> +              #~(modify-phases %standard-phases
> +                  (add-after 'unpack 'copy-inputs
> +                    (lambda* (#:key inputs outputs #:allow-other-
> keys)
> +                      (let* ((libyuv-from (assoc-ref inputs
> "libyuv"))
> +                             (crc32c-from (assoc-ref inputs
> "crc32c"))
> +                             (libyuv-to (string-append (getcwd)
> +                                                      
> "/src/third_party/libyuv"))
> +                             (crc32c-to (string-append (getcwd)
> +                                                      
> "/src/third_party/crc32c/src")))
> +                        (copy-recursively libyuv-from libyuv-to)
> +                        (copy-recursively crc32c-from crc32c-to))))
> +                  (replace 'build
> +                    (lambda* (#:key (make-flags '()) (parallel-
> build? #t)
> +                              #:allow-other-keys)
> +                      (apply invoke "cmake" "--build" "."
> +                             `(,@(if parallel-build?
> +                                     `("-j" ,(number->string
> (parallel-job-count)))
> +                                     '())
> +                               ,@make-flags))))
> +                  (replace 'install
> +                    (lambda* (#:key (make-flags '()) #:allow-other-
> keys)
> +                      (apply invoke "cmake" "--install" "." make-
> flags))))))
>         (inputs
> -        `(("alsa" ,alsa-lib)
> -          ("ffmpeg" ,ffmpeg)
> -          ("libjpeg" ,libjpeg-turbo)
> -          ("glib" ,glib)
> -          ("libvpx"
> -           ,(origin
> -              (method git-fetch)
> -              (uri
> -               (git-reference
> -                (url
> "https://chromium.googlesource.com/webm/libvpx")
> -                (commit
> "5b63f0f821e94f8072eb483014cfc33b05978bb9")))
> -              (file-name
> -               (git-file-name "libvpx-for-webrtc-for-telegram-
> desktop" version))
> -              (sha256
> -               (base32
> "1psvxaddihlw1k5n0anxif3qli6zyw2sa2ywn6mkb8six9myrp68"))))
> -          ("libyuv"
> -           ,(origin
> -              (method git-fetch)
> -              (uri
> -               (git-reference
> -                (url
> "https://chromium.googlesource.com/libyuv/libyuv")
> -                (commit
> "ad890067f661dc747a975bc55ba3767fe30d4452")))
> -              (file-name
> -               (git-file-name "libyuv-for-webrtc-for-telegram-
> desktop" version))
> -              (sha256
> -               (base32
> "01knnk4h247rq536097n9n3s3brxlbby3nv3ppdgsqfda3k159ll"))))
> -          ("libxcomposite" ,libxcomposite)
> -          ("libxdamage" ,libxdamage)
> -          ("libxrender" ,libxrender)
> -          ("libxrandr" ,libxrandr)
> -          ("openssl" ,openssl)
> -          ("opus" ,opus)
> -          ("pipewire" ,pipewire)
> -          ("protobuf" ,protobuf)
> -          ("pulseaudio" ,pulseaudio)
> -          ("x11" ,libx11)
> -          ("xext" ,libxext)
> -          ("xtst" ,libxtst)))
> +        (let ((external-sources
> +               `(("libyuv"
> +                  ,(origin
> +                     (method git-fetch)
> +                     (uri (git-reference
> +                           (url
> "https://chromium.googlesource.com/libyuv/libyuv")
> +                           (commit
> "ad890067f661dc747a975bc55ba3767fe30d4452")))
> +                     (file-name
> +                      (git-file-name "libyuv-for-webrtc-for-
> telegram-desktop" version))
> +                     (sha256
> +                      (base32
> "01knnk4h247rq536097n9n3s3brxlbby3nv3ppdgsqfda3k159ll"))))
> +                 ("crc32c"
> +                  ,(origin
> +                     (method git-fetch)
> +                     (uri (git-reference
> +                           (url "https://github.com/google/crc32c")
> +                           (commit
> "21fc8ef30415a635e7351ffa0e5d5367943d4a94")))
> +                     (file-name
> +                      (git-file-name "crc32c-for-webrtc-for-
> telegram-desktop" version))
> +                     (sha256
> +                      (base32
> "0cddf8z7v33gfb2k60lkzwa97g20m1v81cnvllm3q9ylpnx8g6f4")))))))
> +          (modify-inputs external-sources
> +            (prepend openh264           ;Required
> +                     protobuf           ;TG_OWT_USE_PROTOBUF
> +                     glib               ;TG_OWT_USE_PIPEWIRE
> +                     libdrm
> +                     libglvnd
> +                     mesa
> +                     pipewire-0.3
> +                     libxcomposite      ;TG_OWT_USE_X11
> +                     libxdamage
> +                     libxext
> +                     libxfixes
> +                     libxrandr
> +                     libxrender
> +                     libxtst))))
> +       (native-inputs (list ninja python-wrapper pkg-config yasm))
> +       (propagated-inputs
> +        (list abseil-cpp ffmpeg libjpeg-turbo libvpx openssl opus))
Avoid propagating inputs.  Instead patch invocations where needed.
>         (synopsis "WebRTC support for Telegram Desktop")
>         (description "WebRTC-for-Telegram-Desktop is a custom WebRTC
> fork by
>  Telegram project, for its use in telegram desktop client.")
> @@ -194,13 +217,11 @@ (define-public webrtc-for-telegram-desktop
>           license:asl2.0
>           ;; LibYuv
>           (license:non-copyleft
> "file:///src/third_party/libyuv/LICENSE")
> -         ;; OpenH264
> -         license:bsd-2
>           ;; PFFFT
>           (license:non-copyleft
> "file:///src/third_party/pffft/LICENSE")
>           ;; RnNoise
>           license:gpl3
> -         ;; LibSRTP, LibVPx, UsrSCTP and Others
> +         ;; LibSRTP, Crc32c and Others
>           license:bsd-3))))))
> 
>  (define-public rlottie-for-telegram-desktop
> --
> 2.37.2
> 
Cheers
diff mbox series

Patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 19102113c9..d0e5aeb125 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1966,6 +1966,8 @@  dist_patch_DATA =						\
   %D%/packages/patches/warsow-qfusion-fix-bool-return-type.patch	\
   %D%/packages/patches/webkitgtk-adjust-bubblewrap-paths.patch	\
   %D%/packages/patches/webrtc-audio-processing-big-endian.patch	\
+  %D%/packages/patches/webrtc-for-telegram-desktop-add-missing-cstdint.patch \
+  %D%/packages/patches/webrtc-for-telegram-desktop-allow-disabling-X11.patch \
   %D%/packages/patches/websocketpp-fix-for-cmake-3.15.patch	\
   %D%/packages/patches/widelands-add-missing-map-include.patch	\
   %D%/packages/patches/widelands-system-wide_minizip.patch	\
diff --git a/gnu/packages/patches/webrtc-for-telegram-desktop-add-missing-cstdint.patch b/gnu/packages/patches/webrtc-for-telegram-desktop-add-missing-cstdint.patch
new file mode 100644
index 0000000000..9dee9cf8e3
--- /dev/null
+++ b/gnu/packages/patches/webrtc-for-telegram-desktop-add-missing-cstdint.patch
@@ -0,0 +1,21 @@ 
+From 86d2bcd7afb8706663d29e30f65863de5a626142 Mon Sep 17 00:00:00 2001
+From: Xiretza <xiretza@xiretza.xyz>
+Date: Sun, 15 May 2022 12:47:41 +0200
+Subject: [PATCH] fix(h265_pps_parser): fix missing cstdint include
+
+---
+ src/common_video/h265/h265_pps_parser.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/common_video/h265/h265_pps_parser.h b/src/common_video/h265/h265_pps_parser.h
+index 28c95ea9..c180b1b9 100644
+--- a/src/common_video/h265/h265_pps_parser.h
++++ b/src/common_video/h265/h265_pps_parser.h
+@@ -12,6 +12,7 @@
+ #define COMMON_VIDEO_H265_PPS_PARSER_H_
+
+ #include "absl/types/optional.h"
++#include <cstdint>
+
+ namespace rtc {
+ class BitBuffer;
diff --git a/gnu/packages/patches/webrtc-for-telegram-desktop-allow-disabling-X11.patch b/gnu/packages/patches/webrtc-for-telegram-desktop-allow-disabling-X11.patch
new file mode 100644
index 0000000000..977f72475f
--- /dev/null
+++ b/gnu/packages/patches/webrtc-for-telegram-desktop-allow-disabling-X11.patch
@@ -0,0 +1,123 @@ 
+Add -DTG_OWT_USE_X11
+
+Allows disabling X11 desktop capturing independently of pipewire support, for
+the few people that run wayland without any X11 support whatsoever.
+
+This setup is untested, but supported by the GNI build system, see:
+* src/modules/desktop_capture/BUILD.gn (option rtc_use_x11_extensions)
+
+Toggling the WEBRTC_USE_X11 define also affects some files under
+src/modules/audio_device, but that falls under "X11 support", regardless...
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2e081ae7..c269177b 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -24,13 +24,14 @@ endif()
+
+ option(BUILD_SHARED_LIBS "Builds shared libraries instead of static." OFF)
+ option(TG_OWT_USE_PROTOBUF "Use protobuf to generate additional headers. Useful for packaged build." ${BUILD_SHARED_LIBS})
++cmake_dependent_option(TG_OWT_USE_X11 "Use X11 for desktop capture on non-Apple Unix."  ON "UNIX; NOT APPLE" OFF)
+ cmake_dependent_option(TG_OWT_USE_PIPEWIRE "Use pipewire for desktop capture." ON "UNIX; NOT APPLE" OFF)
+ cmake_dependent_option(TG_OWT_DLOPEN_PIPEWIRE "dlopen pipewire for desktop capture." ${not_packaged_build} TG_OWT_USE_PIPEWIRE OFF)
+ option(TG_OWT_BUILD_AUDIO_BACKENDS "Build webrtc audio backends." OFF)
+
+ if (BUILD_SHARED_LIBS)
+     set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+-    message(WARNING
++    message(DEBUG
+         "tg_owt is a fork of Google's webrtc library and is developed by them as a static library without stable ABI in mind."
+         "The feature of building tg_owt as a shared library is community maintained, it may and will break at any time without guarantee to work again."
+         "Please reconsider your decision. Good luck."
+@@ -96,6 +97,10 @@ endif()
+ add_library(tg_owt)
+ init_target(tg_owt)
+
++if (TG_OWT_USE_X11)
++    link_x11(tg_owt)
++endif()
++
+ if (TG_OWT_USE_PIPEWIRE)
+     if (TG_OWT_DLOPEN_PIPEWIRE)
+         include(cmake/generate_stubs.cmake)
+@@ -188,10 +193,6 @@ endif()
+ include(cmake/libwebrtcbuild.cmake)
+ target_link_libraries(tg_owt PUBLIC tg_owt::libwebrtcbuild)
+
+-if (UNIX AND NOT APPLE)
+-    link_x11(tg_owt)
+-endif()
+-
+ function(add_sublibrary postfix)
+     add_library(tg_owt_${postfix} OBJECT)
+     init_feature_target(tg_owt_${postfix} ${postfix})
+@@ -2369,6 +2370,39 @@ if (NOT TG_OWT_USE_PROTOBUF)
+     )
+ endif()
+
++if (NOT TG_OWT_USE_X11)
++    remove_target_sources(tg_owt ${webrtc_loc}
++        # src/modules/desktop_capture/BUILD.gn (rtc_use_x11_extensions)
++        modules/desktop_capture/linux/x11/mouse_cursor_monitor_x11.cc
++        modules/desktop_capture/linux/x11/mouse_cursor_monitor_x11.h
++        modules/desktop_capture/linux/x11/screen_capturer_x11.cc
++        modules/desktop_capture/linux/x11/screen_capturer_x11.h
++        modules/desktop_capture/linux/x11/shared_x_display.cc
++        modules/desktop_capture/linux/x11/shared_x_display.h
++        modules/desktop_capture/linux/x11/window_capturer_x11.cc
++        modules/desktop_capture/linux/x11/window_capturer_x11.h
++        modules/desktop_capture/linux/x11/window_finder_x11.cc
++        modules/desktop_capture/linux/x11/window_finder_x11.h
++        modules/desktop_capture/linux/x11/window_list_utils.cc
++        modules/desktop_capture/linux/x11/window_list_utils.h
++        modules/desktop_capture/linux/x11/x_atom_cache.cc
++        modules/desktop_capture/linux/x11/x_atom_cache.h
++        modules/desktop_capture/linux/x11/x_error_trap.cc
++        modules/desktop_capture/linux/x11/x_error_trap.h
++        modules/desktop_capture/linux/x11/x_server_pixel_buffer.cc
++        modules/desktop_capture/linux/x11/x_server_pixel_buffer.h
++        modules/desktop_capture/linux/x11/x_window_property.cc
++        modules/desktop_capture/linux/x11/x_window_property.h
++
++        # screen_drawer_linux.cc depends on x11, rest are revdeps
++        modules/desktop_capture/screen_drawer.cc
++        modules/desktop_capture/screen_drawer.h
++        modules/desktop_capture/screen_drawer_linux.cc
++        modules/desktop_capture/screen_drawer_lock_posix.cc
++        modules/desktop_capture/screen_drawer_lock_posix.h
++    )
++endif()
++
+ if (NOT TG_OWT_USE_PIPEWIRE)
+     remove_target_sources(tg_owt ${webrtc_loc}
+         modules/desktop_capture/linux/wayland/base_capturer_pipewire.cc
+diff --git a/cmake/libwebrtcbuild.cmake b/cmake/libwebrtcbuild.cmake
+index 4d037f4b..388b7aa9 100644
+--- a/cmake/libwebrtcbuild.cmake
++++ b/cmake/libwebrtcbuild.cmake
+@@ -29,6 +29,13 @@ INTERFACE
+     BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=0
+ )
+
++if (TG_OWT_USE_X11)
++    target_compile_definitions(libwebrtcbuild
++    INTERFACE
++        WEBRTC_USE_X11
++    )
++endif()
++
+ if (TG_OWT_USE_PIPEWIRE)
+     target_compile_definitions(libwebrtcbuild
+     INTERFACE
+@@ -65,11 +72,6 @@ else()
+         INTERFACE
+             WEBRTC_MAC
+         )
+-    else()
+-        target_compile_definitions(libwebrtcbuild
+-        INTERFACE
+-            WEBRTC_USE_X11
+-        )
+     endif()
+
+     if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
diff --git a/gnu/packages/telegram.scm b/gnu/packages/telegram.scm
index 25d6a3e226..d339bae017 100644
--- a/gnu/packages/telegram.scm
+++ b/gnu/packages/telegram.scm
@@ -30,6 +30,7 @@  (define-module (gnu packages telegram)
   #:use-module (gnu packages digest)
   #:use-module (gnu packages fcitx)
   #:use-module (gnu packages fcitx5)
+  #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
@@ -43,6 +44,7 @@  (define-module (gnu packages telegram)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lxqt)
   #:use-module (gnu packages lua)
+  #:use-module (gnu packages ninja)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages protobuf)
@@ -58,11 +60,13 @@  (define-module (gnu packages telegram)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages video)
   #:use-module (gnu packages web)
+  #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xorg)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system copy)
@@ -83,9 +87,12 @@  (define-public abseil-cpp-for-webrtc-for-telegram-desktop
           ((#:configure-flags flags)
            `(cons* "-DCMAKE_CXX_STANDARD=17" ,flags))))))))

+;; NOTE: Here's Telegram Desktop's official build guide.
+;; https://github.com/telegramdesktop/tdesktop/wiki/The-Packaged-Building-Mode
 (define-public webrtc-for-telegram-desktop
-  (let ((commit "91d836dc84a16584c6ac52b36c04c0de504d9c34")
-        (revision "166"))
+  (let ((abseil-cpp abseil-cpp-for-webrtc-for-telegram-desktop)
+        (commit "a5fbc9123e056e611e69acf0ceb4252ddd838adb")
+        (revision "167"))
     (hidden-package
      (package
        (name "webrtc-for-telegram-desktop")
@@ -96,94 +103,110 @@  (define-public webrtc-for-telegram-desktop
           (method git-fetch)
           (uri
            (git-reference
-            (url "https://github.com/desktop-app/tg_owt.git")
+            (url "https://github.com/desktop-app/tg_owt")
             (commit commit)))
           (file-name
            (git-file-name name version))
           (sha256
-           (base32 "0plwdp6xgxi27hif5j7kpq425cidxyxbbga3z2f64dsninwy5p1x"))
+           (base32 "12qirihhabv46vn27dpw7dz0smlngb7wqjpypa9fm6k2zvf5py32"))
           (modules '((guix build utils)
                      (ice-9 ftw)
                      (srfi srfi-1)))
+          (patches
+           (search-patches
+            ;; https://github.com/desktop-app/tg_owt/pull/101
+            "webrtc-for-telegram-desktop-add-missing-cstdint.patch"
+            ;; Picked from Gentoo's repository.
+            ;; TODO: There's also a patch for using standalone crc32c, we can
+            ;; grab that patch once crc32c's been packaged.
+            "webrtc-for-telegram-desktop-allow-disabling-X11.patch"))
           (snippet
            `(begin
               (let ((keep
-                     '( ;; Custom forks which are incompatible with the ones in Guix.
-                       "abseil-cpp" "libsrtp" "openh264" "rnnoise"
+                     '(;; Custom forks which are incompatible with the ones in Guix.
+                       "abseil-cpp" "libsrtp" "rnnoise"
                        ;; Not available in Guix.
-                       "pffft" "usrsctp"
-                       ;; Has cmake support files for libvpx input.
-                       "libvpx")))
+                       "pffft")))
                 (with-directory-excursion "src/third_party"
                   (for-each delete-file-recursively
                             (lset-difference string=?
                                              (scandir ".")
-                                             (cons* "." ".." keep))))
-                #t)))))
+                                             (cons* "." ".." keep)))))
+              ;; Force using standalone openh264.
+              (substitute* "CMakeLists.txt"
+                (("\\include\\(cmake\\/libopenh264\\.cmake\\)")""))))))
        (build-system cmake-build-system)
        (arguments
-        `(#:tests? #f                   ; No target
-          #:configure-flags
-          (list
-           "-DCMAKE_C_FLAGS=-fPIC"
-           "-DCMAKE_CXX_FLAGS=-fPIC")
-          #:phases
-          (modify-phases %standard-phases
-            (add-after 'unpack 'copy-inputs
-              (lambda* (#:key inputs outputs #:allow-other-keys)
-                (let* ((libvpx-from (assoc-ref inputs "libvpx"))
-                       (libyuv-from (assoc-ref inputs "libyuv"))
-                       (libvpx-to (string-append (getcwd)
-                                                 "/src/third_party/libvpx/source/libvpx"))
-                       (libyuv-to (string-append (getcwd)
-                                                 "/src/third_party/libyuv")))
-                  (copy-recursively libvpx-from libvpx-to)
-                  (copy-recursively libyuv-from libyuv-to))
-                #t)))))
-       (native-inputs
-        `(("perl" ,perl)
-          ("pkg-config" ,pkg-config)
-          ("python" ,python-wrapper)
-          ("yasm" ,yasm)))
+        (list #:tests? #f                   ; No target
+              ;; NOTE: Options commented are default values.
+              ;; See also: comments in inputs.
+              ;; #:configure-flags
+              ;; #~'("-DTG_OWT_USE_PIPEWIRE=ON"
+              ;;     "-DTG_OWT_USE_X11=ON"
+              ;;     "-DTG_OWT_USE_PROTOBUF=ON")
+              #:phases
+              #~(modify-phases %standard-phases
+                  (add-after 'unpack 'copy-inputs
+                    (lambda* (#:key inputs outputs #:allow-other-keys)
+                      (let* ((libyuv-from (assoc-ref inputs "libyuv"))
+                             (crc32c-from (assoc-ref inputs "crc32c"))
+                             (libyuv-to (string-append (getcwd)
+                                                       "/src/third_party/libyuv"))
+                             (crc32c-to (string-append (getcwd)
+                                                       "/src/third_party/crc32c/src")))
+                        (copy-recursively libyuv-from libyuv-to)
+                        (copy-recursively crc32c-from crc32c-to))))
+                  (replace 'build
+                    (lambda* (#:key (make-flags '()) (parallel-build? #t)
+                              #:allow-other-keys)
+                      (apply invoke "cmake" "--build" "."
+                             `(,@(if parallel-build?
+                                     `("-j" ,(number->string (parallel-job-count)))
+                                     '())
+                               ,@make-flags))))
+                  (replace 'install
+                    (lambda* (#:key (make-flags '()) #:allow-other-keys)
+                      (apply invoke "cmake" "--install" "." make-flags))))))
        (inputs
-        `(("alsa" ,alsa-lib)
-          ("ffmpeg" ,ffmpeg)
-          ("libjpeg" ,libjpeg-turbo)
-          ("glib" ,glib)
-          ("libvpx"
-           ,(origin
-              (method git-fetch)
-              (uri
-               (git-reference
-                (url "https://chromium.googlesource.com/webm/libvpx")
-                (commit "5b63f0f821e94f8072eb483014cfc33b05978bb9")))
-              (file-name
-               (git-file-name "libvpx-for-webrtc-for-telegram-desktop" version))
-              (sha256
-               (base32 "1psvxaddihlw1k5n0anxif3qli6zyw2sa2ywn6mkb8six9myrp68"))))
-          ("libyuv"
-           ,(origin
-              (method git-fetch)
-              (uri
-               (git-reference
-                (url "https://chromium.googlesource.com/libyuv/libyuv")
-                (commit "ad890067f661dc747a975bc55ba3767fe30d4452")))
-              (file-name
-               (git-file-name "libyuv-for-webrtc-for-telegram-desktop" version))
-              (sha256
-               (base32 "01knnk4h247rq536097n9n3s3brxlbby3nv3ppdgsqfda3k159ll"))))
-          ("libxcomposite" ,libxcomposite)
-          ("libxdamage" ,libxdamage)
-          ("libxrender" ,libxrender)
-          ("libxrandr" ,libxrandr)
-          ("openssl" ,openssl)
-          ("opus" ,opus)
-          ("pipewire" ,pipewire)
-          ("protobuf" ,protobuf)
-          ("pulseaudio" ,pulseaudio)
-          ("x11" ,libx11)
-          ("xext" ,libxext)
-          ("xtst" ,libxtst)))
+        (let ((external-sources
+               `(("libyuv"
+                  ,(origin
+                     (method git-fetch)
+                     (uri (git-reference
+                           (url "https://chromium.googlesource.com/libyuv/libyuv")
+                           (commit "ad890067f661dc747a975bc55ba3767fe30d4452")))
+                     (file-name
+                      (git-file-name "libyuv-for-webrtc-for-telegram-desktop" version))
+                     (sha256
+                      (base32 "01knnk4h247rq536097n9n3s3brxlbby3nv3ppdgsqfda3k159ll"))))
+                 ("crc32c"
+                  ,(origin
+                     (method git-fetch)
+                     (uri (git-reference
+                           (url "https://github.com/google/crc32c")
+                           (commit "21fc8ef30415a635e7351ffa0e5d5367943d4a94")))
+                     (file-name
+                      (git-file-name "crc32c-for-webrtc-for-telegram-desktop" version))
+                     (sha256
+                      (base32 "0cddf8z7v33gfb2k60lkzwa97g20m1v81cnvllm3q9ylpnx8g6f4")))))))
+          (modify-inputs external-sources
+            (prepend openh264           ;Required
+                     protobuf           ;TG_OWT_USE_PROTOBUF
+                     glib               ;TG_OWT_USE_PIPEWIRE
+                     libdrm
+                     libglvnd
+                     mesa
+                     pipewire-0.3
+                     libxcomposite      ;TG_OWT_USE_X11
+                     libxdamage
+                     libxext
+                     libxfixes
+                     libxrandr
+                     libxrender
+                     libxtst))))
+       (native-inputs (list ninja python-wrapper pkg-config yasm))
+       (propagated-inputs
+        (list abseil-cpp ffmpeg libjpeg-turbo libvpx openssl opus))
        (synopsis "WebRTC support for Telegram Desktop")
        (description "WebRTC-for-Telegram-Desktop is a custom WebRTC fork by
 Telegram project, for its use in telegram desktop client.")
@@ -194,13 +217,11 @@  (define-public webrtc-for-telegram-desktop
          license:asl2.0
          ;; LibYuv
          (license:non-copyleft "file:///src/third_party/libyuv/LICENSE")
-         ;; OpenH264
-         license:bsd-2
          ;; PFFFT
          (license:non-copyleft "file:///src/third_party/pffft/LICENSE")
          ;; RnNoise
          license:gpl3
-         ;; LibSRTP, LibVPx, UsrSCTP and Others
+         ;; LibSRTP, Crc32c and Others
          license:bsd-3))))))

 (define-public rlottie-for-telegram-desktop