hnix/default.nix
2018-11-22 09:49:40 -08:00

101 lines
2.9 KiB
Nix

{ compiler ? "ghc844"
, doBenchmark ? false
, doTracing ? false
# enables GHC optimizations for production use
, doOptimize ? false
# enables profiling support in GHC
, doProfiling ? false
, doStrict ? false
, rev ? "b37872d4268164614e3ecef6e1f730d48cf5a90f"
, sha256 ? "05km33sz4srf05vvmkidz3k59phm5a3k9wpj1jc6ly9yqws0dbn4"
, pkgs ?
if builtins.compareVersions builtins.nixVersion "2.0" < 0
then abort "hnix requires at least nix 2.0"
else import (builtins.fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/${rev}.tar.gz";
inherit sha256; }) {
config.allowUnfree = true;
config.allowBroken = false;
}
, returnShellEnv ? pkgs.lib.inNixShell
, mkDerivation ? null
}:
let
haskellPackages = pkgs.haskell.packages.${compiler};
drv = haskellPackages.developPackage {
root = ./.;
overrides = with pkgs.haskell.lib; self: super: {
mono-traversable = dontCheck super.mono-traversable;
megaparsec = self.callCabal2nix "megaparsec" (pkgs.fetchFromGitHub {
owner = "mrkkrp";
repo = "megaparsec";
rev = "9fff501f7794c01e2cf4a7a492f1cfef67fab19a";
sha256 = "0a9g6gpc8m9qrvldwn4chs0yqnr4dps93achg1df72lxknrpp0iy";
}) {};
}
//
(pkgs.lib.optionalAttrs (compiler == "ghc802") {
concurrent-output = doJailbreak super.concurrent-output;
})
//
(pkgs.lib.optionalAttrs (compiler != "ghcjs") {
cryptohash-md5 = doJailbreak super.cryptohash-md5;
cryptohash-sha1 = doJailbreak super.cryptohash-sha1;
cryptohash-sha256 = doJailbreak super.cryptohash-sha256;
cryptohash-sha512 = doJailbreak super.cryptohash-sha512;
serialise = dontCheck super.serialise;
ghc-datasize =
overrideCabal super.ghc-datasize (attrs: {
enableLibraryProfiling = false;
enableExecutableProfiling = false;
});
ghc-heap-view =
overrideCabal super.ghc-heap-view (attrs: {
enableLibraryProfiling = false;
enableExecutableProfiling = false;
});
});
source-overrides = pkgs.lib.optionalAttrs (compiler == "ghc802") {
lens-family-core = "1.2.1";
lens-family = "1.2.1";
};
modifier = drv: pkgs.haskell.lib.overrideCabal drv (attrs: {
buildTools = (attrs.buildTools or []) ++ [
pkgs.haskell.packages.${compiler}.cabal-install
];
enableLibraryProfiling = doProfiling;
enableExecutableProfiling = doProfiling;
testHaskellDepends = attrs.testHaskellDepends ++
[ pkgs.nix
pkgs.haskell.packages.ghc844.criterion
];
inherit doBenchmark;
configureFlags =
pkgs.stdenv.lib.optional doTracing "--flags=tracing"
++ pkgs.stdenv.lib.optional doOptimize "--flags=optimize"
++ pkgs.stdenv.lib.optional doStrict "--ghc-options=-Werror";
passthru = {
nixpkgs = pkgs;
};
});
inherit returnShellEnv;
};
in drv