summary refs log tree commit diff
path: root/pkgs/development/haskell-modules/default.nix
diff options
context:
space:
mode:
author3noch <eacameron@gmail.com>2017-01-26 21:22:06 -0500
committerPeter Simons <simons@cryp.to>2017-02-01 15:04:48 +0100
commit05ee54782ea783d876b7661838b1ed78fa1257e7 (patch)
treed60999d0885a4aac859316608c27a6fba281ff05 /pkgs/development/haskell-modules/default.nix
parentdd934beb9fce6345097008c0316e18880b052129 (diff)
downloadnixpkgs-05ee54782ea783d876b7661838b1ed78fa1257e7.tar
nixpkgs-05ee54782ea783d876b7661838b1ed78fa1257e7.tar.gz
nixpkgs-05ee54782ea783d876b7661838b1ed78fa1257e7.tar.bz2
nixpkgs-05ee54782ea783d876b7661838b1ed78fa1257e7.tar.lz
nixpkgs-05ee54782ea783d876b7661838b1ed78fa1257e7.tar.xz
nixpkgs-05ee54782ea783d876b7661838b1ed78fa1257e7.tar.zst
nixpkgs-05ee54782ea783d876b7661838b1ed78fa1257e7.zip
Add callCabal2nix to haskell packages
Closes https://github.com/NixOS/nixpkgs/pull/22191.
Diffstat (limited to 'pkgs/development/haskell-modules/default.nix')
-rw-r--r--pkgs/development/haskell-modules/default.nix38
1 files changed, 26 insertions, 12 deletions
diff --git a/pkgs/development/haskell-modules/default.nix b/pkgs/development/haskell-modules/default.nix
index ef73e47f537..cf30a7699ed 100644
--- a/pkgs/development/haskell-modules/default.nix
+++ b/pkgs/development/haskell-modules/default.nix
@@ -55,18 +55,26 @@ let
         inherit packages;
       };
 
-      hackage2nix = name: version: pkgs.stdenv.mkDerivation {
-        name = "cabal2nix-${name}-${version}";
-        buildInputs = [ pkgs.cabal2nix ];
-        phases = ["installPhase"];
-        LANG = "en_US.UTF-8";
-        LOCALE_ARCHIVE = pkgs.lib.optionalString pkgs.stdenv.isLinux "${pkgs.glibcLocales}/lib/locale/locale-archive";
-        installPhase = ''
-          export HOME="$TMP"
-          mkdir $out
-          hash=$(sed -e 's/.*"SHA256":"//' -e 's/".*$//' ${all-cabal-hashes}/${name}/${version}/${name}.json)
-          cabal2nix --compiler=${self.ghc.name} --system=${stdenv.system} --sha256=$hash ${all-cabal-hashes}/${name}/${version}/${name}.cabal >$out/default.nix
-        '';
+      haskellSrc2nix = { name, src, sha256 ? null }:
+        let
+          sha256Arg = if isNull sha256 then "" else ''--sha256="${sha256}"'';
+        in pkgs.stdenv.mkDerivation {
+          name = "cabal2nix-${name}";
+          buildInputs = [ pkgs.cabal2nix ];
+          phases = ["installPhase"];
+          LANG = "en_US.UTF-8";
+          LOCALE_ARCHIVE = pkgs.lib.optionalString pkgs.stdenv.isLinux "${pkgs.glibcLocales}/lib/locale/locale-archive";
+          installPhase = ''
+            export HOME="$TMP"
+            mkdir -p "$out"
+            cabal2nix --compiler=${self.ghc.name} --system=${stdenv.system} ${sha256Arg} "${src}" > "$out/default.nix"
+          '';
+      };
+
+      hackage2nix = name: version: haskellSrc2nix {
+        name   = "${name}-${version}";
+        sha256 = ''$(sed -e 's/.*"SHA256":"//' -e 's/".*$//' "${all-cabal-hashes}/${name}/${version}/${name}.json")'';
+        src    = "${all-cabal-hashes}/${name}/${version}/${name}.cabal";
       };
 
     in
@@ -76,6 +84,12 @@ let
 
         callHackage = name: version: self.callPackage (hackage2nix name version);
 
+        # Creates a Haskell package from a source package by calling cabal2nix on the source.
+        callCabal2nix = src: self.callPackage (haskellSrc2nix {
+          inherit src;
+          name = src.name;
+        });
+
         ghcWithPackages = selectFrom: withPackages (selectFrom self);
 
         ghcWithHoogle = selectFrom: