From 548ff797656e6f2e03002746d9d1e42f2c6bd841 Mon Sep 17 00:00:00 2001 From: oxalica Date: Tue, 20 Jul 2021 22:54:17 +0800 Subject: [PATCH 1/6] tdesktop.tg_owt: rework and clean up - Build shared library to keep binary small. - Prefer system-wide libraries instead of bundled ones. - `abseil-cpp` (absl) is required for downstream build and appears in output cmake file. So it's added to `propagatedBuildInputs`. --- .../telegram/tdesktop/tg_owt.nix | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/tg_owt.nix b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/tg_owt.nix index 46076bca68c3..363650dae5a7 100644 --- a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/tg_owt.nix +++ b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/tg_owt.nix @@ -1,9 +1,9 @@ { lib, stdenv, fetchFromGitHub, fetchpatch , pkg-config, cmake, ninja, yasm , libjpeg, openssl, libopus, ffmpeg, alsa-lib, libpulseaudio, protobuf -, xorg, libXtst, libXcomposite, libXdamage, libXext, libXrender, libXrandr +, openh264, usrsctp, libevent, libvpx , glib, abseil-cpp, pcre, util-linuxMinimal, libselinux, libsepol, pipewire -, libXi +, xorg, libX11, libXtst, libXcomposite, libXdamage, libXext, libXrender, libXrandr, libXi }: stdenv.mkDerivation { @@ -24,15 +24,23 @@ stdenv.mkDerivation { buildInputs = [ libjpeg openssl libopus ffmpeg alsa-lib libpulseaudio protobuf - xorg.libX11 libXtst libXcomposite libXdamage libXext libXrender libXrandr + openh264 usrsctp libevent libvpx + libX11 libXtst libXcomposite libXdamage libXext libXrender libXrandr libXi glib abseil-cpp pcre util-linuxMinimal libselinux libsepol pipewire - libXi ]; cmakeFlags = [ - # Building as a shared library isn't officially supported and currently broken: + # Building as a shared library isn't officially supported and may break at any time. "-DBUILD_SHARED_LIBS=OFF" ]; - meta.license = lib.licenses.bsd3; + propagatedBuildInputs = [ + # Required for linking downstream binaries. + abseil-cpp openh264 usrsctp libevent libvpx + ]; + + meta = with lib; { + license = licenses.bsd3; + maintainers = with maintainers; [ oxalica ]; + }; } From 2a12ba467c49bd8885f3726fca061574a4d816cb Mon Sep 17 00:00:00 2001 From: oxalica Date: Wed, 21 Jul 2021 00:11:21 +0800 Subject: [PATCH 2/6] tdesktop: use bundled libtgvoip --- .../instant-messengers/telegram/tdesktop/default.nix | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix index 959d1a96d8e1..b14e1e41037b 100644 --- a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix +++ b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix @@ -3,7 +3,7 @@ , qtbase, qtimageformats, gtk3, libsForQt5, lz4, xxHash , ffmpeg, openalSoft, minizip, libopus, alsa-lib, libpulseaudio, range-v3 , tl-expected, hunspell, glibmm, webkitgtk, jemalloc -, libtgvoip, rnnoise, abseil-cpp, extra-cmake-modules +, rnnoise, extra-cmake-modules # Transitive dependencies: , pcre, xorg, util-linux, libselinux, libsepol, epoxy , at-spi2-core, libXtst, libthai, libdatrie @@ -58,7 +58,7 @@ in mkDerivation rec { qtbase qtimageformats gtk3 libsForQt5.kwayland libsForQt5.libdbusmenu lz4 xxHash ffmpeg openalSoft minizip libopus alsa-lib libpulseaudio range-v3 tl-expected hunspell glibmm webkitgtk jemalloc - libtgvoip rnnoise abseil-cpp extra-cmake-modules + rnnoise extra-cmake-modules tg_owt # Transitive dependencies: pcre xorg.libpthreadstubs xorg.libXdmcp util-linux libselinux libsepol epoxy @@ -70,7 +70,6 @@ in mkDerivation rec { # We're allowed to used the API ID of the Snap package: "-DTDESKTOP_API_ID=611335" "-DTDESKTOP_API_HASH=d524b414d21f4d37f08684c1df41ac9c" - #"-DDESKTOP_APP_SPECIAL_TARGET=\"\"" # TODO: Error when set to "": Bad special target '""' "-DTDESKTOP_LAUNCHER_BASENAME=telegramdesktop" # Note: This is the default ]; @@ -116,7 +115,7 @@ in mkDerivation rec { license = licenses.gpl3; platforms = platforms.linux; homepage = "https://desktop.telegram.org/"; - changelog = "https://github.com/telegramdesktop/tdesktop/releases/tag/v{version}"; - maintainers = with maintainers; [ primeos abbradar ]; + changelog = "https://github.com/telegramdesktop/tdesktop/releases/tag/v${version}"; + maintainers = with maintainers; [ primeos abbradar oxalica ]; }; } From f3959d8e8bfec7ff7af49624031362a9312e15f8 Mon Sep 17 00:00:00 2001 From: oxalica Date: Wed, 21 Jul 2021 00:11:42 +0800 Subject: [PATCH 3/6] libtgvoip: remove It's removed because: 1. It's an internal library which is only used by telegram itself, and it's fine to use its bundled source in telegram. 2. It's forced to produce static library, is very fast to build (less than 1min) and is quite small (<2 MiB). 3. Reduce extra maintenance work and have almost no other drawback. --- .../telegram/tdesktop/update.py | 4 -- .../libraries/libtgvoip/default.nix | 48 ------------------- pkgs/top-level/all-packages.nix | 2 - 3 files changed, 54 deletions(-) delete mode 100644 pkgs/development/libraries/libtgvoip/default.nix diff --git a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/update.py b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/update.py index 8f39533e2986..89e40218623b 100755 --- a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/update.py +++ b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/update.py @@ -71,7 +71,3 @@ if __name__ == "__main__": tg_owt_hash = nix_prefetch_git('https://github.com/desktop-app/tg_owt.git', tg_owt_ref) update_file('tg_owt.nix', tg_owt_version, tg_owt_hash, tg_owt_ref) tg_owt_ref = github_api_request('repos/desktop-app/tg_owt/commits/master')['sha'] - libtgvoip_ref = github_api_request(f'repos/telegramdesktop/tdesktop/contents/Telegram/ThirdParty/libtgvoip?ref={tdesktop_tag}')['sha'] - libtgvoip_version = get_commit_date('telegramdesktop/libtgvoip', libtgvoip_ref) - libtgvoip_hash = nix_prefetch_url(f'https://github.com/telegramdesktop/libtgvoip/archive/{libtgvoip_ref}.tar.gz', unpack=True) - update_file('../../../../../development/libraries/libtgvoip/default.nix', libtgvoip_version, libtgvoip_hash, libtgvoip_ref) diff --git a/pkgs/development/libraries/libtgvoip/default.nix b/pkgs/development/libraries/libtgvoip/default.nix deleted file mode 100644 index 3c10220fffbc..000000000000 --- a/pkgs/development/libraries/libtgvoip/default.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ stdenv, lib, fetchFromGitHub, fetchpatch -, pkg-config, autoreconfHook -, openssl, libopus, alsa-lib, libpulseaudio -}: - -with lib; - -stdenv.mkDerivation rec { - pname = "libtgvoip"; - version = "unstable-2021-07-13"; - - src = fetchFromGitHub { - owner = "telegramdesktop"; - repo = "libtgvoip"; - rev = "f321e7c8cc086bac6ae06fa0934aac7d9833a310"; - sha256 = "1gk5nsqhbnn1cdh83b70qr3d3v2c1bncylvgn77vvj8vnyjlmnfq"; - }; - - # To fix the build without external webrtc: - patches = [ - (fetchpatch { - # Use methods from updated webrtc. - url = "https://github.com/telegramdesktop/libtgvoip/commit/13a5fcb16b04472d808ce122abd695dbf5d206cd.patch"; - sha256 = "0wapqvml3yyv5dlp2q8iih5rfvfnkngll69krhnw5xsdjy22sp7r"; - revert = true; - }) - (fetchpatch { - # Allow working with external webrtc. - url = "https://github.com/telegramdesktop/libtgvoip/commit/6e82b6e45664c1f80b9039256c99bebc76d34672.patch"; - sha256 = "0m87ixja70vnm80a9z4gxk0yl7n64y59smczxb88lxnj6kdgih7x"; - revert = true; - }) - ]; - - outputs = [ "out" "dev" ]; - - nativeBuildInputs = [ pkg-config autoreconfHook ]; - buildInputs = [ openssl libopus alsa-lib libpulseaudio ]; - enableParallelBuilding = true; - - meta = { - description = "VoIP library for Telegram clients"; - license = licenses.unlicense; - platforms = platforms.linux; - homepage = "https://github.com/telegramdesktop/libtgvoip"; - maintainers = with maintainers; [ ilya-fedin ]; - }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 44319d78c812..58db8471d401 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -17132,8 +17132,6 @@ in libtap = callPackage ../development/libraries/libtap { }; - libtgvoip = callPackage ../development/libraries/libtgvoip { }; - libtsm = callPackage ../development/libraries/libtsm { }; libgeotiff = callPackage ../development/libraries/libgeotiff { }; From cb0861b999ecb64d0edfaed158d4a210bd0897c9 Mon Sep 17 00:00:00 2001 From: oxalica Date: Thu, 22 Jul 2021 00:42:34 +0800 Subject: [PATCH 4/6] tdesktop: clean up and fix outdated comments --- .../telegram/tdesktop/default.nix | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix index b14e1e41037b..e7f967b4a6aa 100644 --- a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix +++ b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix @@ -1,11 +1,11 @@ { mkDerivation, lib, fetchFromGitHub, callPackage, fetchpatch -, pkg-config, cmake, ninja, python3, wrapGAppsHook, wrapQtAppsHook, removeReferencesTo +, pkg-config, cmake, ninja, python3, wrapGAppsHook, wrapQtAppsHook , qtbase, qtimageformats, gtk3, libsForQt5, lz4, xxHash , ffmpeg, openalSoft, minizip, libopus, alsa-lib, libpulseaudio, range-v3 , tl-expected, hunspell, glibmm, webkitgtk, jemalloc , rnnoise, extra-cmake-modules # Transitive dependencies: -, pcre, xorg, util-linux, libselinux, libsepol, epoxy +, pcre, xorg, util-linuxMinimal, libselinux, libsepol, epoxy , at-spi2-core, libXtst, libthai, libdatrie , xdg-utils, libsysprof-capture, libpsl, brotli }: @@ -52,16 +52,20 @@ in mkDerivation rec { dontWrapGApps = true; dontWrapQtApps = true; - nativeBuildInputs = [ pkg-config cmake ninja python3 wrapGAppsHook wrapQtAppsHook removeReferencesTo ]; + nativeBuildInputs = [ + pkg-config cmake ninja python3 wrapGAppsHook wrapQtAppsHook + extra-cmake-modules + ]; buildInputs = [ qtbase qtimageformats gtk3 libsForQt5.kwayland libsForQt5.libdbusmenu lz4 xxHash ffmpeg openalSoft minizip libopus alsa-lib libpulseaudio range-v3 tl-expected hunspell glibmm webkitgtk jemalloc - rnnoise extra-cmake-modules + rnnoise tg_owt # Transitive dependencies: - pcre xorg.libpthreadstubs xorg.libXdmcp util-linux libselinux libsepol epoxy + util-linuxMinimal # Required for libmount thus not nativeBuildInputs. + pcre xorg.libpthreadstubs xorg.libXdmcp libselinux libsepol epoxy at-spi2-core libXtst libthai libdatrie libsysprof-capture libpsl brotli ]; @@ -70,18 +74,15 @@ in mkDerivation rec { # We're allowed to used the API ID of the Snap package: "-DTDESKTOP_API_ID=611335" "-DTDESKTOP_API_HASH=d524b414d21f4d37f08684c1df41ac9c" - "-DTDESKTOP_LAUNCHER_BASENAME=telegramdesktop" # Note: This is the default ]; # Note: The following packages could be packaged system-wide, but it's # probably best to use the bundled ones from tdesktop (Arch does this too): # rlottie: - # - CMake flag: "-DTDESKTOP_USE_PACKAGED_TGVOIP=ON" # - Sources (problem: there are no stable releases!): # - desktop-app (tdesktop): https://github.com/desktop-app/rlottie # - upstream: https://github.com/Samsung/rlottie # libtgvoip: - # - CMake flag: "-DDESKTOP_APP_USE_PACKAGED_RLOTTIE=ON" # - Sources (problem: the stable releases might be too old!): # - tdesktop: https://github.com/telegramdesktop/libtgvoip # - upstream: https://github.com/grishka/libtgvoip @@ -112,7 +113,7 @@ in mkDerivation rec { Desktop client for the Telegram messenger, based on the Telegram API and the MTProto secure protocol. ''; - license = licenses.gpl3; + license = licenses.gpl3Only; platforms = platforms.linux; homepage = "https://desktop.telegram.org/"; changelog = "https://github.com/telegramdesktop/tdesktop/releases/tag/v${version}"; From 6019d8abff9e4cc31001d2b9a55088bdefa245cd Mon Sep 17 00:00:00 2001 From: oxalica Date: Fri, 23 Jul 2021 05:15:37 +0800 Subject: [PATCH 5/6] tdesktop: patch dlopen paths --- .../instant-messengers/telegram/tdesktop/default.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix index e7f967b4a6aa..bdca4bb4fef2 100644 --- a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix +++ b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix @@ -46,6 +46,13 @@ in mkDerivation rec { postPatch = '' substituteInPlace Telegram/CMakeLists.txt \ --replace '"''${TDESKTOP_LAUNCHER_BASENAME}.appdata.xml"' '"''${TDESKTOP_LAUNCHER_BASENAME}.metainfo.xml"' + + substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioInputALSA.cpp \ + --replace '"libasound.so.2"' '"${alsa-lib}/lib/libasound.so.2"' + substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioOutputALSA.cpp \ + --replace '"libasound.so.2"' '"${alsa-lib}/lib/libasound.so.2"' + substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioPulse.cpp \ + --replace '"libpulse.so.0"' '"${libpulseaudio}/lib/libpulse.so.0"' ''; # We want to run wrapProgram manually (with additional parameters) From 27585b98971f8180e12592e694d38a19c072d1bf Mon Sep 17 00:00:00 2001 From: oxalica Date: Fri, 23 Jul 2021 05:17:14 +0800 Subject: [PATCH 6/6] tdesktop: bundle the default font It's worth to think about setting -DDESKTOP_APP_USE_PACKAGED_FONTS=OFF since it's impossible to install fonts as dependencies of packages with Nix and tdesktop's widgets are developed only with Open Sans in mind (it has a lot of hardcoded values and wide fonts like DejaVu may even go out of widgets' bounds) https://github.com/NixOS/nixpkgs/pull/130827#issuecomment-885212649 --- .../networking/instant-messengers/telegram/tdesktop/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix index bdca4bb4fef2..31aec0a46786 100644 --- a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix +++ b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix @@ -81,6 +81,8 @@ in mkDerivation rec { # We're allowed to used the API ID of the Snap package: "-DTDESKTOP_API_ID=611335" "-DTDESKTOP_API_HASH=d524b414d21f4d37f08684c1df41ac9c" + # See: https://github.com/NixOS/nixpkgs/pull/130827#issuecomment-885212649 + "-DDESKTOP_APP_USE_PACKAGED_FONTS=OFF" ]; # Note: The following packages could be packaged system-wide, but it's