[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