Skip to content
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

haskell.compiler.ghc*Binary: make sure meta can always be evaluated #246805

Merged
merged 1 commit into from
Aug 5, 2023

Conversation

sternenseemann
Copy link
Member

The meta set of the binary GHCs is mostly independent of the used bindist (except for pname which includes variantSuffix). Thus we should make sure it can be evaluated even if no bindist is available for the platform, i.e. evaluating outPath may cause an evaluation failure, but meta.platforms not. Use case at present is to make lib.meta.availableOn work everywhere for any GHC (the normal GHCs inherit their platforms list from their respective boot compiler, at least for now).

To fix this we need to make sure that shallowly evaluating passthru doesn't force binDistUsed, since mkDerivation needs to merge passthru into the resulting derivation attribute set, thus forcing the attribute names of passthru. We can easily do this by accessing what we want to learn from ghcBinDists manually and using or to fall back to a sensible default.

Description of changes

Things done

  • Built on platform(s)
    • x86_64-linux
    • aarch64-linux
    • x86_64-darwin
    • aarch64-darwin
  • For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
  • Tested, as applicable:
  • Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
  • Tested basic functionality of all binary files (usually in ./result/bin/)
  • 23.11 Release Notes (or backporting 23.05 Release notes)
    • (Package updates) Added a release notes entry if the change is major or breaking
    • (Module updates) Added a release notes entry if the change is significant
    • (Module addition) Added a release notes entry if adding a new NixOS module
  • Fits CONTRIBUTING.md.

The `meta` set of the binary GHCs is mostly independent of the used
bindist (except for `pname` which includes `variantSuffix`). Thus we
should make sure it can be evaluated even if no bindist is available for
the platform, i.e. evaluating `outPath` may cause an evaluation failure,
but `meta.platforms` not. Use case at present is to make
`lib.meta.availableOn` work everywhere for any GHC (the normal GHCs
inherit their platforms list from their respective boot compiler, at
least for now).

To fix this we need to make sure that shallowly evaluating `passthru`
doesn't force `binDistUsed`, since `mkDerivation` needs to merge
`passthru` into the resulting derivation attribute set, thus forcing the
attribute names of `passthru`. We can easily do this by accessing what
we want to learn from `ghcBinDists` manually and using `or` to fall back
to a sensible default.
@sternenseemann
Copy link
Member Author

Testable using lib.mapAttrs (_: lib.meta.availableOn stdenv.buildPlatform) (lib.filterAttrs (n: _: lib.hasInfix "Binary" n) haskell.compiler)

@fgaz fgaz merged commit 1754458 into NixOS:master Aug 5, 2023
6 checks passed
@sternenseemann sternenseemann deleted the ghc-binary-meta-evaluable branch August 6, 2023 09:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants