telegram-desktop: port derivation improvements from kotatogram-desktop (#352359)

This commit is contained in:
Nick Cao 2024-11-02 15:15:21 -04:00 committed by GitHub
commit 81916721c4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 100 additions and 372 deletions

View File

@ -1,49 +1,34 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, callPackage
, pkg-config
, cmake
, ninja
, clang
, lld
, python3
, wrapQtAppsHook
, removeReferencesTo
, qtbase
, qtimageformats
, qtsvg
, qtwayland
, kcoreaddons
, lz4
, xxHash
, ffmpeg
, openalSoft
, minizip
, libopus
, alsa-lib
, libpulseaudio
, range-v3
, tl-expected
, hunspell
, gobject-introspection
, jemalloc
, rnnoise
, microsoft-gsl
, boost
, libicns
, darwin
, libsForQt5
, yasm
}:
let
tg_owt = callPackage ./tg_owt.nix {
(libsForQt5.callPackage ../telegram-desktop/default.nix {
inherit stdenv;
tg_owt = (callPackage ../telegram-desktop/tg_owt.nix {
# tg_owt should use the same compiler
inherit stdenv;
};
}).overrideAttrs(oldAttrs: {
version = "0-unstable-2024-06-15";
mainProgram = if stdenv.hostPlatform.isLinux then "kotatogram-desktop" else "Kotatogram";
in
stdenv.mkDerivation rec {
src = fetchFromGitHub {
owner = "desktop-app";
repo = "tg_owt";
rev = "c9cc4390ab951f2cbc103ff783a11f398b27660b";
hash = "sha256-FfWmSYaeryTDbsGJT3R7YK1oiyJcrR7YKKBOF+9PmpY=";
fetchSubmodules = true;
};
nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ yasm ];
});
withWebKitGTK = false;
}).overrideAttrs {
pname = "kotatogram-desktop";
version = "1.4.9-unstable-2024-09-27";
@ -59,128 +44,15 @@ stdenv.mkDerivation rec {
./macos.patch
./macos-opengl.patch
./macos-qt5.patch
(fetchpatch {
url = "https://gitlab.com/mnauw/cppgir/-/commit/c8bb1c6017a6f7f2e47bd10543aea6b3ec69a966.patch";
stripLen = 1;
extraPrefix = "cmake/external/glib/cppgir/";
hash = "sha256-8B4h3BTG8dIlt3+uVgBI569E9eCebcor9uohtsrZpnI=";
})
];
postPatch = lib.optionalString stdenv.hostPlatform.isLinux ''
substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioInputALSA.cpp \
--replace-fail '"libasound.so.2"' '"${alsa-lib}/lib/libasound.so.2"'
substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioOutputALSA.cpp \
--replace-fail '"libasound.so.2"' '"${alsa-lib}/lib/libasound.so.2"'
substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioPulse.cpp \
--replace-fail '"libpulse.so.0"' '"${libpulseaudio}/lib/libpulse.so.0"'
'' + lib.optionalString stdenv.hostPlatform.isDarwin ''
substituteInPlace Telegram/lib_webrtc/webrtc/platform/mac/webrtc_environment_mac.mm \
--replace-fail kAudioObjectPropertyElementMain kAudioObjectPropertyElementMaster
'';
# Wrapping the inside of the app bundles, avoiding double-wrapping
dontWrapQtApps = stdenv.hostPlatform.isDarwin;
nativeBuildInputs = [
pkg-config
cmake
ninja
python3
wrapQtAppsHook
removeReferencesTo
] ++ lib.optionals stdenv.hostPlatform.isLinux [
# to build bundled libdispatch
clang
gobject-introspection
] ++ lib.optionals stdenv.hostPlatform.isDarwin [
lld
];
buildInputs = [
qtbase
qtimageformats
qtsvg
lz4
xxHash
ffmpeg
openalSoft
minizip
libopus
range-v3
tl-expected
rnnoise
tg_owt
microsoft-gsl
boost
] ++ lib.optionals stdenv.hostPlatform.isLinux [
qtwayland
kcoreaddons
alsa-lib
libpulseaudio
hunspell
jemalloc
] ++ lib.optionals stdenv.hostPlatform.isDarwin (with darwin.apple_sdk_11_0.frameworks; [
Cocoa
CoreFoundation
CoreServices
CoreText
CoreGraphics
CoreMedia
OpenGL
AudioUnit
ApplicationServices
Foundation
AGL
Security
SystemConfiguration
Carbon
AudioToolbox
VideoToolbox
VideoDecodeAcceleration
AVFoundation
CoreAudio
CoreVideo
CoreMediaIO
QuartzCore
AppKit
CoreWLAN
WebKit
IOKit
GSS
MediaPlayer
IOSurface
Metal
NaturalLanguage
libicns
]);
enableParallelBuilding = true;
env = lib.optionalAttrs stdenv.hostPlatform.isDarwin {
NIX_CFLAGS_LINK = "-fuse-ld=lld";
};
cmakeFlags = [
"-DTDESKTOP_API_TEST=ON"
];
installPhase = lib.optionalString stdenv.hostPlatform.isDarwin ''
mkdir -p $out/Applications
cp -r ${mainProgram}.app $out/Applications
ln -s $out/{Applications/${mainProgram}.app/Contents/MacOS,bin}
'';
preFixup = ''
remove-references-to -t ${stdenv.cc.cc} $out/bin/${mainProgram}
remove-references-to -t ${microsoft-gsl} $out/bin/${mainProgram}
remove-references-to -t ${tg_owt.dev} $out/bin/${mainProgram}
'';
postFixup = lib.optionalString stdenv.hostPlatform.isDarwin ''
wrapQtApp $out/Applications/${mainProgram}.app/Contents/MacOS/${mainProgram}
'';
passthru = {
inherit tg_owt;
};
meta = with lib; {
inherit mainProgram;
description = "Kotatogram experimental Telegram Desktop fork";
longDescription = ''
Unofficial desktop client for the Telegram messenger, based on Telegram Desktop.
@ -192,5 +64,6 @@ stdenv.mkDerivation rec {
homepage = "https://kotatogram.github.io";
changelog = "https://github.com/kotatogram/kotatogram-desktop/releases/tag/k{version}";
maintainers = with maintainers; [ ilya-fedin ];
mainProgram = if stdenv.hostPlatform.isLinux then "kotatogram-desktop" else "Kotatogram";
};
}

View File

@ -1,115 +0,0 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch2
, pkg-config
, cmake
, ninja
, yasm
, libjpeg
, openssl
, libopus
, ffmpeg
, protobuf
, openh264
, crc32c
, libvpx
, libX11
, libXtst
, libXcomposite
, libXdamage
, libXext
, libXrender
, libXrandr
, libXi
, glib
, abseil-cpp
, pipewire
, mesa
, libdrm
, libGL
, darwin
}:
stdenv.mkDerivation {
pname = "tg_owt";
version = "0-unstable-2024-06-15";
src = fetchFromGitHub {
owner = "desktop-app";
repo = "tg_owt";
rev = "c9cc4390ab951f2cbc103ff783a11f398b27660b";
sha256 = "sha256-FfWmSYaeryTDbsGJT3R7YK1oiyJcrR7YKKBOF+9PmpY=";
fetchSubmodules = true;
};
patches = [
# Remove usage of AVCodecContext::reordered_opaque
(fetchpatch2 {
name = "webrtc-ffmpeg-7.patch";
url = "https://webrtc.googlesource.com/src/+/e7d10047096880feb5e9846375f2da54aef91202%5E%21/?format=TEXT";
decode = "base64 -d";
stripLen = 1;
extraPrefix = "src/";
hash = "sha256-EdwHeVko8uDsP5GTw2ryWiQgRVCAdPc1me6hySdiwMU=";
})
];
postPatch = lib.optionalString stdenv.hostPlatform.isLinux ''
substituteInPlace src/modules/desktop_capture/linux/wayland/egl_dmabuf.cc \
--replace '"libEGL.so.1"' '"${libGL}/lib/libEGL.so.1"' \
--replace '"libGL.so.1"' '"${libGL}/lib/libGL.so.1"' \
--replace '"libgbm.so.1"' '"${mesa}/lib/libgbm.so.1"' \
--replace '"libdrm.so.2"' '"${libdrm}/lib/libdrm.so.2"'
'';
outputs = [ "out" "dev" ];
nativeBuildInputs = [ pkg-config cmake ninja yasm ];
propagatedBuildInputs = [
libjpeg
openssl
libopus
ffmpeg
protobuf
openh264
crc32c
libvpx
abseil-cpp
] ++ lib.optionals stdenv.hostPlatform.isLinux [
libX11
libXtst
libXcomposite
libXdamage
libXext
libXrender
libXrandr
libXi
glib
pipewire
mesa
libdrm
libGL
] ++ lib.optionals stdenv.hostPlatform.isDarwin (with darwin.apple_sdk.frameworks; [
Cocoa
AppKit
IOKit
IOSurface
Foundation
AVFoundation
CoreMedia
VideoToolbox
CoreGraphics
CoreVideo
OpenGL
Metal
MetalKit
CoreFoundation
ApplicationServices
]);
enableParallelBuilding = true;
meta.license = lib.licenses.bsd3;
}

View File

@ -1,4 +1,4 @@
{ stdenv, lib, kotatogram-desktop, glib-networking, webkitgtk_6_0, makeWrapper }:
{ stdenv, lib, kotatogram-desktop, glib-networking, webkitgtk_4_1, makeWrapper }:
stdenv.mkDerivation {
pname = "${kotatogram-desktop.pname}-with-webkit";
@ -8,12 +8,13 @@ stdenv.mkDerivation {
installPhase = ''
mkdir -p $out
cp -r ${kotatogram-desktop}/share $out
substituteInPlace $out/share/dbus-1/services/* --replace-fail ${kotatogram-desktop} $out
'';
postFixup = ''
mkdir -p $out/bin
makeWrapper ${kotatogram-desktop}/bin/kotatogram-desktop $out/bin/kotatogram-desktop \
--prefix GIO_EXTRA_MODULES : ${glib-networking}/lib/gio/modules \
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ webkitgtk_6_0 ]}
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ webkitgtk_4_1 ]}
'';
meta = kotatogram-desktop.meta // {
platforms = lib.platforms.linux;

View File

@ -1,48 +1,44 @@
{ lib
, stdenv
, fetchFromGitHub
, callPackage
, pkg-config
, cmake
, ninja
, clang
, lld
, python3
, gobject-introspection
, wrapGAppsHook3
, wrapQtAppsHook
, extra-cmake-modules
, tg_owt ? callPackage ./tg_owt.nix { inherit stdenv; }
, qtbase
, qtwayland
, qtsvg
, qtimageformats
, gtk3
, glib-networking
, boost
, fmt
, libdbusmenu
, qtsvg
, qtwayland
, kcoreaddons
, lz4
, xxHash
, ffmpeg
, protobuf
, openalSoft
, minizip
, libopus
, alsa-lib
, libpulseaudio
, pipewire
, range-v3
, tl-expected
, hunspell
, webkitgtk_6_0
, gobject-introspection
, jemalloc
, rnnoise
, protobuf
, abseil-cpp
, xdg-utils
, microsoft-gsl
, rlottie
, boost
, ada
, stdenv
, darwin
, lld
, withWebKitGTK ? true
, wrapGAppsHook3
, glib-networking
, webkitgtk_4_1
, libicns
, darwin
, nix-update-script
}:
@ -53,14 +49,6 @@
# - https://git.alpinelinux.org/aports/tree/testing/telegram-desktop/APKBUILD
# - https://github.com/void-linux/void-packages/blob/master/srcpkgs/telegram-desktop/template
let
tg_owt = callPackage ./tg_owt.nix {
inherit stdenv;
abseil-cpp = abseil-cpp.override {
cxxStandard = "20";
};
};
in
stdenv.mkDerivation (finalAttrs: {
pname = "telegram-desktop";
version = "5.6.3";
@ -75,10 +63,6 @@ stdenv.mkDerivation (finalAttrs: {
patches = [
./macos.patch
# the generated .desktop files contains references to unwrapped tdesktop, breaking scheme handling
# and the scheme handler is already registered in the packaged .desktop file, rendering this unnecessary
# see https://github.com/NixOS/nixpkgs/issues/218370
./scheme.patch
];
postPatch = lib.optionalString stdenv.hostPlatform.isLinux ''
@ -88,16 +72,19 @@ stdenv.mkDerivation (finalAttrs: {
--replace-fail '"libasound.so.2"' '"${alsa-lib}/lib/libasound.so.2"'
substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioPulse.cpp \
--replace-fail '"libpulse.so.0"' '"${libpulseaudio}/lib/libpulse.so.0"'
'' + lib.optionalString (stdenv.hostPlatform.isLinux && withWebKitGTK) ''
substituteInPlace Telegram/lib_webview/webview/platform/linux/webview_linux_webkitgtk_library.cpp \
--replace-fail '"libwebkitgtk-6.0.so.4"' '"${webkitgtk_6_0}/lib/libwebkitgtk-6.0.so.4"'
--replace-fail '"libwebkit2gtk-4.1.so.0"' '"${webkitgtk_4_1}/lib/libwebkit2gtk-4.1.so.0"'
'' + lib.optionalString stdenv.hostPlatform.isDarwin ''
substituteInPlace Telegram/lib_webrtc/webrtc/platform/mac/webrtc_environment_mac.mm \
--replace-fail kAudioObjectPropertyElementMain kAudioObjectPropertyElementMaster
'';
# We want to run wrapProgram manually (with additional parameters)
# Avoid double-wrapping
dontWrapGApps = true;
dontWrapQtApps = true;
# Wrapping the inside of the app bundles, avoiding double-wrapping
dontWrapQtApps = stdenv.hostPlatform.isDarwin;
nativeBuildInputs = [
pkg-config
@ -106,18 +93,19 @@ stdenv.mkDerivation (finalAttrs: {
python3
wrapQtAppsHook
] ++ lib.optionals stdenv.hostPlatform.isLinux [
# to build bundled libdispatch
clang
gobject-introspection
] ++ lib.optionals (stdenv.hostPlatform.isLinux && withWebKitGTK) [
wrapGAppsHook3
extra-cmake-modules
] ++ lib.optionals stdenv.hostPlatform.isDarwin [
lld
];
buildInputs = [
qtbase
qtsvg
qtimageformats
boost
qtsvg
lz4
xxHash
ffmpeg
@ -127,23 +115,21 @@ stdenv.mkDerivation (finalAttrs: {
range-v3
tl-expected
rnnoise
protobuf
tg_owt
microsoft-gsl
rlottie
boost
ada
] ++ lib.optionals stdenv.hostPlatform.isLinux [
protobuf
qtwayland
gtk3
glib-networking
fmt
libdbusmenu
kcoreaddons
alsa-lib
libpulseaudio
pipewire
hunspell
webkitgtk_6_0
jemalloc
] ++ lib.optionals (stdenv.hostPlatform.isLinux && withWebKitGTK) [
glib-networking
webkitgtk_4_1
] ++ lib.optionals stdenv.hostPlatform.isDarwin (with darwin.apple_sdk_11_0.frameworks; [
Cocoa
CoreFoundation
@ -185,33 +171,22 @@ stdenv.mkDerivation (finalAttrs: {
};
cmakeFlags = [
(lib.cmakeBool "DESKTOP_APP_DISABLE_AUTOUPDATE" true)
# We're allowed to used the API ID of the Snap package:
(lib.cmakeFeature "TDESKTOP_API_ID" "611335")
(lib.cmakeFeature "TDESKTOP_API_HASH" "d524b414d21f4d37f08684c1df41ac9c")
# See: https://github.com/NixOS/nixpkgs/pull/130827#issuecomment-885212649
(lib.cmakeBool "DESKTOP_APP_USE_PACKAGED_FONTS" false)
];
preBuild = ''
# for cppgir to locate gir files
export GI_GIR_PATH="$XDG_DATA_DIRS"
'';
installPhase = lib.optionalString stdenv.hostPlatform.isDarwin ''
mkdir -p $out/Applications
cp -r ${finalAttrs.meta.mainProgram}.app $out/Applications
ln -s $out/{Applications/${finalAttrs.meta.mainProgram}.app/Contents/MacOS,bin}
'';
postFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
# This is necessary to run Telegram in a pure environment.
# We also use gappsWrapperArgs from wrapGAppsHook.
wrapProgram $out/bin/${finalAttrs.meta.mainProgram} \
"''${gappsWrapperArgs[@]}" \
"''${qtWrapperArgs[@]}" \
--suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
'' + lib.optionalString stdenv.hostPlatform.isDarwin ''
preFixup = lib.optionalString (stdenv.hostPlatform.isLinux && withWebKitGTK) ''
qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
'';
postFixup = lib.optionalString stdenv.hostPlatform.isDarwin ''
wrapQtApp $out/Applications/${finalAttrs.meta.mainProgram}.app/Contents/MacOS/${finalAttrs.meta.mainProgram}
'';

View File

@ -1,12 +0,0 @@
diff --git a/Telegram/SourceFiles/core/application.cpp b/Telegram/SourceFiles/core/application.cpp
index e3e0de6c6..d5851bd6e 100644
--- a/Telegram/SourceFiles/core/application.cpp
+++ b/Telegram/SourceFiles/core/application.cpp
@@ -421,7 +421,6 @@ void Application::run() {
void Application::autoRegisterUrlScheme() {
if (!OptionSkipUrlSchemeRegister.value()) {
- InvokeQueued(this, [] { RegisterUrlScheme(); });
}
}

View File

@ -5,29 +5,31 @@
fetchpatch2,
pkg-config,
cmake,
crc32c,
ninja,
python3,
libjpeg,
openssl,
libopus,
ffmpeg,
openh264,
crc32c,
libvpx,
libXi,
libXfixes,
libX11,
libXtst,
libXcomposite,
libXdamage,
libXext,
libXrender,
libXrandr,
libXi,
glib,
abseil-cpp,
pipewire,
mesa,
libdrm,
libGL,
unstableGitUpdater,
darwin,
unstableGitUpdater,
}:
stdenv.mkDerivation {
@ -38,7 +40,7 @@ stdenv.mkDerivation {
owner = "desktop-app";
repo = "tg_owt";
rev = "dc17143230b5519f3c1a8da0079e00566bd4c5a8";
sha256 = "sha256-7j7hBIOXEdNJDnDSVUqy234nkTCaeZ9tDAzqvcuaq0o=";
hash = "sha256-7j7hBIOXEdNJDnDSVUqy234nkTCaeZ9tDAzqvcuaq0o=";
fetchSubmodules = true;
};
@ -54,36 +56,50 @@ stdenv.mkDerivation {
})
];
postPatch = lib.optionalString stdenv.hostPlatform.isLinux ''
substituteInPlace src/modules/desktop_capture/linux/wayland/egl_dmabuf.cc \
--replace-fail '"libEGL.so.1"' '"${lib.getLib libGL}/lib/libEGL.so.1"' \
--replace-fail '"libGL.so.1"' '"${lib.getLib libGL}/lib/libGL.so.1"' \
--replace-fail '"libgbm.so.1"' '"${lib.getLib mesa}/lib/libgbm.so.1"' \
--replace-fail '"libdrm.so.2"' '"${lib.getLib libdrm}/lib/libdrm.so.2"'
'';
outputs = [
"out"
"dev"
];
nativeBuildInputs = [
cmake
pkg-config
cmake
ninja
python3
];
buildInputs =
propagatedBuildInputs =
[
openssl
libjpeg
openssl
libopus
ffmpeg
openh264
crc32c
libvpx
abseil-cpp
]
++ lib.optionals stdenv.hostPlatform.isLinux [
glib
libXi
libX11
libXtst
libXcomposite
libXdamage
libXext
libXfixes
libXrender
libXrandr
libXtst
libXi
glib
pipewire
mesa
libdrm
libGL
]
++ lib.optionals stdenv.hostPlatform.isDarwin (
@ -99,6 +115,7 @@ stdenv.mkDerivation {
VideoToolbox
CoreGraphics
CoreVideo
OpenGL
Metal
MetalKit
CoreFoundation
@ -106,18 +123,6 @@ stdenv.mkDerivation {
]
);
propagatedBuildInputs = [
abseil-cpp
crc32c
openh264
libvpx
];
cmakeFlags = [
# Building as a shared library isn't officially supported and may break at any time.
(lib.cmakeBool "BUILD_SHARED_LIBS" false)
];
passthru.updateScript = unstableGitUpdater { };
meta = {

View File

@ -28,6 +28,7 @@ telegram-desktop.overrideAttrs (old: rec {
];
cmakeFlags = (old.cmakeFlags or []) ++ [
(lib.cmakeBool "DESKTOP_APP_DISABLE_AUTOUPDATE" true)
(lib.cmakeBool "disable_autoupdate" true)
];

View File

@ -30264,7 +30264,7 @@ with pkgs;
kondo = callPackage ../applications/misc/kondo { };
kotatogram-desktop = libsForQt5.callPackage ../applications/networking/instant-messengers/telegram/kotatogram-desktop {
kotatogram-desktop = callPackage ../applications/networking/instant-messengers/telegram/kotatogram-desktop {
stdenv = if stdenv.hostPlatform.isDarwin
then overrideSDK stdenv "11.0"
else stdenv;
@ -32577,7 +32577,7 @@ with pkgs;
taskopen = callPackage ../applications/misc/taskopen { };
telegram-desktop = qt6Packages.callPackage ../applications/networking/instant-messengers/telegram/telegram-desktop {
telegram-desktop = kdePackages.callPackage ../applications/networking/instant-messengers/telegram/telegram-desktop {
stdenv = if stdenv.hostPlatform.isDarwin
then overrideSDK stdenv "11.0"
else stdenv;