1{ lib, writeText, haskellPackages, cabal-install }:
2
3(haskellPackages.shellFor {
4 packages = p: [ p.constraints p.linear ];
5 # WARNING: When updating this, make sure that the libraries passed to
6 # `extraDependencies` are not actually transitive dependencies of libraries in
7 # `packages` above. We explicitly want to test that it is possible to specify
8 # `extraDependencies` that are not in the closure of `packages`.
9 extraDependencies = p: { libraryHaskellDepends = [ p.conduit ]; };
10 nativeBuildInputs = [ cabal-install ];
11 phases = [ "unpackPhase" "buildPhase" "installPhase" ];
12 unpackPhase = ''
13 sourceRoot=$(pwd)/scratch
14 mkdir -p "$sourceRoot"
15 cd "$sourceRoot"
16 tar -xf ${haskellPackages.constraints.src}
17 tar -xf ${haskellPackages.linear.src}
18 cp ${writeText "cabal.project" "packages: constraints* linear*"} cabal.project
19 '';
20 buildPhase = ''
21 export HOME=$(mktemp -d)
22 mkdir -p $HOME/.cabal
23 touch $HOME/.cabal/config
24
25 # Check that the extraDependencies.libraryHaskellDepends arg is correctly
26 # picked up. This uses ghci to interpret a small Haskell program that uses
27 # a package from extraDependencies.
28 ghci <<EOF
29 :set -XOverloadedStrings
30 :m + Conduit
31 runResourceT $ connect (yield "done") (sinkFile "outfile")
32 EOF
33
34 if [[ "done" != "$(cat outfile)" ]]; then
35 echo "ERROR: extraDependencies appear not to be available in the environment"
36 exit 1
37 fi
38
39 # Check packages arg
40 cabal v2-build --offline --verbose constraints linear --ghc-options="-O0 -j$NIX_BUILD_CORES"
41 '';
42 installPhase = ''
43 touch $out
44 '';
45}).overrideAttrs (oldAttrs: {
46 meta =
47 let
48 oldMeta = oldAttrs.meta or {};
49 oldMaintainers = oldMeta.maintainers or [];
50 additionalMaintainers = with lib.maintainers; [ cdepillabout ];
51 allMaintainers = oldMaintainers ++ additionalMaintainers;
52 in
53 oldMeta // {
54 maintainers = allMaintainers;
55 inherit (cabal-install.meta) platforms;
56 };
57})