Skip to content

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

Merged
fgaz merged 1 commit intoNixOS:masterfrom
sternenseemann:ghc-binary-meta-evaluable
Aug 5, 2023
Merged

haskell.compiler.ghc*Binary: make sure meta can always be evaluated#246805
fgaz merged 1 commit intoNixOS:masterfrom
sternenseemann:ghc-binary-meta-evaluable

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.
@github-actions github-actions bot added the 6.topic: haskell General-purpose, statically typed, purely functional programming language label Aug 2, 2023
@sternenseemann
Copy link
Member Author

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

@ofborg ofborg bot added 10.rebuild-darwin: 0 This PR does not cause any packages to rebuild on Darwin. 10.rebuild-linux: 0 This PR does not cause any packages to rebuild on Linux. labels Aug 2, 2023
@sternenseemann sternenseemann requested a review from fgaz August 3, 2023 11:12
@fgaz fgaz merged commit 1754458 into NixOS:master Aug 5, 2023
@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

Labels

6.topic: haskell General-purpose, statically typed, purely functional programming language 10.rebuild-darwin: 0 This PR does not cause any packages to rebuild on Darwin. 10.rebuild-linux: 0 This PR does not cause any packages to rebuild on Linux.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants