New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
haskellPackages.ghcWithPackages: fix for GHC 8.10 #91999
haskellPackages.ghcWithPackages: fix for GHC 8.10 #91999
Conversation
This is building on my local Hydra - I will move it out of draft once the build completes. |
@ocharles This is just a backport of abc4f96 to 20.03, right?
|
Ok, I'll get all that sorted now. This is indeed just a cherry pick of the commit as is in master with no changes |
Ok, this will have to wait until next week as I'm travelling until Monday and I don't want to clone all of nixpkgs over mobile data 😆 |
This closes NixOS#79441. ghcWithPackages is using `ghc-pkg recache` to build its package database. By doing so, it overrides the `package.cache[.lock]` files. Details are unclear, but GHC 8.10 changed a bit the behavior. Previously, it was unconditionally replacing the files by new ones. Now it tries to open (for modification) the files. These files are symlinks to another nix derivation, which is hence read-only. This commit removes the files before running `ghc-pkg recache`, hence it will just write the new files. Tested with `haskellPackages.ghcWithPackages` (i.e. GHC 8.8) and `haskell.packages.ghc8101.ghcWithPackages` (i.e GHC 8.10) with the following nix file, at the root of the nixpkgs repository: ``` with import ./. { overlays = [ ( self: super: { haskellPackages = super.haskell.packages.ghc8101.override { overrides = selfh: superh: { th-lift-instances = super.haskell.lib.doJailbreak superh.th-lift-instances; th-expand-syns = super.haskell.lib.doJailbreak superh.th-expand-syns; th-reify-many = super.haskell.lib.doJailbreak superh.th-reify-many; th-orphans = super.haskell.lib.doJailbreak superh.th-orphans; haskell-src-meta = super.haskell.lib.doJailbreak superh.haskell-src-meta; }; }; } ) ]; }; haskellPackages.ghcWithPackages(p:[p.PyF]) ``` This will test with GHC 8.10. Comment out the `overlays` to test with GHC 8.8. (cherry picked from commit abc4f96)
8202cfd
to
a078182
Compare
@cdepillabout Ok, I think it's correct now! |
@ocharles Thanks for fixing this up! |
This closes #79441.
ghcWithPackages is using
ghc-pkg recache
to build its packagedatabase. By doing so, it overrides the
package.cache[.lock]
files.Details are unclear, but GHC 8.10 changed a bit the behavior.
Previously, it was unconditionally replacing the files by new ones. Now
it tries to open (for modification) the files. These files are symlinks
to another nix derivation, which is hence read-only.
This commit removes the files before running
ghc-pkg recache
, hence itwill just write the new files.
Tested with
haskellPackages.ghcWithPackages
(i.e. GHC 8.8) andhaskell.packages.ghc8101.ghcWithPackages
(i.e GHC 8.10) with thefollowing nix file, at the root of the nixpkgs repository:
This will test with GHC 8.10. Comment out the
overlays
to test withGHC 8.8.