summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorVasyl Solovei <svsdep@gmail.com>2018-02-24 08:38:36 +0200
committerVasyl Solovei <svsdep@gmail.com>2018-02-24 12:53:19 +0200
commite3c5cf39bcfd8b66017f91ef29bc90f5e4584a67 (patch)
tree91522f9386c87335c676b65e2303b7bdcd71dace /pkgs
parentc8b1b341237da7c05a38e91c6c0203d3709b2075 (diff)
downloadnixpkgs-e3c5cf39bcfd8b66017f91ef29bc90f5e4584a67.tar
nixpkgs-e3c5cf39bcfd8b66017f91ef29bc90f5e4584a67.tar.gz
nixpkgs-e3c5cf39bcfd8b66017f91ef29bc90f5e4584a67.tar.bz2
nixpkgs-e3c5cf39bcfd8b66017f91ef29bc90f5e4584a67.tar.lz
nixpkgs-e3c5cf39bcfd8b66017f91ef29bc90f5e4584a67.tar.xz
nixpkgs-e3c5cf39bcfd8b66017f91ef29bc90f5e4584a67.tar.zst
nixpkgs-e3c5cf39bcfd8b66017f91ef29bc90f5e4584a67.zip
keepass: bring back and update plugins load patches
Plugins loading was broken as those patches were removed
in latest release. I brought patches back and updated them
onto 2.38 release code base.

This closes #35446.
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/applications/misc/keepass/default.nix29
-rw-r--r--pkgs/applications/misc/keepass/keepass-plugins-load.patch1
-rw-r--r--pkgs/applications/misc/keepass/keepass-plugins.patch13
3 files changed, 37 insertions, 6 deletions
diff --git a/pkgs/applications/misc/keepass/default.nix b/pkgs/applications/misc/keepass/default.nix
index 911be6721ac..5e492fc621f 100644
--- a/pkgs/applications/misc/keepass/default.nix
+++ b/pkgs/applications/misc/keepass/default.nix
@@ -1,12 +1,6 @@
 { stdenv, lib, fetchurl, buildDotnetPackage, substituteAll, makeWrapper, makeDesktopItem,
   unzip, icoutils, gtk2, xorg, xdotool, xsel, plugins ? [] }:
 
-# KeePass looks for plugins in under directory in which KeePass.exe is
-# located. It follows symlinks where looking for that directory, so
-# buildEnv is not enough to bring KeePass and plugins together.
-#
-# This derivation patches KeePass to search for plugins in specified
-# plugin derivations in the Nix store and nowhere else.
 with builtins; buildDotnetPackage rec {
   baseName = "keepass";
   version = "2.38";
@@ -29,6 +23,29 @@ with builtins; buildDotnetPackage rec {
     })
   ];
 
+  # KeePass looks for plugins in under directory in which KeePass.exe is
+  # located. It follows symlinks where looking for that directory, so
+  # buildEnv is not enough to bring KeePass and plugins together.
+  #
+  # This derivation patches KeePass to search for plugins in specified
+  # plugin derivations in the Nix store and nowhere else.
+  pluginLoadPathsPatch =
+    let outputLc = toString (add 7 (length plugins));
+        patchTemplate = readFile ./keepass-plugins.patch;
+        loadTemplate  = readFile ./keepass-plugins-load.patch;
+        loads =
+          lib.concatStrings
+            (map
+              (p: replaceStrings ["$PATH$"] [ (unsafeDiscardStringContext (toString p)) ] loadTemplate)
+              plugins);
+    in replaceStrings ["$OUTPUT_LC$" "$DO_LOADS$"] [outputLc loads] patchTemplate;
+
+  passAsFile = [ "pluginLoadPathsPatch" ];
+  postPatch = ''
+    sed -i 's/\r*$//' KeePass/Forms/MainForm.cs
+    patch -p1 <$pluginLoadPathsPatchPath
+  '';
+
   preConfigure = ''
     rm -rvf Build/*
     find . -name "*.sln" -print -exec sed -i 's/Format Version 10.00/Format Version 11.00/g' {} \;
diff --git a/pkgs/applications/misc/keepass/keepass-plugins-load.patch b/pkgs/applications/misc/keepass/keepass-plugins-load.patch
new file mode 100644
index 00000000000..ca52e7ef191
--- /dev/null
+++ b/pkgs/applications/misc/keepass/keepass-plugins-load.patch
@@ -0,0 +1 @@
++			m_pluginManager.LoadAllPlugins("$PATH$/lib/dotnet/keepass", SearchOption.TopDirectoryOnly, new string[] {});
diff --git a/pkgs/applications/misc/keepass/keepass-plugins.patch b/pkgs/applications/misc/keepass/keepass-plugins.patch
new file mode 100644
index 00000000000..cde6e7252bc
--- /dev/null
+++ b/pkgs/applications/misc/keepass/keepass-plugins.patch
@@ -0,0 +1,13 @@
+diff --git a/KeePass/Forms/MainForm.cs b/KeePass/Forms/MainForm.cs
+index 3d5fca0..4c3f3d4 100644
+--- a/KeePass/Forms/MainForm.cs
++++ b/KeePass/Forms/MainForm.cs
+@@ -406,7 +406,$OUTPUT_LC$ @@ namespace KeePass.Forms
+ 			m_pluginManager.Initialize(m_pluginDefaultHost);
+ 
+ 			m_pluginManager.UnloadAllPlugins();
+-			if(AppPolicy.Current.Plugins) m_pluginManager.LoadAllPlugins();
+$DO_LOADS$+
+ 
+ 			// Delete old files *after* loading plugins (when timestamps
+ 			// of loaded plugins have been updated already)