Add callCabal2nix to haskell packages

Closes https://github.com/NixOS/nixpkgs/pull/22191.
This commit is contained in:
3noch 2017-01-26 21:22:06 -05:00 committed by Peter Simons
parent dd934beb9f
commit 05ee54782e
1 changed files with 26 additions and 12 deletions

View File

@ -55,18 +55,26 @@ let
inherit packages; inherit packages;
}; };
hackage2nix = name: version: pkgs.stdenv.mkDerivation { haskellSrc2nix = { name, src, sha256 ? null }:
name = "cabal2nix-${name}-${version}"; let
buildInputs = [ pkgs.cabal2nix ]; sha256Arg = if isNull sha256 then "" else ''--sha256="${sha256}"'';
phases = ["installPhase"]; in pkgs.stdenv.mkDerivation {
LANG = "en_US.UTF-8"; name = "cabal2nix-${name}";
LOCALE_ARCHIVE = pkgs.lib.optionalString pkgs.stdenv.isLinux "${pkgs.glibcLocales}/lib/locale/locale-archive"; buildInputs = [ pkgs.cabal2nix ];
installPhase = '' phases = ["installPhase"];
export HOME="$TMP" LANG = "en_US.UTF-8";
mkdir $out LOCALE_ARCHIVE = pkgs.lib.optionalString pkgs.stdenv.isLinux "${pkgs.glibcLocales}/lib/locale/locale-archive";
hash=$(sed -e 's/.*"SHA256":"//' -e 's/".*$//' ${all-cabal-hashes}/${name}/${version}/${name}.json) installPhase = ''
cabal2nix --compiler=${self.ghc.name} --system=${stdenv.system} --sha256=$hash ${all-cabal-hashes}/${name}/${version}/${name}.cabal >$out/default.nix 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 in
@ -76,6 +84,12 @@ let
callHackage = name: version: self.callPackage (hackage2nix name version); 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); ghcWithPackages = selectFrom: withPackages (selectFrom self);
ghcWithHoogle = selectFrom: ghcWithHoogle = selectFrom: