pkgsMusl, pkgsi686Linux, pkgsStatic: fix infinite recursion with overlays
Consider example: $ nix-instantiate ./nixos -A system --arg configuration ' { boot.isContainer = true; nixpkgs.overlays = [ (self: super: { nix = self.pkgsStatic.nix; }) ]; }' When resolving package through overlays, we figure out that nix == self.pkgsStatic.nix => nix == (import <nixpkgs> { inherit overlays; }).nix => nix == (import <nixpkgs> { overlays = [(self: super: { nix = self.pkgsStatic.nix; })];}).nix and we enter infinite recursion of nixpkgs evaluations. The proper fix should terminate recursion by assigning self fixpoint to inner custom package set. But I get infinite recursion somehow, so I use `super`. It is less correct modulo deep custom overrides, but behaves correctly for simple cases and doesn't OOM evaluator. Fixes https://github.com/NixOS/nixpkgs/issues/57984
This commit is contained in:
parent
5699e8edc7
commit
f72903864d
@ -135,6 +135,9 @@ let
|
|||||||
# default GNU libc on Linux systems. Non-Linux systems are not
|
# default GNU libc on Linux systems. Non-Linux systems are not
|
||||||
# supported.
|
# supported.
|
||||||
pkgsMusl = if stdenv.hostPlatform.isLinux then nixpkgsFun {
|
pkgsMusl = if stdenv.hostPlatform.isLinux then nixpkgsFun {
|
||||||
|
overlays = [ (self': super': {
|
||||||
|
pkgsMusl = super';
|
||||||
|
})] ++ overlays;
|
||||||
${if stdenv.hostPlatform == stdenv.buildPlatform
|
${if stdenv.hostPlatform == stdenv.buildPlatform
|
||||||
then "localSystem" else "crossSystem"} = {
|
then "localSystem" else "crossSystem"} = {
|
||||||
parsed = stdenv.hostPlatform.parsed // {
|
parsed = stdenv.hostPlatform.parsed // {
|
||||||
@ -151,6 +154,9 @@ let
|
|||||||
# All packages built for i686 Linux.
|
# All packages built for i686 Linux.
|
||||||
# Used by wine, firefox with debugging version of Flash, ...
|
# Used by wine, firefox with debugging version of Flash, ...
|
||||||
pkgsi686Linux = if stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isx86 then nixpkgsFun {
|
pkgsi686Linux = if stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isx86 then nixpkgsFun {
|
||||||
|
overlays = [ (self': super': {
|
||||||
|
pkgsi686Linux = super';
|
||||||
|
})] ++ overlays;
|
||||||
${if stdenv.hostPlatform == stdenv.buildPlatform
|
${if stdenv.hostPlatform == stdenv.buildPlatform
|
||||||
then "localSystem" else "crossSystem"} = {
|
then "localSystem" else "crossSystem"} = {
|
||||||
parsed = stdenv.hostPlatform.parsed // {
|
parsed = stdenv.hostPlatform.parsed // {
|
||||||
@ -176,6 +182,9 @@ let
|
|||||||
# Fully static packages.
|
# Fully static packages.
|
||||||
# Currently uses Musl on Linux (couldn’t get static glibc to work).
|
# Currently uses Musl on Linux (couldn’t get static glibc to work).
|
||||||
pkgsStatic = nixpkgsFun ({
|
pkgsStatic = nixpkgsFun ({
|
||||||
|
overlays = [ (self': super': {
|
||||||
|
pkgsStatic = super';
|
||||||
|
})] ++ overlays;
|
||||||
crossOverlays = [ (import ./static.nix) ];
|
crossOverlays = [ (import ./static.nix) ];
|
||||||
} // lib.optionalAttrs stdenv.hostPlatform.isLinux {
|
} // lib.optionalAttrs stdenv.hostPlatform.isLinux {
|
||||||
crossSystem = {
|
crossSystem = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user