Merge pull request #39309 from LumiGuide/haskell.overrides
RFC: haskell: allow overriding all package sets at once
This commit is contained in:
commit
21d688f9b8
@ -666,6 +666,56 @@ prefer one built with GHC 7.8.x in the first place. However, for users who
|
||||
cannot use GHC 7.10.x at all for some reason, the approach of downgrading to an
|
||||
older version might be useful.
|
||||
|
||||
### How to override packages in all compiler-specific package sets
|
||||
|
||||
In the previous section we learned how to override a package in a single
|
||||
compiler-specific package set. You may have some overrides defined that you want
|
||||
to use across multiple package sets. To accomplish this you could use the
|
||||
technique that we learned in the previous section by repeating the overrides for
|
||||
all the compiler-specific package sets. For example:
|
||||
|
||||
```nix
|
||||
{
|
||||
packageOverrides = super: let self = super.pkgs; in
|
||||
{
|
||||
haskell = super.haskell // {
|
||||
packages = super.haskell.packages // {
|
||||
ghc784 = super.haskell.packages.ghc784.override {
|
||||
overrides = self: super: {
|
||||
my-package = ...;
|
||||
my-other-package = ...;
|
||||
};
|
||||
};
|
||||
ghc822 = super.haskell.packages.ghc784.override {
|
||||
overrides = self: super: {
|
||||
my-package = ...;
|
||||
my-other-package = ...;
|
||||
};
|
||||
};
|
||||
...
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
However there's a more convenient way to override all compiler-specific package
|
||||
sets at once:
|
||||
|
||||
```nix
|
||||
{
|
||||
packageOverrides = super: let self = super.pkgs; in
|
||||
{
|
||||
haskell = super.haskell // {
|
||||
packageOverrides = self: super: {
|
||||
my-package = ...;
|
||||
my-other-package = ...;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### How to recover from GHC's infamous non-deterministic library ID bug
|
||||
|
||||
GHC and distributed build farms don't get along well:
|
||||
|
@ -19,7 +19,10 @@ let
|
||||
inherit pkgs;
|
||||
};
|
||||
|
||||
callPackage = newScope { inherit haskellLib; };
|
||||
callPackage = newScope {
|
||||
inherit haskellLib;
|
||||
overrides = pkgs.haskell.packageOverrides;
|
||||
};
|
||||
|
||||
bootstrapPackageSet = self: super: {
|
||||
mkDerivation = drv: super.mkDerivation (drv // {
|
||||
@ -99,6 +102,9 @@ in rec {
|
||||
(name: compiler."${name}".override { enableIntegerSimple = true; }));
|
||||
};
|
||||
|
||||
# Default overrides that are applied to all package sets.
|
||||
packageOverrides = self : super : {};
|
||||
|
||||
# Always get compilers from `buildPackages`
|
||||
packages = let bh = buildPackages.haskell; in {
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user