nixpkgs/pkgs/applications/misc/electrum/default.nix
Pavol Rusnak 16b38b0782
electrum: 4.0.6 -> 4.0.7
this release also fixes compatibility with dnspython 2.x,
so we can drop the overrides

also cryptography is required instead of pycryptodomex
(which is required only for tests now) and ecdsa dependency
is dropped completely
2020-12-09 21:02:10 +01:00

156 lines
3.9 KiB
Nix

{ stdenv
, fetchurl
, fetchFromGitHub
, wrapQtAppsHook
, python3
, zbar
, secp256k1
, enableQt ? true
# for updater.nix
, writeScript
, common-updater-scripts
, bash
, coreutils
, curl
, gnugrep
, gnupg
, gnused
, nix
}:
let
version = "4.0.7";
libsecp256k1_name =
if stdenv.isLinux then "libsecp256k1.so.0"
else if stdenv.isDarwin then "libsecp256k1.0.dylib"
else "libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}";
libzbar_name =
if stdenv.isLinux then "libzbar.so.0"
else "libzbar${stdenv.hostPlatform.extensions.sharedLibrary}";
# Not provided in official source releases, which are what upstream signs.
tests = fetchFromGitHub {
owner = "spesmilo";
repo = "electrum";
rev = version;
sha256 = "06vcbj9p96d8v4xjlygzr74lqllb9adn8k0racajzq61ijb0imi2";
extraPostFetch = ''
mv $out ./all
mv ./all/electrum/tests $out
'';
};
in
python3.pkgs.buildPythonApplication {
pname = "electrum";
inherit version;
src = fetchurl {
url = "https://download.electrum.org/${version}/Electrum-${version}.tar.gz";
sha256 = "0k5xf97ga3ixd02g1y6v84hbxd8yhvpj5iz2rhxs8wfnkfwibzh4";
};
postUnpack = ''
# can't symlink, tests get confused
cp -ar ${tests} $sourceRoot/electrum/tests
'';
nativeBuildInputs = stdenv.lib.optionals enableQt [ wrapQtAppsHook ];
propagatedBuildInputs = with python3.pkgs; [
aiohttp
aiohttp-socks
aiorpcx
attrs
bitstring
cryptography
dnspython
jsonrpclib-pelix
matplotlib
pbkdf2
protobuf
pysocks
qrcode
requests
tlslite-ng
# plugins
ckcc-protocol
keepkey
trezor
btchip
] ++ stdenv.lib.optionals enableQt [ pyqt5 qdarkstyle ];
preBuild = ''
sed -i 's,usr_share = .*,usr_share = "'$out'/share",g' setup.py
substituteInPlace ./electrum/ecc_fast.py \
--replace ${libsecp256k1_name} ${secp256k1}/lib/libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}
'' + (if enableQt then ''
substituteInPlace ./electrum/qrscanner.py \
--replace ${libzbar_name} ${zbar.lib}/lib/libzbar${stdenv.hostPlatform.extensions.sharedLibrary}
'' else ''
sed -i '/qdarkstyle/d' contrib/requirements/requirements.txt
'');
postInstall = stdenv.lib.optionalString stdenv.isLinux ''
# Despite setting usr_share above, these files are installed under
# $out/nix ...
mv $out/${python3.sitePackages}/nix/store"/"*/share $out
rm -rf $out/${python3.sitePackages}/nix
substituteInPlace $out/share/applications/electrum.desktop \
--replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum %u"' \
"Exec=$out/bin/electrum %u" \
--replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum --testnet %u"' \
"Exec=$out/bin/electrum --testnet %u"
'';
postFixup = stdenv.lib.optionalString enableQt ''
wrapQtApp $out/bin/electrum
'';
checkInputs = with python3.pkgs; [ pytestCheckHook pycryptodomex ];
pytestFlagsArray = [ "electrum/tests" ];
disabledTests = [
"test_loop" # test tries to bind 127.0.0.1 causing permission error
];
postCheck = ''
$out/bin/electrum help >/dev/null
'';
passthru.updateScript = import ./update.nix {
inherit (stdenv) lib;
inherit
writeScript
common-updater-scripts
bash
coreutils
curl
gnupg
gnugrep
gnused
nix
;
};
meta = with stdenv.lib; {
description = "A lightweight Bitcoin wallet";
longDescription = ''
An easy-to-use Bitcoin client featuring wallets generated from
mnemonic seeds (in addition to other, more advanced, wallet options)
and the ability to perform transactions without downloading a copy
of the blockchain.
'';
homepage = "https://electrum.org/";
license = licenses.mit;
platforms = platforms.all;
maintainers = with maintainers; [ ehmry joachifm np prusnak ];
};
}