aboutsummaryrefslogtreecommitdiff
path: root/compiler/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/default.nix')
-rw-r--r--compiler/default.nix96
1 files changed, 96 insertions, 0 deletions
diff --git a/compiler/default.nix b/compiler/default.nix
new file mode 100644
index 0000000..b9bd640
--- /dev/null
+++ b/compiler/default.nix
@@ -0,0 +1,96 @@
+{ boot ? import <nixpkgs> {} }:
+
+let
+
+ filtFn = root: path: type:
+ let
+ name = baseNameOf path;
+ hidden = builtins.match "\\..+" name != null;
+ nix = builtins.match ".*\\.nix" name != null;
+ r = !hidden && !nix ;
+ in builtins.trace (path + ": " + (if r then "yes" else "no")) r;
+
+ fltsrc = builtins.filterSource (filtFn (builtins.toPath ./. + "/"));
+
+ nixpkgs = boot.pkgs.fetchFromGitHub {
+ owner = "NixOS";
+ repo = "nixpkgs";
+ rev = "897ec814c9c234f3ed9d60a1a713025d2f9fab2d";
+ sha256 = "0alg5h5zmxdrnfdj94fa4yr5g7j7z3424k78aq44r0a0aqm20iy5";
+ };
+
+ config = {
+ allowUnfree = true; # for local packages
+ allowBroken = true; # some nixpkgs' nonsense
+ };
+
+ inherit (import nixpkgs { inherit config; }) pkgs;
+ inherit (pkgs) lib;
+
+ nixHaskellPackages =
+ let
+ isnix = n: _: null != builtins.match ".*\\.nix" n && n != "default.nix";
+ files = lib.filterAttrs isnix (builtins.readDir ./.);
+ in lib.mapAttrs' (n: _:
+ { name = lib.removeSuffix ".nix" n;
+ value = ./. + "/${n}";
+ }) files;
+
+ localHaskellPackages =
+ let
+ islocal = n: t: !lib.hasPrefix "." n && t == "directory";
+ files = lib.filterAttrs islocal (builtins.readDir ./.);
+ in lib.mapAttrs (n: _: fltsrc (./. + "/${n}")) files;
+
+ haskellPackages =
+ let
+
+ hlib = pkgs.haskell.lib;
+
+ set0 = pkgs.haskell.packages.ghc865;
+
+ set1 = set0.extend (
+ self: super:
+ lib.mapAttrs (_: f: super.callPackage f {}) nixHaskellPackages
+ );
+
+ set2 = set1.extend (
+ self: super:
+ lib.mapAttrs (n: d: super.callCabal2nix n d {}) localHaskellPackages
+ );
+
+ set3 = set2.extend (
+ self: super: {
+ mkDerivation = drv: super.mkDerivation (drv // {
+ buildTools = (drv.buildTools or []);
+
+ # XXX a lot of troubles are cause by tests which require fancy packages of features.
+ # XXX Enable tests for critical packages when unsure.
+ doCheck = false;
+
+ doHaddock = false;
+
+ enableExecutableProfiling = false;
+ enableLibraryProfiling = false;
+ });
+
+ primitive = self.primitive_0_7_0_0;
+ primitive-extras = self.primitive-extras_0_8;
+
+ });
+
+ set = set3.extend (
+ self: super:
+ lib.mapAttrs (n: _:
+ hlib.overrideCabal super.${n} (drv:
+ {
+ doCheck = true;
+ configureFlags = (drv.configureFlags or []) ++ [
+ "--ghc-option=-Werror"
+ ];
+ })
+ ) localHaskellPackages);
+
+ in set;
+
+in haskellPackages