{ stdenv , fetchFromGitLab , lib , darwin , git , nettle # Use the same llvmPackages version as Rust , llvmPackages_10 , cargo , rustc , rustPlatform , pkg-config , glib , openssl , sqlite , capnproto , ensureNewerSourcesForZipFilesHook , pythonSupport ? true , pythonPackages ? null }: assert pythonSupport -> pythonPackages != null; rustPlatform.buildRustPackage rec { pname = "sequoia"; version = "0.20.0"; src = fetchFromGitLab { owner = "sequoia-pgp"; repo = "sequoia"; rev = "v${version}"; sha256 = "sha256-br5GRzWprQTixNrE0WpNIB7Ayj5oEfyCg5JY4MnX5rA="; }; cargoSha256 = "sha256-SpCdoLCtvU9jpG/ivB/+4KhRdKZxN3/+7P/RlR6n9/c="; nativeBuildInputs = [ pkg-config cargo rustc git llvmPackages_10.libclang llvmPackages_10.clang ensureNewerSourcesForZipFilesHook capnproto ] ++ lib.optionals pythonSupport [ pythonPackages.setuptools ] ; checkInputs = lib.optionals pythonSupport [ pythonPackages.pytest pythonPackages.pytestrunner ]; buildInputs = [ openssl sqlite nettle ] ++ lib.optionals pythonSupport [ pythonPackages.python pythonPackages.cffi ] ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ] ; makeFlags = [ "PREFIX=${placeholder "out"}" # Defaults to "ginstall" from some reason, although upstream's Makefiles check uname "INSTALL=install" ]; buildFlags = [ "build-release" ]; LIBCLANG_PATH = "${llvmPackages_10.libclang}/lib"; # Sometimes, tests fail on CI (ofborg) & hydra without this CARGO_TEST_ARGS = "--workspace --exclude sequoia-store"; # Without this, the examples won't build postPatch = '' substituteInPlace openpgp-ffi/examples/Makefile \ --replace '-O0 -g -Wall -Werror' '-g' substituteInPlace ffi/examples/Makefile \ --replace '-O0 -g -Wall -Werror' '-g' ''; preInstall = lib.optionalString pythonSupport '' export installFlags="PYTHONPATH=$PYTHONPATH:$out/${pythonPackages.python.sitePackages}" '' + lib.optionalString (!pythonSupport) '' export makeFlags="PYTHON=disable" ''; # Don't use buildRustPackage phases, only use it for rust deps setup configurePhase = null; buildPhase = null; doCheck = true; checkPhase = null; installPhase = null; meta = with stdenv.lib; { description = "A cool new OpenPGP implementation"; homepage = "https://sequoia-pgp.org/"; license = licenses.gpl3; maintainers = with maintainers; [ minijackson doronbehar ]; }; }