summary refs log tree commit diff
path: root/pkgs/top-level/haskell-packages.nix
diff options
context:
space:
mode:
authorBas van Dijk <v.dijk.bas@gmail.com>2017-01-25 00:00:54 +0100
committerPeter Simons <simons@cryp.to>2017-02-02 10:57:00 +0100
commitdfcc9e2994eba3544ddfe303be5128ff17195ca6 (patch)
tree532775a8656a8e03b71bc360ee9c94b5f49072ea /pkgs/top-level/haskell-packages.nix
parent8a0d1bcf8bcc5b09a857769bfb3f1e45e9f73249 (diff)
downloadnixpkgs-dfcc9e2994eba3544ddfe303be5128ff17195ca6.tar
nixpkgs-dfcc9e2994eba3544ddfe303be5128ff17195ca6.tar.gz
nixpkgs-dfcc9e2994eba3544ddfe303be5128ff17195ca6.tar.bz2
nixpkgs-dfcc9e2994eba3544ddfe303be5128ff17195ca6.tar.lz
nixpkgs-dfcc9e2994eba3544ddfe303be5128ff17195ca6.tar.xz
nixpkgs-dfcc9e2994eba3544ddfe303be5128ff17195ca6.tar.zst
nixpkgs-dfcc9e2994eba3544ddfe303be5128ff17195ca6.zip
ghc: support building with integer-simple and provide package sets for it
If the flag enableIntegerSimple is true GHC will be build with the GPL-free but
slower integer-simple library instead of the faster but GPLed integer-gmp
library.

The attribute `pkgs.haskell.compiler.integer-simple."${ghcVersion}"` provides a
GHC compiler build with `integer-simple`.

Similarly, the attribute `pkgs.haskell.packages.integer-simple."${ghcVersion}"`
provides a package set supporting `integer-simple`.

Closes https://github.com/NixOS/nixpkgs/pull/22121.
Closes https://github.com/NixOS/nixpkgs/issues/5493.
Diffstat (limited to 'pkgs/top-level/haskell-packages.nix')
-rw-r--r--pkgs/top-level/haskell-packages.nix42
1 files changed, 41 insertions, 1 deletions
diff --git a/pkgs/top-level/haskell-packages.nix b/pkgs/top-level/haskell-packages.nix
index 805e9560c20..7d4c06425ba 100644
--- a/pkgs/top-level/haskell-packages.nix
+++ b/pkgs/top-level/haskell-packages.nix
@@ -1,6 +1,21 @@
 { pkgs, callPackage, stdenv, buildPlatform, targetPlatform }:
 
-rec {
+let # These are attributes in compiler and packages that don't support integer-simple.
+    integerSimpleExcludes = [
+      "ghc6102Binary"
+      "ghc704Binary"
+      "ghc742Binary"
+      "ghc6104"
+      "ghc6123"
+      "ghc704"
+      "ghcjs"
+      "ghcjsHEAD"
+      "ghcCross"
+      "jhc"
+      "uhc"
+      "integer-simple"
+    ];
+in rec {
 
   lib = import ../development/haskell-modules/lib.nix { inherit pkgs; };
 
@@ -74,6 +89,17 @@ rec {
       inherit (pkgs.haskellPackages) ghcWithPackages;
     });
 
+    # The integer-simple attribute set contains all the GHC compilers
+    # build with integer-simple instead of integer-gmp.
+    integer-simple =
+      let integerSimpleGhcNames =
+            pkgs.lib.filter (name: ! builtins.elem name integerSimpleExcludes)
+                            (pkgs.lib.attrNames compiler);
+          integerSimpleGhcs = pkgs.lib.genAttrs integerSimpleGhcNames
+                                (name: compiler."${name}".override { enableIntegerSimple = true; });
+      in integerSimpleGhcs // {
+           ghcHEAD = integerSimpleGhcs.ghcHEAD.override { selfPkgs = packages.integer-simple.ghcHEAD; };
+         };
   };
 
   packages = {
@@ -142,6 +168,20 @@ rec {
       compilerConfig = callPackage ../development/haskell-modules/configuration-ghcjs.nix { };
     };
 
+    # The integer-simple attribute set contains package sets for all the GHC compilers
+    # using integer-simple instead of integer-gmp.
+    integer-simple =
+      let integerSimpleGhcNames =
+            pkgs.lib.filter (name: ! builtins.elem name integerSimpleExcludes)
+                            (pkgs.lib.attrNames packages);
+      in pkgs.lib.genAttrs integerSimpleGhcNames (name: packages."${name}".override {
+       ghc = compiler.integer-simple."${name}";
+       overrides = _self : _super : {
+         integer-simple = null;
+         integer-gmp = null;
+       };
+    });
+
     # These attributes exist only for backwards-compatibility so that we don't break
     # stack's --nix support. These attributes will disappear in the foreseeable
     # future: https://github.com/commercialhaskell/stack/issues/2259.