diff options
author | Bas van Dijk <v.dijk.bas@gmail.com> | 2017-01-25 00:00:54 +0100 |
---|---|---|
committer | Peter Simons <simons@cryp.to> | 2017-02-02 10:57:00 +0100 |
commit | dfcc9e2994eba3544ddfe303be5128ff17195ca6 (patch) | |
tree | 532775a8656a8e03b71bc360ee9c94b5f49072ea /pkgs/top-level/haskell-packages.nix | |
parent | 8a0d1bcf8bcc5b09a857769bfb3f1e45e9f73249 (diff) | |
download | nixpkgs-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.nix | 42 |
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. |