[Nix-dev] Overriding packages (was Re: Kernel headers)

Marc Weber marco-oweber at gmx.de
Thu Aug 14 17:36:37 CEST 2008


Oh huu? Wow.. Didn't knew you can complite things as well *lol*

> > Write something like
> > kernelHeaders =
> > ~  let kernelHeadersVersion = getConfig
> > ~                               ["kernelHeaders" "version"]
> > ~                               "2.6.23";
> > ~  in
> > ~    if kernelHeadersVersion == "2.6.23" then
> > ~      kernelHeaders_2_6_23 else
> > ~    if kernelHeadersVersion == "2.6.22" then
> > ~      kernelHeaders_2_6_22 else
> > ~    if kernelHeadersVersion == "2.6.18" then
> > ~      kernelHeaders_2_6_18 else
> > ~    abort "Unknown kernelHeaders version.";
*shrug*

I'd use
kernelHeaders = __getAttr "kernelHeaders_"+(getConfig ["kernelHeaders "version"] "2.6.23") pkgs;

or using your style:
kernelHeaders = (getConfig ["kernelHeaders "version"] (pkgs : pkgs.kernelHeaders_2_6_23)) pkgs;

which would become when applying the next change proposal:
kernelHeaders = (getConfig ["kernelHeaders "version"] kernelHeaders_2_6_23);

>    {
>      overrides = pkgs: {
>        kernelHeaders = pkgs.kernelHeaders_2_6_18;
>      }
>    }
I'd like to propose the same change as we've done in configuration.nix.
using pkgs : {
 # various custom options/ settings here
  kernelHeaders = kernelHeaders_2_6_18;
               # ^^ no longer repeat the pkgs : pkgs. each time
}

>  where "pkgs" is the original set of packages.  (As an added benefit, we 
>  wouldn't have to have config options for every obscure feature, since you 
>  could always define your own override, like
>    {
>      overrides = pkgs: {
>        subversion = import .../subversion {
>          stdenv = pkgs.overrideGCC pkgs.stdenv pkgs.gcc34;
>          bdbSupport = true;
>          httpServer = true;
>          sslSupport = false;
>          ... more silly options ...
>        };
>      };
>    }
should this only override gcc in this package or in this package and all
dependencies?

By the way I encountered the kernelHeader trouble when rebuilding
something.. (nvidia - drivers?) the fix was to use 2.6.25 kernel headers
I have a similar problem now trying to compile gcc with --target=avr
I need to use recent kernel headers as well But in this case it's more
complicated:

dependencies:
kernelHeaders -> glibc -> application_or_lib

Now we'd like to override default 2.6.23 kernel headers this way:
kernelHeaders -> glibc -> application_or_lib { kernelHeaders = 2.6.25 }

getting
kernelHeaders -> glibc { kernelHeaders = 2.6.25 } -> application_or_lib { kernelHeaders = 2.6.25 }
right? (is not supported right now)

This would result in passing options heavily replacing each
attribute in all-packages by a function or we need to using somthing
like the idea of Michael Raskin:

args: with args; lib.composedArgs (args2 : stdenv.mkDerivation {
 name = "application_or_lib"
 buildInputs = [ (glibc.meta.function { kernelHeaders = args2.kernelHeaders; } null) ];
} args ) null;

        . o O ( What a mess )
Marc Weber


I'd cry for some syntactic suggar then :)



More information about the nix-dev mailing list