about summary refs log tree commit diff
path: root/pkgs/top-level/perl-packages.nix
diff options
context:
space:
mode:
authorvolth <volth@volth.com>2019-04-09 14:49:47 +0000
committervolth <volth@volth.com>2019-04-12 09:09:06 +0000
commit03eaa480bd7a649e0cfc4f8479fc6deba279eb48 (patch)
treee2f50d4f7565a7a399a40f2b5013332ac6b79d2f /pkgs/top-level/perl-packages.nix
parent68f7f25706225aef65bcac95dc28c51ccd116941 (diff)
downloadnixlib-03eaa480bd7a649e0cfc4f8479fc6deba279eb48.tar
nixlib-03eaa480bd7a649e0cfc4f8479fc6deba279eb48.tar.gz
nixlib-03eaa480bd7a649e0cfc4f8479fc6deba279eb48.tar.bz2
nixlib-03eaa480bd7a649e0cfc4f8479fc6deba279eb48.tar.lz
nixlib-03eaa480bd7a649e0cfc4f8479fc6deba279eb48.tar.xz
nixlib-03eaa480bd7a649e0cfc4f8479fc6deba279eb48.tar.zst
nixlib-03eaa480bd7a649e0cfc4f8479fc6deba279eb48.zip
perl: add .withPackages
Diffstat (limited to 'pkgs/top-level/perl-packages.nix')
-rw-r--r--pkgs/top-level/perl-packages.nix23
1 files changed, 21 insertions, 2 deletions
diff --git a/pkgs/top-level/perl-packages.nix b/pkgs/top-level/perl-packages.nix
index 0d6e1c7bfc6e..cc5b22c0c1b3 100644
--- a/pkgs/top-level/perl-packages.nix
+++ b/pkgs/top-level/perl-packages.nix
@@ -12,14 +12,33 @@
 assert stdenv.lib.versionAtLeast perl.version "5.28.1";
 let
   inherit (stdenv.lib) maintainers;
-  self = _self // overrides;
+  self = _self // (overrides pkgs);
   _self = with self; {
 
   inherit perl;
 
   callPackage = pkgs.newScope self;
 
-  buildPerlPackage = callPackage ../development/perl-modules/generic { };
+  # Check whether a derivation provides a perl module.
+  hasPerlModule = drv: drv ? perlModule ;
+
+  requiredPerlModules = drvs: let
+    modules = stdenv.lib.filter hasPerlModule drvs;
+  in stdenv.lib.unique ([perl] ++ modules ++ stdenv.lib.concatLists (stdenv.lib.catAttrs "requiredPerlModules" modules));
+
+  # Convert derivation to a perl module.
+  toPerlModule = drv:
+    drv.overrideAttrs( oldAttrs: {
+      # Use passthru in order to prevent rebuilds when possible.
+      passthru = (oldAttrs.passthru or {}) // {
+        perlModule = perl;
+        requiredPerlModules = requiredPerlModules drv.propagatedBuildInputs;
+      };
+    });
+
+  buildPerlPackage = callPackage ../development/perl-modules/generic {
+    inherit toPerlModule;
+  };
 
   # Helper functions for packages that use Module::Build to build.
   buildPerlModule = { buildInputs ? [], ... } @ args: