nixpkgs/pkgs/tools/security/echidna/default.nix
Manuel Frischknecht 9ce833e2bc echidna: fix broken build
The overridden `hevm` package declared in `echnidna`s package
is missing its `tuple` dependency, leading to failing builds:

```
Configuring hevm-0.51.3...
CallStack (from HasCallStack):
  withMetadata, called at libraries/Cabal/Cabal/src/Distribution/Simple/Utils.hs:370:14 in Cabal-3.8.1.0:Distribution.Simple.Utils
Error: Setup: Encountered missing or private dependencies:
tuple >=0.3.0.2 && <0.4
```
2023-12-28 00:47:45 +00:00

85 lines
2.7 KiB
Nix

{ lib
, mkDerivation
, fetchFromGitHub
, fetchpatch
, haskellPackages
, haskell
, slither-analyzer
}:
let haskellPackagesOverride = haskellPackages.override {
overrides = self: super: {
# following the revision specified in echidna/stack.yaml
# TODO: 0.51.3 is not in haskellPackages yet
hevm = haskell.lib.overrideCabal super.hevm (oa: {
version = "0.51.3";
src = fetchFromGitHub {
owner = "ethereum";
repo = "hevm";
rev = "release/0.51.3";
hash = "sha256-H6oURBGoQWSOuPhBB+UKg2UarVzXgv1tmfDBLnOtdhU=";
};
libraryHaskellDepends = oa.libraryHaskellDepends
++ (with haskellPackages;[githash witch tuple]);
});
};
};
in mkDerivation rec {
pname = "echidna";
version = "2.2.1";
src = fetchFromGitHub {
owner = "crytic";
repo = "echidna";
rev = "v${version}";
sha256 = "sha256-5d9ttPR3rRHywBeLM85EGCEZLNZNZzOAhIN6AJToJyI=";
};
# Note: pending PR https://github.com/crytic/echidna/pull/1096
patches = [
(fetchpatch {
name = "brick-1.9-update";
url = "https://github.com/crytic/echidna/pull/1096/commits/36657d54943727e569691a6b3d85b83130480a2e.patch";
sha256 = "sha256-AOmB/fAZCF7ruXW1HusRe7wWWsLyMCWw+j3qIPARIAc=";
})
];
isLibrary = true;
isExecutable = true;
libraryToolDepends = with haskellPackagesOverride; [
haskellPackages.hpack
];
# Note: This can be extracted from package.yaml of echidna, the list is shorter because some are transitive.
executableHaskellDepends = with haskellPackagesOverride;
[aeson base base16-bytestring binary brick bytestring code-page containers data-dword data-has directory exceptions extra
filepath hashable hevm html-conduit html-entities http-conduit lens ListLike MonadRandom mtl optics optparse-applicative
process random semver text transformers unix unliftio unordered-containers vector vector-instances vty with-utf8
xml-conduit yaml];
# Note: there is also a runtime dependency of slither-analyzer, let's include it also.
executableSystemDepends = [ slither-analyzer ];
testHaskellDepends = with haskellPackagesOverride; [
tasty tasty-hunit tasty-quickcheck
];
preConfigure = ''
hpack
# re-enable dynamic build for Linux
sed -i -e 's/os(linux)/false/' echidna.cabal
'';
shellHook = "hpack";
doHaddock = false;
# tests depend on a specific version of solc
doCheck = false;
description = "Ethereum smart contract fuzzer";
homepage = "https://github.com/crytic/echidna";
license = lib.licenses.agpl3Plus;
maintainers = with lib.maintainers; [ arturcygan hellwolf ];
platforms = lib.platforms.unix;
mainProgram = "echidna-test";
}