commit:     ee7cf00bca12059bb992ea9a97a8e73943b2cfff
Author:     Esteve Varela Colominas <esteve.varela <AT> gmail <DOT> com>
AuthorDate: Sun Jun 27 21:57:04 2021 +0000
Commit:     Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
CommitDate: Mon Jun 28 08:38:32 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ee7cf00b

media-libs/tg_owt: Bump to 0_pre20210626

Adds desktop capture and makes a return of several use flags including
alsa and pulseaudio, patched around to make sure they work.

Added a subslot, since the ABI of this package has broken, and requires
the rebuild of media-libs/libtgvoip before net-im/telegram-desktop can
be built...

Signed-off-by: Esteve Varela Colominas <esteve.varela <AT> gmail.com>
Signed-off-by: Georgy Yakovlev <gyakovlev <AT> gentoo.org>

 media-libs/tg_owt/Manifest                         |   1 +
 .../tg_owt-0_pre20210626-allow-disabling-X11.patch | 108 +++++++++++++++++++++
 ...wt-0_pre20210626-allow-disabling-pipewire.patch |  36 +++++++
 ...-0_pre20210626-allow-disabling-pulseaudio.patch |  90 +++++++++++++++++
 ...t-0_pre20210626-expose-set_allow_pipewire.patch |  16 +++
 media-libs/tg_owt/metadata.xml                     |   3 +
 media-libs/tg_owt/tg_owt-0_pre20210626.ebuild      | 104 ++++++++++++++++++++
 7 files changed, 358 insertions(+)

diff --git a/media-libs/tg_owt/Manifest b/media-libs/tg_owt/Manifest
index cb642761504..65e17f6b8a8 100644
--- a/media-libs/tg_owt/Manifest
+++ b/media-libs/tg_owt/Manifest
@@ -2,3 +2,4 @@ DIST libvpx-5b63f0f821e94f8072eb483014cfc33b05978bb9.tar.gz 
5337558 BLAKE2B 795f
 DIST libyuv-ad890067f661dc747a975bc55ba3767fe30d4452.tar.gz 473845 BLAKE2B 
664be51c166440e6b03fa98f65d907efc446800804058a5ea7fdf944e12cb1237a1487e83fbe9a2f1ce4c73521234e43632f921ad0333507737d81e1cb23ce8f
 SHA512 
f97529b80a786e2e92443caabebd6d85a42641e10c3d2940b0f69bedf3b8a96c69c3247abddd059c4ddd6f78107ab7214222a4267a559fc2086c8edf5ea1afbc
 DIST tg_owt-0_pre20210309.tar.gz 16159542 BLAKE2B 
354992fca17f6217daa7294a8b60aa96f16b1198a07c79599ce676770cde068bf3ebf83c3935613ab181d4f7f23abbf2e4dd3ba41988b7505f27f537ada87fc2
 SHA512 
eca2c249d4837f8564218ea969390579b7f07c40879a80249310d978ba6d8865b85ec12e324fdba92af2d0b9bd501f2328fad5475028211013239dc35f508bb0
 DIST tg_owt-0_pre20210422.tar.gz 16156802 BLAKE2B 
823248e31d7abc91402c32aa0f062f1a77a3d8c4ebf63b4e73a8f290a5691e002a6ec09a5b7ffed1087565b9a419646924030dfb3eb3d0d6aec8cfc51cf1bf73
 SHA512 
24b66840a54d102b96bc32636dc8b85d31f74b344244985be929db4e14b13ee60f1fbc43269526352064cee8066839c886fae1aff95276089ab60d0a14de9ec6
+DIST tg_owt-0_pre20210626.tar.gz 16264716 BLAKE2B 
de500e02789516527c814d0aba87cf1d0e772747f06acff7ac9295508c6e6bce1915cd3a703df618ff17ba8e04dc194538a6ef859fa85b301bb63eceab2c339a
 SHA512 
a5d10011c427d8685bcf0743c356ff8c58c3cad6c59ac2409298b30b15cb04233889a5ed0a18107ac5b3477eee96741fdc85176d4330c866e8e3329753be7d73

diff --git 
a/media-libs/tg_owt/files/tg_owt-0_pre20210626-allow-disabling-X11.patch 
b/media-libs/tg_owt/files/tg_owt-0_pre20210626-allow-disabling-X11.patch
new file mode 100644
index 00000000000..c6abf966046
--- /dev/null
+++ b/media-libs/tg_owt/files/tg_owt-0_pre20210626-allow-disabling-X11.patch
@@ -0,0 +1,108 @@
+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...
+
+--- tg_owt-91d836dc84a16584c6ac52b36c04c0de504d9c34.orig/CMakeLists.txt
++++ tg_owt-91d836dc84a16584c6ac52b36c04c0de504d9c34/CMakeLists.txt
+@@ -21,11 +21,13 @@
+ 
+ option(BUILD_SHARED_LIBS "Builds shared libraries instead of static." 
${TG_OWT_PACKAGED_BUILD})
+ option(TG_OWT_USE_PROTOBUF "Use protobuf to generate additional headers. 
Useful for packaged build." ${BUILD_SHARED_LIBS})
++option(TG_OWT_USE_X11 "Use X11 for desktop capture on non-Apple Unix." ON)
+ option(TG_OWT_USE_PIPEWIRE "Use pipewire for desktop capture on non-Apple 
Unix." ON)
+ option(TG_OWT_DLOPEN_PIPEWIRE "dlopen pipewire 0.3 for desktop capture on 
non-Apple Unix." ${not_packaged_build})
+ option(TG_OWT_BUILD_AUDIO_BACKENDS "Build webrtc audio backends." ON)
+ 
+ if (NOT UNIX OR APPLE)
++    set(TG_OWT_USE_X11 OFF)
+     set(TG_OWT_USE_PIPEWIRE OFF)
+ endif()
+ 
+@@ -87,6 +89,10 @@
+ add_library(tg_owt)
+ init_target(tg_owt)
+ 
++if (TG_OWT_USE_X11)
++    link_x11(tg_owt)
++endif()
++
+ if (TG_OWT_USE_PIPEWIRE)
+     link_glib(tg_owt)
+     if (TG_OWT_DLOPEN_PIPEWIRE)
+@@ -169,7 +175,6 @@
+ target_link_libraries(tg_owt PUBLIC tg_owt::libwebrtcbuild)
+ 
+ if (UNIX AND NOT APPLE)
+-    link_x11(tg_owt)
+ endif()
+ 
+ function(add_sublibrary postfix)
+@@ -2161,6 +2166,37 @@
+     )
+ endif()
+ 
++if (NOT TG_OWT_USE_X11)
++    remove_target_sources(tg_owt ${webrtc_loc}
++        modules/desktop_capture/linux/mouse_cursor_monitor_x11.cc
++        modules/desktop_capture/linux/mouse_cursor_monitor_x11.h
++        modules/desktop_capture/linux/screen_capturer_x11.cc
++        modules/desktop_capture/linux/screen_capturer_x11.h
++        modules/desktop_capture/linux/shared_x_display.cc
++        modules/desktop_capture/linux/shared_x_display.h
++        modules/desktop_capture/linux/window_capturer_x11.cc
++        modules/desktop_capture/linux/window_capturer_x11.h
++        modules/desktop_capture/linux/window_finder_x11.cc
++        modules/desktop_capture/linux/window_finder_x11.h
++        modules/desktop_capture/linux/window_list_utils.cc
++        modules/desktop_capture/linux/window_list_utils.h
++        modules/desktop_capture/linux/x_atom_cache.cc
++        modules/desktop_capture/linux/x_atom_cache.h
++        modules/desktop_capture/linux/x_error_trap.cc
++        modules/desktop_capture/linux/x_error_trap.h
++        modules/desktop_capture/linux/x_server_pixel_buffer.cc
++        modules/desktop_capture/linux/x_server_pixel_buffer.h
++        modules/desktop_capture/linux/x_window_property.cc
++        modules/desktop_capture/linux/x_window_property.h
++
++        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/base_capturer_pipewire.cc
+--- 
tg_owt-91d836dc84a16584c6ac52b36c04c0de504d9c34.orig/cmake/libwebrtcbuild.cmake
++++ tg_owt-91d836dc84a16584c6ac52b36c04c0de504d9c34/cmake/libwebrtcbuild.cmake
+@@ -27,6 +27,13 @@
+     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
+@@ -63,7 +70,6 @@
+     INTERFACE
+         WEBRTC_POSIX
+         WEBRTC_LINUX
+-        WEBRTC_USE_X11
+     )
+ endif()
+ 

diff --git 
a/media-libs/tg_owt/files/tg_owt-0_pre20210626-allow-disabling-pipewire.patch 
b/media-libs/tg_owt/files/tg_owt-0_pre20210626-allow-disabling-pipewire.patch
new file mode 100644
index 00000000000..9cc55585a56
--- /dev/null
+++ 
b/media-libs/tg_owt/files/tg_owt-0_pre20210626-allow-disabling-pipewire.patch
@@ -0,0 +1,36 @@
+Fix an issue with -DTG_OWT_USE_PIPEWIRE=OFF
+
+Some files were erroneously being included despite the option being turned off
+
+--- tg_owt-91d836dc84a16584c6ac52b36c04c0de504d9c34.orig/CMakeLists.txt
++++ tg_owt-91d836dc84a16584c6ac52b36c04c0de504d9c34/CMakeLists.txt
+@@ -88,6 +88,7 @@
+ init_target(tg_owt)
+ 
+ if (TG_OWT_USE_PIPEWIRE)
++    link_glib(tg_owt)
+     if (TG_OWT_DLOPEN_PIPEWIRE)
+         include(cmake/generate_stubs.cmake)
+         set(stubs_loc ${webrtc_loc}/modules/desktop_capture/linux)
+@@ -169,7 +170,6 @@
+ 
+ if (UNIX AND NOT APPLE)
+     link_x11(tg_owt)
+-    link_glib(tg_owt)
+ endif()
+ 
+ function(add_sublibrary postfix)
+@@ -2161,6 +2161,13 @@
+     )
+ endif()
+ 
++if (NOT TG_OWT_USE_PIPEWIRE)
++    remove_target_sources(tg_owt ${webrtc_loc}
++        modules/desktop_capture/linux/base_capturer_pipewire.cc
++        modules/desktop_capture/linux/base_capturer_pipewire.h
++    )
++endif()
++
+ if (NOT TG_OWT_BUILD_AUDIO_BACKENDS)
+     remove_target_sources(tg_owt ${webrtc_loc}
+         rtc_base/win/windows_version.cc

diff --git 
a/media-libs/tg_owt/files/tg_owt-0_pre20210626-allow-disabling-pulseaudio.patch 
b/media-libs/tg_owt/files/tg_owt-0_pre20210626-allow-disabling-pulseaudio.patch
new file mode 100644
index 00000000000..0bddb5fd00f
--- /dev/null
+++ 
b/media-libs/tg_owt/files/tg_owt-0_pre20210626-allow-disabling-pulseaudio.patch
@@ -0,0 +1,90 @@
+Add support for -DTG_OWT_BUILD_PULSE_BACKEND
+
+This is based off of the rtc_include_pulse_audio option in:
+* src/modules/audio_device/BUILD.gn
+
+ALSA must be enabled unless audio support is removed as a whole, see:
+* src/modules/audio_device/audio_device_impl.cc
+
+--- tg_owt-91d836dc84a16584c6ac52b36c04c0de504d9c34.orig/CMakeLists.txt
++++ tg_owt-91d836dc84a16584c6ac52b36c04c0de504d9c34/CMakeLists.txt
+@@ -25,12 +25,17 @@
+ option(TG_OWT_USE_PIPEWIRE "Use pipewire for desktop capture on non-Apple 
Unix." ON)
+ option(TG_OWT_DLOPEN_PIPEWIRE "dlopen pipewire 0.3 for desktop capture on 
non-Apple Unix." ${not_packaged_build})
+ option(TG_OWT_BUILD_AUDIO_BACKENDS "Build webrtc audio backends." ON)
++option(TG_OWT_BUILD_PULSE_BACKEND "Build pulseaudio audio backend on 
non-Apple Unix." ON)
+ 
+ if (NOT UNIX OR APPLE)
+     set(TG_OWT_USE_X11 OFF)
+     set(TG_OWT_USE_PIPEWIRE OFF)
+ endif()
+ 
++if (NOT TG_OWT_BUILD_AUDIO_BACKENDS)
++    set(TG_OWT_BUILD_PULSE_BACKEND OFF)
++endif()
++
+ if (BUILD_SHARED_LIBS)
+     set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+ endif()
+@@ -162,9 +167,11 @@
+ link_libvpx(tg_owt)
+ 
+ if (TG_OWT_BUILD_AUDIO_BACKENDS AND (UNIX AND NOT APPLE))
+-    link_libalsa(tg_owt)
+-    link_libpulse(tg_owt)
+     link_dl(tg_owt)
++    link_libalsa(tg_owt)
++    if (TG_OWT_BUILD_PULSE_BACKEND)
++        link_libpulse(tg_owt)
++    endif()
+ endif()
+ 
+ if (NOT WIN32 AND NOT APPLE)
+@@ -2218,12 +2225,6 @@
+         modules/audio_device/linux/audio_mixer_manager_alsa_linux.h
+         modules/audio_device/linux/latebindingsymboltable_linux.cc
+         modules/audio_device/linux/latebindingsymboltable_linux.h
+-        modules/audio_device/linux/audio_device_pulse_linux.cc
+-        modules/audio_device/linux/audio_device_pulse_linux.h
+-        modules/audio_device/linux/audio_mixer_manager_pulse_linux.cc
+-        modules/audio_device/linux/audio_mixer_manager_pulse_linux.h
+-        modules/audio_device/linux/pulseaudiosymboltable_linux.cc
+-        modules/audio_device/linux/pulseaudiosymboltable_linux.h
+         modules/audio_device/mac/audio_device_mac.cc
+         modules/audio_device/mac/audio_device_mac.h
+         modules/audio_device/mac/audio_mixer_manager_mac.cc
+@@ -2243,6 +2244,17 @@
+     )
+ endif()
+ 
++if (NOT TG_OWT_BUILD_PULSE_BACKEND)
++    remove_target_sources(tg_owt ${webrtc_loc}
++        modules/audio_device/linux/audio_device_pulse_linux.cc
++        modules/audio_device/linux/audio_device_pulse_linux.h
++        modules/audio_device/linux/audio_mixer_manager_pulse_linux.cc
++        modules/audio_device/linux/audio_mixer_manager_pulse_linux.h
++        modules/audio_device/linux/pulseaudiosymboltable_linux.cc
++        modules/audio_device/linux/pulseaudiosymboltable_linux.h
++    )
++endif()
++
+ if (NOT WIN32)
+     remove_target_sources(tg_owt ${webrtc_loc}
+         rtc_base/win32.cc
+--- 
tg_owt-91d836dc84a16584c6ac52b36c04c0de504d9c34.orig/cmake/libwebrtcbuild.cmake
++++ tg_owt-91d836dc84a16584c6ac52b36c04c0de504d9c34/cmake/libwebrtcbuild.cmake
+@@ -50,8 +50,13 @@
+     target_compile_definitions(libwebrtcbuild
+     INTERFACE
+         WEBRTC_ENABLE_LINUX_ALSA
+-        WEBRTC_ENABLE_LINUX_PULSE
+     )
++    if (TG_OWT_BUILD_PULSE_BACKEND)
++        target_compile_definitions(libwebrtcbuild
++        INTERFACE
++            WEBRTC_ENABLE_LINUX_PULSE
++        )
++    endif()
+ endif()
+ 
+ if (WIN32)

diff --git 
a/media-libs/tg_owt/files/tg_owt-0_pre20210626-expose-set_allow_pipewire.patch 
b/media-libs/tg_owt/files/tg_owt-0_pre20210626-expose-set_allow_pipewire.patch
new file mode 100644
index 00000000000..ef93ea24101
--- /dev/null
+++ 
b/media-libs/tg_owt/files/tg_owt-0_pre20210626-expose-set_allow_pipewire.patch
@@ -0,0 +1,16 @@
+Exposes a dummy version of set_allow_pipewire in case the library is built
+without WEBRTC_USE_PIPEWIRE. This function is expected to be used by
+applications, and removing it completely breaks the ABI.
+
+--- 
tg_owt-91d836dc84a16584c6ac52b36c04c0de504d9c34.orig/src/modules/desktop_capture/desktop_capture_options.h
++++ 
tg_owt-91d836dc84a16584c6ac52b36c04c0de504d9c34/src/modules/desktop_capture/desktop_capture_options.h
+@@ -131,6 +131,9 @@
+ #if defined(WEBRTC_USE_PIPEWIRE)
+   bool allow_pipewire() const { return allow_pipewire_; }
+   void set_allow_pipewire(bool allow) { allow_pipewire_ = allow; }
++#else
++  bool allow_pipewire() const { return false; }
++  void set_allow_pipewire(bool allow) { }
+ #endif
+ 
+  private:

diff --git a/media-libs/tg_owt/metadata.xml b/media-libs/tg_owt/metadata.xml
index 631cf5ff785..704c25c1b2f 100644
--- a/media-libs/tg_owt/metadata.xml
+++ b/media-libs/tg_owt/metadata.xml
@@ -9,4 +9,7 @@
                <email>proxy-ma...@gentoo.org</email>
                <name>Proxy Maintainers</name>
        </maintainer>
+       <use>
+               <flag name="screencast">Enable support for remote desktop and 
screen cast using <pkg>media-video/pipewire</pkg></flag>
+       </use>
 </pkgmetadata>

diff --git a/media-libs/tg_owt/tg_owt-0_pre20210626.ebuild 
b/media-libs/tg_owt/tg_owt-0_pre20210626.ebuild
new file mode 100644
index 00000000000..443dc1f7f79
--- /dev/null
+++ b/media-libs/tg_owt/tg_owt-0_pre20210626.ebuild
@@ -0,0 +1,104 @@
+# Copyright 2020-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit cmake
+
+DESCRIPTION="WebRTC build for Telegram"
+HOMEPAGE="https://github.com/desktop-app/tg_owt";
+
+TG_OWT_COMMIT="91d836dc84a16584c6ac52b36c04c0de504d9c34"
+LIBYUV_COMMIT="ad890067f661dc747a975bc55ba3767fe30d4452"
+SRC_URI="https://github.com/desktop-app/tg_owt/archive/${TG_OWT_COMMIT}.tar.gz 
-> ${P}.tar.gz
+       
https://archive.org/download/libyuv-${LIBYUV_COMMIT}.tar/libyuv-${LIBYUV_COMMIT}.tar.gz";
+S="${WORKDIR}/${PN}-${TG_OWT_COMMIT}"
+# Fetch libyuv archive from: 
https://chromium.googlesource.com/libyuv/libyuv/+archive/${LIBYUV_COMMIT}.tar.gz
+
+LICENSE="BSD"
+SLOT="0/20210626"
+KEYWORDS="~amd64 ~ppc64"
+IUSE="+alsa pulseaudio screencast +X"
+REQUIRED_USE="pulseaudio? ( alsa )"
+
+# Bundled libs:
+# - libyuv (no stable versioning, www-client/chromium and media-libs/libvpx 
bundle it)
+# - libsrtp (project uses private APIs)
+# - pffft (no stable versioning, patched)
+# media-libs/libjpeg-turbo is required for libyuv
+DEPEND="
+       dev-cpp/abseil-cpp:=[cxx17(+)]
+       dev-libs/libevent:=
+       dev-libs/openssl:=
+       dev-libs/protobuf:=
+       media-libs/libjpeg-turbo:=
+       >=media-libs/libvpx-1.10.0:=
+       media-libs/openh264:=
+       media-libs/opus
+       media-video/ffmpeg:=
+       net-libs/usrsctp
+       alsa? ( media-libs/alsa-lib )
+       pulseaudio? ( media-sound/pulseaudio )
+       screencast? (
+               dev-libs/glib:2
+               media-video/pipewire:=
+       )
+       X? (
+               x11-libs/libX11
+               x11-libs/libXcomposite
+               x11-libs/libXdamage
+               x11-libs/libXext
+               x11-libs/libXfixes
+               x11-libs/libXrender
+               x11-libs/libXrandr
+               x11-libs/libXtst
+       )
+"
+RDEPEND="${DEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+       "${FILESDIR}/tg_owt-0_pre20210604-allow-disabling-pipewire.patch"
+       "${FILESDIR}/tg_owt-0_pre20210604-allow-disabling-X11.patch"
+       "${FILESDIR}/tg_owt-0_pre20210604-allow-disabling-pulseaudio.patch"
+       "${FILESDIR}/tg_owt-0_pre20210604-expose-set_allow_pipewire.patch"
+)
+
+src_unpack() {
+       unpack "${P}.tar.gz"
+       cd "${S}/src/third_party/libyuv" || die
+       unpack "libyuv-${LIBYUV_COMMIT}.tar.gz"
+}
+
+src_prepare() {
+       # libvpx source files aren't included in the repository
+       sed -i '/include(cmake\/libvpx.cmake)/d' CMakeLists.txt || die
+
+       cmake_src_prepare
+}
+
+src_configure() {
+       # Defined by -DCMAKE_BUILD_TYPE=Release, avoids crashes
+       # see https://bugs.gentoo.org/754012
+       append-cppflags '-DNDEBUG'
+
+       local mycmakeargs=(
+               -DTG_OWT_USE_X11=$(usex X ON OFF)
+               -DTG_OWT_USE_PIPEWIRE=$(usex screencast ON OFF)
+               -DTG_OWT_BUILD_AUDIO_BACKENDS=$(usex alsa ON OFF)
+               -DTG_OWT_BUILD_PULSE_BACKEND=$(usex pulseaudio ON OFF)
+       )
+       cmake_src_configure
+}
+
+src_install() {
+       cmake_src_install
+
+       # Save about 15MB of useless headers
+       rm -r "${ED}/usr/include/tg_owt/third_party" || die
+
+       # Install third_party/libyuv anyway...
+       dodir /usr/include/tg_owt/third_party/libyuv/include
+       cd "${S}/src/third_party/libyuv/include"
+       find -type f -name "*.h" -exec install -Dm644 '{}' 
"${ED}/usr/include/tg_owt/third_party/libyuv/include/{}" \;
+}

Reply via email to