depot/third_party/nixpkgs/pkgs/test/haskell/cabalSdist/default.nix

55 lines
1.7 KiB
Nix

{
lib,
haskell,
haskellPackages,
runCommand,
}:
let
src = lib.fileset.toSource {
root = ./local;
fileset = lib.fileset.unions [
./local/app
./local/CHANGELOG.md
./local/local.cabal
];
};
# This prevents the source from depending on the formatting of the ./local/generated.nix file
localRaw = haskell.lib.compose.overrideSrc {
inherit src;
} (haskellPackages.callPackage ./local/generated.nix { });
in
lib.recurseIntoAttrs rec {
helloFromCabalSdist = haskellPackages.buildFromCabalSdist haskellPackages.hello;
# A more complicated example with a cabal hook.
hercules-ci-cnix-store = haskellPackages.buildFromCabalSdist haskellPackages.hercules-ci-cnix-store;
localFromCabalSdist = haskellPackages.buildFromCabalSdist localRaw;
# NOTE: ./local refers to the "./." path in `./local/generated.nix`.
# This test makes sure that localHasNoDirectReference can actually fail if
# it doesn't do anything. If this test fails, either the test setup was broken,
# or Haskell packaging has changed the way `src` is treated in such a way that
# either the test or the design of `buildFromCabalSdist` needs to be reconsidered.
assumptionLocalHasDirectReference =
runCommand "localHasDirectReference"
{
drvPath = builtins.unsafeDiscardOutputDependency localRaw.drvPath;
}
''
grep ${src} $drvPath >/dev/null
touch $out
'';
localHasNoDirectReference =
runCommand "localHasNoDirectReference"
{
drvPath = builtins.unsafeDiscardOutputDependency localFromCabalSdist.drvPath;
}
''
grep -v ${src} $drvPath >/dev/null
touch $out
'';
}