diff options
Diffstat (limited to 'nixpkgs/pkgs/tools/networking/mozillavpn/default.nix')
-rw-r--r-- | nixpkgs/pkgs/tools/networking/mozillavpn/default.nix | 107 |
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 ]) ]; |