[Nix-dev] Re: Another way to configure packages using flags ..

apfelmus apfelmus at quantentunnel.de
Wed Aug 15 13:22:31 CEST 2007


Marc Weber schrieb:
> The key function is
> getArgs which simply is some kind of map replacing all occurences of
> attribute names with the attribute values.
> Thus [ "dep1" "dep2" ] becomes [ <derivation dep1> <derivation dep2> ]
> If a dependency (requirement) hasn't been supplied an exception is
> thrown. Thus you no longer need an extra call checkArgs ..
> The second advantage is that you can no only pass a set of args but also
> a set of configure args (see confArgsReqs).. Then you won't get a set of
> derivations taken from args but a set of configure argument strings..
> flatten the set and you are done..
> 
> Any comments?
>
> #      # all-packages.nix:
> #        foo = (import [..]) {
> #          inherit opengl otherlib directx winlib spellde spellus gnused;
> #          flags = ["opengl" "spellde"];
> #        }

I'm not quite sure but is this about optional dependencies? In Haskell, 
one would simply use a  Maybe  type for that, i.e.

   ghostscript =
   { stdenv, fetchurl, libjpeg, libpng, zlib, x11 ? Nothing} :
   {
     ...
     buildInputs = [
       libjpeg libpng zlib
       (case x11 of {Nothing -> null; Just x11 -> x11})
     ];
   }

In other words, if the argument x11 supplied is Nothing then disable x11 
support, otherwise enable it. It seems that  null  takes a similar role 
as  Nothing  but unfortunately, everything can be  null  (?).

With proper helper-functions like

   maybe = mx : n : f : case mx of {Nothing -> n; Just x -> f x}
   has   = mx : maybe mx false (x:true)

we can succinctly write

   configureFlags = "
     ${if has x11 then "--with-x" else "--without-x"}
   ";

instead of

   configureFlags = "
     ${if x11Support then "--with-x" else "--without-x"}
   ";

and there is no need to supply the superfluous x11Support flag.

Regards,
apfelmus




More information about the nix-dev mailing list