[Nix-dev] Debugging a haskellPackages deep override gone wrong

Benno Fünfstück benno.fuenfstueck at gmail.com
Sun Feb 21 17:00:32 CET 2016


Oops, small to the code example: the line should be `let parent =
(oldArgs.overrides or (_: _: {})) new old` (new instead of parent in the
second to last word)

Benno Fünfstück <benno.fuenfstueck at gmail.com> schrieb am So., 21. Feb. 2016
um 16:59 Uhr:

> Hi Kosyrev,
>
> The problem here is most likely that ghcOrig is already passed an
> overrides argument, so you need to preserve the changes done by that:
>
> ghc = ghcOrig.override (oldArgs: {
>
>   overrides = with haskell.lib; new: old:
>
>     let parent = (oldArgs.overrides or (_: _: {})) parent old;
>
>     in parent // {
>
>      # your overrides go here
>
>     };
>
> });
>
>
> Unfortunately, I can't tell you a way you could have found this out
> yourself other than either a) [this is how i've found it] already knowing
> about this particular source of errors or b) messing around and reading
> nixpkgs code till you eventually somehow get the idea that this is
> happening (tbh, I can't tell you how I've managed to find the source of
> this the first time it happenend to me. Perhaps I've had something more
> obvious happen than just a missing dependency?). We simply don't have good
> debugging tools for nix yet.
>
>
> Regards,
>
> Benno
>
> Kosyrev Serge <_deepfire at feelingofgreen.ru> schrieb am So., 21. Feb. 2016
> 13:44:
>
>> Good day folks!
>>
>> I'm facing a problem of a .drv generation gone wrong -- it's missing an
>> input reference.  What I would like is some pointers to how go about
>> debugging it.
>>
>> First an overview:
>>
>> What I have is a Nix expression which:
>>
>>   - depends on a set of haskell packages A, which in turn
>>     - pull in among others a package B (actually, doctest)
>>       - which I have to override (it's broken in GHC8).
>>
>> But when I perform the override, another package C
>> (comonad, which depends on doctest) breaks, due to a missing input --
>> which shouldn't be missing, at least according to its expression.
>>
>> Now, the details:
>>
>> I accomplish this deep override with the following incantation in
>> default.nix:
>>
>> ,----
>> | let
>> |   pkgs     = (import <nixpkgs> {}).pkgs;
>> |   haskell  = pkgs.haskell;
>> |   ghcOrig  = haskell.packages.ghc801;
>> |   ghc      = ghcOrig.override {
>> |     overrides = with haskell.lib; new: old: {
>> |       doctest = dontCheck (haskell.lib.overrideCabal old.doctest
>> (oldAttrs: {
>> |         src = pkgs.fetchgit {
>> |                 url    = https://github.com/sol/doctest;
>> |                 rev    = "d042176d41e8466de664198ef473bc2ae280e3e4";
>> |                 sha256 =
>> "15ffykfw4jmxqiziiz31yfcm8v4iq3iz9x882xvlvzi5b7b408yk";
>> |         };
>> |         };
>> |       }));
>> |     };
>> |   };
>> | in
>> |  ghc.callPackage
>> |  ({ mkDerivation, base, base-unicode-symbols, containers,
>>  linear, netwire, pkgconfig, reflection, stdenv, vector }:
>> | mkDerivation {
>> |   ...
>> | }) {}
>> `----
>>
>> What happens when I call nix-build on this expression, is that suddenly
>> a third, unrelated package starts missing a dependency:
>>
>> ,----
>> | Configuring comonad-4.2.7.2...
>> | Setup: Encountered missing dependencies:
>> | transformers >=0.2 && <0.5
>> `----
>>
>> ..whereas:
>>   - its definition in hackage-packages does indeed list "transformers"
>>   - the .drv of "comonad" being build is indeed missing a reference to
>>     "transformers"
>>
>> So, obviously, the .drv evaluation has gone wrong.
>>
>> The question is -- how would one go about debugging it?
>>
>> --
>> с уважениeм / respectfully,
>> Косырев Сергей
>> _______________________________________________
>> nix-dev mailing list
>> nix-dev at lists.science.uu.nl
>> http://lists.science.uu.nl/mailman/listinfo/nix-dev
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.science.uu.nl/pipermail/nix-dev/attachments/20160221/9cc915fc/attachment.html 


More information about the nix-dev mailing list