Skip to content

Commit

Permalink
Add callCabal2nix to haskell packages
Browse files Browse the repository at this point in the history
Closes #22191.

(cherry picked from commit 05ee547)
Signed-off-by: Domen Kožar <domen@dev.si>
  • Loading branch information
3noch authored and domenkozar committed Feb 3, 2017
1 parent e67d70f commit 74f24c7
Showing 1 changed file with 26 additions and 12 deletions.
38 changes: 26 additions & 12 deletions pkgs/development/haskell-modules/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -52,18 +52,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
Expand All @@ -73,6 +81,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:
Expand Down

0 comments on commit 74f24c7

Please sign in to comment.