about summary refs log tree commit diff
path: root/nixpkgs/pkgs/tools/networking/mozillavpn/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/tools/networking/mozillavpn/default.nix')
-rw-r--r--nixpkgs/pkgs/tools/networking/mozillavpn/default.nix107
1 files changed, 85 insertions, 22 deletions
diff --git a/nixpkgs/pkgs/tools/networking/mozillavpn/default.nix b/nixpkgs/pkgs/tools/networking/mozillavpn/default.nix
index e963abc9b18c..92cb1e553f84 100644
--- a/nixpkgs/pkgs/tools/networking/mozillavpn/default.nix
+++ b/nixpkgs/pkgs/tools/networking/mozillavpn/default.nix
@@ -1,53 +1,87 @@
 { buildGoModule
+, cargo
 , cmake
 , fetchFromGitHub
+, fetchpatch
 , go
 , lib
+, libsecret
 , pkg-config
 , polkit
 , python3
 , qt5compat
 , qtbase
-, qtcharts
 , qtnetworkauth
+, qtsvg
 , qttools
 , qtwebsockets
 , rustPlatform
+, rustc
 , stdenv
-, which
 , wireguard-tools
 , wrapQtAppsHook
 }:
 
 let
   pname = "mozillavpn";
-  version = "2.9.0";
+  version = "2.15.0";
   src = fetchFromGitHub {
     owner = "mozilla-mobile";
     repo = "mozilla-vpn-client";
     rev = "v${version}";
     fetchSubmodules = true;
-    hash = "sha256-arz8hTgQfPFSZesSddcnZoyLfoLQsQT8LIsl+3ZfA0M=";
+    hash = "sha256-eyYrA8ysfmXxlHNUBkGU9ioYrnbx3L1wP9byNz9L/MA=";
   };
+  patches = [
+    # Force version downgrade for openssl and openssl-sys crates
+    (fetchpatch {
+      url = "https://github.com/mozilla-mobile/mozilla-vpn-client/commit/5911071ea37d12401af32dcdf2a542ca5049bf2f.patch";
+      hash = "sha256-b3yOgn3Et0sYpqzUUdmlGIbzZSz13Q9HW56hyQqRnHc=";
+      revert = true;
+    })
+    # [2.15] Restore qtglean/Cargo.lock
+    (fetchpatch {
+      url = "https://github.com/mozilla-mobile/mozilla-vpn-client/pull/7026/commits/13c1b77ee4249883a33b6ac240b3ca143b485ba1.patch";
+      hash = "sha256-L4D71zreDMLAIbP4x1as9QdNmMC1snUZSwlkKehg5yM=";
+    })
+  ];
 
   netfilter-go-modules = (buildGoModule {
-    inherit pname version src;
-    vendorSha256 = "KFYMim5U8WlJHValvIBQgEN+17SDv0JVbH03IiyfDc0=";
+    inherit pname version src patches;
     modRoot = "linux/netfilter";
+    vendorHash = "sha256-Cmo0wnl0z5r1paaEf1MhCPbInWeoMhGjnxCxGh0cyO8=";
   }).go-modules;
 
-  cargoRoot = "extension/bridge";
+  extensionBridgeDeps = rustPlatform.fetchCargoTarball {
+    inherit src patches;
+    name = "${pname}-${version}-extension-bridge";
+    preBuild = "cd extension/bridge";
+    hash = "sha256-R/9ePEhc4qVgg3WC5ng+cD88K/N3PTnx4QWyaZZfRds=";
+  };
+  signatureDeps = rustPlatform.fetchCargoTarball {
+    inherit src patches;
+    name = "${pname}-${version}-signature";
+    preBuild = "cd signature";
+    hash = "sha256-27g2qnnUrxbThM1cHZquQgWQLWDtZaBnlf8PjvQtBJU=";
+  };
+  qtgleanDeps = rustPlatform.fetchCargoTarball {
+    inherit src patches;
+    name = "${pname}-${version}-qtglean";
+    preBuild = "cd qtglean";
+    hash = "sha256-cW+nf+Dho+eSzOBo3xhxki7NXpg0wd5ZM9OMA6iOUl4=";
+  };
 
 in
 stdenv.mkDerivation {
-  inherit pname version src cargoRoot;
+  inherit pname version src patches;
 
   buildInputs = [
+    libsecret
     polkit
     qt5compat
     qtbase
-    qtcharts
     qtnetworkauth
+    qtsvg
     qtwebsockets
   ];
   nativeBuildInputs = [
@@ -56,35 +90,63 @@ stdenv.mkDerivation {
     pkg-config
     python3
     python3.pkgs.glean-parser
-    python3.pkgs.lxml
     python3.pkgs.pyyaml
     python3.pkgs.setuptools
     rustPlatform.cargoSetupHook
-    rustPlatform.rust.cargo
-    which
+    cargo
+    rustc
     wrapQtAppsHook
   ];
 
-  cargoDeps = rustPlatform.fetchCargoTarball {
-    inherit src;
-    name = "${pname}-${version}";
-    preBuild = "cd ${cargoRoot}";
-    hash = "sha256-lJfDLyoVDSFiZyWcBTI085MorWHPcNW4i7ua1+Ip3rA=";
-  };
+  postUnpack = ''
+    pushd source/extension/bridge
+    cargoDeps='${extensionBridgeDeps}' cargoSetupPostUnpackHook
+    extensionBridgeDepsCopy="$cargoDepsCopy"
+    popd
+
+    pushd source/signature
+    cargoDeps='${signatureDeps}' cargoSetupPostUnpackHook
+    signatureDepsCopy="$cargoDepsCopy"
+    popd
+
+    pushd source/qtglean
+    cargoDeps='${qtgleanDeps}' cargoSetupPostUnpackHook
+    qtgleanDepsCopy="$cargoDepsCopy"
+    popd
+  '';
+  dontCargoSetupPostUnpack = true;
 
   postPatch = ''
-    for file in linux/*.service linux/extra/*.desktop src/platforms/linux/daemon/*.service; do
-      substituteInPlace "$file" --replace /usr/bin/mozillavpn "$out/bin/mozillavpn"
-    done
+    substituteInPlace src/apps/vpn/platforms/linux/daemon/org.mozilla.vpn.dbus.service --replace /usr/bin/mozillavpn "$out/bin/mozillavpn"
 
     substituteInPlace scripts/addon/build.py \
       --replace 'qtbinpath = args.qtpath' 'qtbinpath = "${qttools.dev}/bin"' \
       --replace 'rcc = os.path.join(qtbinpath, rcc_bin)' 'rcc = "${qtbase.dev}/libexec/rcc"'
 
-    substituteInPlace src/cmake/linux.cmake \
+    substituteInPlace src/apps/vpn/cmake/linux.cmake \
+      --replace '/etc/xdg/autostart' "$out/etc/xdg/autostart" \
+      --replace '${"$"}{POLKIT_POLICY_DIR}' "$out/share/polkit-1/actions" \
+      --replace '/usr/share/dbus-1' "$out/share/dbus-1" \
       --replace '${"$"}{SYSTEMD_UNIT_DIR}' "$out/lib/systemd/system"
 
+    substituteInPlace extension/CMakeLists.txt \
+      --replace '/etc' "$out/etc"
+
     ln -s '${netfilter-go-modules}' linux/netfilter/vendor
+
+    pushd extension/bridge
+    cargoDepsCopy="$extensionBridgeDepsCopy" cargoSetupPostPatchHook
+    popd
+
+    pushd signature
+    cargoDepsCopy="$signatureDepsCopy" cargoSetupPostPatchHook
+    popd
+
+    pushd qtglean
+    cargoDepsCopy="$qtgleanDepsCopy" cargoSetupPostPatchHook
+    popd
+
+    cargoSetupPostPatchHook() { true; }
   '';
 
   cmakeFlags = [
@@ -92,6 +154,7 @@ stdenv.mkDerivation {
     "-DQT_LUPDATE_EXECUTABLE=${qttools.dev}/bin/lupdate"
     "-DQT_LRELEASE_EXECUTABLE=${qttools.dev}/bin/lrelease"
   ];
+  dontFixCmake = true;
 
   qtWrapperArgs =
     [ "--prefix" "PATH" ":" (lib.makeBinPath [ wireguard-tools ]) ];