[Nix-dev] Fwd: Haskell doctest

Mateusz Kowalczyk fuuzetsu at fuuzetsu.co.uk
Sun Nov 16 22:15:29 CET 2014


On 11/12/2014 06:10 PM, Benno Fünfstück wrote:
> Ah sorry, I wrote that on my phone so the answer was a bit short :).
> 
> You just type eval $buildPhase while you're in nix-shell. eval is a bash
> builtin to execute a bash script from a string, and the buildPhase
> environment variable contains the script that nix would use to build your
> project when you'd use nix-build or similar. So eval $buildPhase just
> builds your project but it also sets the GHC_PACKAGE_PATH environment
> variable at the end, so that the tests can find the packages.
> 
> Since nix uses the `Setup.hs` file directly instead of going through
> cabal-install, you will need to run eval $configurePhase once so that
> Setup.hs gets compiled into the Setup executable and the project is
> configured.
> 
> --
> Benno

If you insist on using ‘cabal *’, you could also just run ‘echo
$buildPhase’ and run the command that sets GHC_PACKAGE_PATH by hand.

Personally I recommend you don't use cabal commands but instead eval
relevant phases ($configurePhase, $buildPhase, $checkPhase). It lets you
avoid gotchas such as this one.

> 2014-11-12 18:52 GMT+01:00 Richard Wallace <rwallace at thewallacepack.net>:
> 
>> Hi Benno,
>>
>> Thanks for the response.  I'm not sure what you mean by "eval $buildPhase"
>> and where I would put that.  I'm stilling finding my feet with nix. :)
>>
>> Thanks again,
>> Rich
>>
>> On Tue, Nov 11, 2014 at 11:01 PM, Benno Fünfstück <
>> benno.fuenfstueck at gmail.com> wrote:
>>
>>> Hello Rich,
>>>
>>> GHC_PACKAGE_PATH needs to be set correctly for doctests to work. The
>>> problem with this is that cabal doesn't work with GHC_PACKAGE_PATH set, so
>>> you can't set it permanently.
>>>
>>> If you use "eval $buildPhase", that will build the project and set
>>> GHC_PACKAGE_PATH.  doctests should work after that. You might need to run
>>> eval "$configurePhase" before though, to compile Setup.hs.
>>>
>>> --
>>> Benno
>>>
>>> Am 12.11.2014 00:51 schrieb "Richard Wallace" <
>>> rwallace at thewallacepack.net>:
>>>
>>>>
>>>> Hello all,
>>>>
>>>> We've got a Haskell project that we're using nix to ensure a consistent
>>> build environment.  I'm working on adding tests with doctest, and am
>>> running into trouble.  Here are the default.nix and shell.nix files we're
>>> using (many dependencies elided for brevity)
>>>>
>>>> # This file was auto-generated by cabal2nix. Please do NOT edit
>>> manually!
>>>>
>>>> { cabal, aeson, lens, doctest,
>>>> }:
>>>>
>>>> cabal.mkDerivation (self: {
>>>>   pname = "hiberico";
>>>>   version = "1";
>>>>   src = ./.;
>>>>   isLibrary = false;
>>>>   isExecutable = true;
>>>>   buildDepends = [
>>>>     aeson lens
>>>>   ];
>>>>   testDepends = [
>>>>     doctest aeson lens
>>>>   ];
>>>>
>>>>   meta = {
>>>>     description = "Iberico in Haskell";
>>>>     license = "unknown";
>>>>     platforms = self.ghc.meta.platforms;
>>>>   };
>>>> })
>>>>
>>>> # shell.nix
>>>> let
>>>>    nixpkgs = (import <nixpkgs> {}).fetchgit {
>>>>     url = "git://github.com/NixOS/nixpkgs.git";
>>>>     rev = "c758ec756b60a2161a5d7369d07d3eb2fe04a5aa";
>>>>     sha256 = "01x01gwj2pm165sdhb1fxfdzl638kksx79dyadji5f2wp4hssk8m";
>>>>   };
>>>> in
>>>>   { system ? builtins.currentSystem
>>>>   , pkgs ? import nixpkgs { inherit system; }
>>>>   , haskellPackages ? pkgs.haskellPackages.override {
>>>>       extension = self: super: {
>>>>         hiberico = self.callPackage ./. {};
>>>>       };
>>>>     }
>>>>   }:
>>>>   pkgs.lib.overrideDerivation haskellPackages.hiberico (attrs: {
>>>>     buildInputs = [
>>>>       haskellPackages.cabalInstall
>>>>     ] ++ attrs.buildInputs;
>>>>   })
>>>>
>>>>
>>>> When I enter the nix-shell (`nix-shell --pure shell.nix`), the
>>> environment seems setup correctly.  I can run `cabal configure
>>> --enable-tests && cabal build && cabal test` and it gets to the point where
>>> doctest is parsing the source files and I get
>>>>
>>>> Building hiberico-1...
>>>> Preprocessing executable 'hiberico' for hiberico-1...
>>>> Preprocessing test suite 'doctests' for hiberico-1...
>>>> Running 1 test suites...
>>>> Test suite doctests: RUNNING...
>>>>
>>>> src/Topology.hs:11:18:
>>>>     Could not find module 'Data.Aeson'
>>>>     Perhaps you meant Data.Version (from base)
>>>>     Use -v to see a list of the files searched for.
>>>>
>>>> I've added all the dependencies to the doctests suite in the cabal
>>> file. Is there something else I'm missing?
>>>>
>>>> Thanks,
>>>> Rich
>>>>
>>>> _______________________________________________
>>>> nix-dev mailing list
>>>> nix-dev at lists.science.uu.nl
>>>> http://lists.science.uu.nl/mailman/listinfo/nix-dev
>>>>
>>>
>>>
>>
> 
> 
> 
> _______________________________________________
> nix-dev mailing list
> nix-dev at lists.science.uu.nl
> http://lists.science.uu.nl/mailman/listinfo/nix-dev
> 


-- 
Mateusz K.


More information about the nix-dev mailing list