insync: 3.3.5.40925 -> 3.8.5.50499

- Simplified packaging process:
  - Use as much vendor provided binaries as possible.
  - Only replace glibc with system provided ones (2.36+ required, hence
    nixos 22.11 is out).
  - Use buildFHSEnv to create FHS environment to run insync in.

Known bug(s):
  1) Currently the system try icon does not render correctly.
  2) libqtvirtualkeyboardplugin does not have necessary Qt library shipped from vendor.
This commit is contained in:
Miao, ZhiCheng
2023-05-13 22:11:32 +03:00
parent 7a6a78c970
commit 11b9679642
+89 -63
View File
@@ -1,73 +1,26 @@
{ stdenv
, lib
{ lib
, writeShellScript
, buildFHSEnv
, stdenv
, fetchurl
, makeWrapper
, dpkg
, libxcb
, libGL
, nss
, libthai
, wayland
, alsa-lib
, qtvirtualkeyboard
, qtwebchannel
, qtwebsockets
, qtlocation
, qtwebengine
, autoPatchelfHook
, wrapQtAppsHook
, dpkg
, nss
, libvorbis
, libdrm
, libGL
, wayland
, libthai
}:
stdenv.mkDerivation rec {
let
pname = "insync";
version = "3.3.5.40925";
src = fetchurl {
url = "http://s.insynchq.com/builds/${pname}_${version}-focal_amd64.deb";
sha256 = "sha256-lYlG/8d7teX98F5eDxm4EdBfFs7Sz3Td4kKLC6KZqnQ=";
};
postPatch = ''
substituteInPlace usr/bin/insync --replace /usr/lib/insync $out/usr/lib/insync
'';
buildInputs = [
alsa-lib
libGL
libthai
libxcb
nss
qtlocation
qtvirtualkeyboard
qtwebchannel
qtwebengine
qtwebsockets
wayland
];
nativeBuildInputs = [ autoPatchelfHook dpkg makeWrapper wrapQtAppsHook ];
unpackPhase = ''
dpkg-deb --fsys-tarfile $src | tar -x --no-same-permissions --no-same-owner
'';
installPhase = ''
mkdir -p $out/bin $out/lib $out/share
cp -R usr/* $out/
rm $out/lib/insync/libGLX.so.0
rm $out/lib/insync/libQt5*
sed -i 's|/usr/lib/insync|/lib/insync|' "$out/bin/insync"
wrapQtApp "$out/lib/insync/insync"
'';
dontConfigure = true;
dontBuild = true;
version = "3.8.5.50499";
meta = with lib; {
platforms = ["x86_64-linux"];
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
license = licenses.unfree;
maintainers = with maintainers; [ ];
maintainers = with maintainers; [ hellwolf ];
homepage = "https://www.insynchq.com";
description = "Google Drive sync and backup with multiple account support";
longDescription = ''
@@ -77,8 +30,81 @@ stdenv.mkDerivation rec {
and built in sharing.
There is a 15-day free trial, and it is a paid application after that.
Known bug(s):
1) Currently the system try icon does not render correctly.
2) libqtvirtualkeyboardplugin does not have necessary Qt library shipped from vendor.
'';
# download URL removed
broken = true;
};
insync-pkg = stdenv.mkDerivation {
inherit pname version;
src = fetchurl {
# Find a binary from https://www.insynchq.com/downloads/linux#ubuntu.
url = "https://cdn.insynchq.com/builds/linux/${pname}_${version}-lunar_amd64.deb";
sha256 = "sha256-mpMJe8LAmO9OrqRIEWuxfVNeh5ANvjZIEHFz8cXYObY=";
};
buildInputs = [
nss
libvorbis
libdrm
libGL
wayland
libthai
];
nativeBuildInputs = [ autoPatchelfHook dpkg ];
unpackPhase = ''
dpkg-deb --fsys-tarfile $src | tar -x --no-same-permissions --no-same-owner
'';
installPhase = ''
runHook preInstall
mkdir -p $out/bin $out/lib $out/share
cp -R usr/* $out/
# use system glibc
rm -f $out/lib/insync/{libgcc_s.so.1,libstdc++.so.6}
# remove badly packaged plugins
rm $out/lib/insync/PySide2/plugins/platforminputcontexts/libqtvirtualkeyboardplugin.so
runHook postInstall
'';
dontConfigure = true;
dontBuild = true;
# NB! This did the trick, otherwise it segfaults! However I don't understand why!
dontStrip = true;
inherit meta;
};
in buildFHSEnv { # ref: pkgs/build-support/build-fhsenv-bubblewrap/default.nix
name = "${pname}-${version}";
inherit meta;
# for including insync's xdg data dirs
extraOutputsToInstall = [ "share" ];
targetPkgs = pkgs: [
insync-pkg
];
multiPkgs = pkgs: with pkgs; [
# apparently only package needed for the FHS :)
libudev0-shim
];
runScript = writeShellScript "insync-wrapper.sh" ''
# QT_STYLE_OVERRIDE was used to suppress a QT warning, it should have no actual effect for this binary.
export QT_STYLE_OVERRIDE=Fusion
exec "${insync-pkg.outPath}/lib/insync/insync" "$@"
'';
# "insync start" command starts a daemon.
dieWithParent = false;
}