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