diff --git a/pkgs/applications/misc/electrum/default.nix b/pkgs/applications/misc/electrum/default.nix index 3696b8919178..33233d472357 100644 --- a/pkgs/applications/misc/electrum/default.nix +++ b/pkgs/applications/misc/electrum/default.nix @@ -6,21 +6,12 @@ wrapQtAppsHook, python3, zbar, - secp256k1, enableQt ? true, callPackage, qtwayland, }: let - libsecp256k1_name = - if stdenv.hostPlatform.isLinux then - "libsecp256k1.so.{v}" - else if stdenv.hostPlatform.isDarwin then - "libsecp256k1.{v}.dylib" - else - "libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}"; - libzbar_name = if stdenv.hostPlatform.isLinux then "libzbar.so.0" @@ -28,17 +19,15 @@ let "libzbar.0.dylib" else "libzbar${stdenv.hostPlatform.extensions.sharedLibrary}"; - in - python3.pkgs.buildPythonApplication rec { pname = "electrum"; - version = "4.5.8"; + version = "4.6.0"; format = "setuptools"; src = fetchurl { url = "https://download.electrum.org/${version}/Electrum-${version}.tar.gz"; - hash = "sha256-3YWVoTgTLe6Hzuds52Ch1iL8L9ZdO2rH335Tt/tup+g="; + hash = "sha256-aQqZXyfqFgc1j2r836eaaayOmSzDijHlYXmF+OBw418="; }; build-system = [ protobuf ] ++ lib.optionals enableQt [ wrapQtAppsHook ]; @@ -63,8 +52,9 @@ python3.pkgs.buildPythonApplication rec { requests certifi jsonpatch + electrum-aionostr + electrum-ecc # plugins - btchip-python ledger-bitcoin ckcc-protocol keepkey @@ -74,7 +64,7 @@ python3.pkgs.buildPythonApplication rec { pyserial ] ++ lib.optionals enableQt [ - pyqt5 + pyqt6 qdarkstyle ]; @@ -85,38 +75,15 @@ python3.pkgs.buildPythonApplication rec { ]; postPatch = - '' - # fix compatibility with recent aiorpcx version - # (remove as soon as https://github.com/spesmilo/electrum/commit/171aa5ee5ad4e25b9da10f757d9d398e905b4945 is included in source tarball) - substituteInPlace ./contrib/requirements/requirements.txt \ - --replace-fail "aiorpcx>=0.22.0,<0.24" "aiorpcx>=0.22.0,<0.25" - substituteInPlace ./run_electrum \ - --replace-fail "if not ((0, 22, 0) <= aiorpcx._version < (0, 24)):" "if not ((0, 22, 0) <= aiorpcx._version < (0, 25)):" \ - --replace-fail "aiorpcX version {aiorpcx._version} does not match required: 0.22.0<=ver<0.24" "aiorpcX version {aiorpcx._version} does not match required: 0.22.0<=ver<0.25" - substituteInPlace ./electrum/electrum \ - --replace-fail "if not ((0, 22, 0) <= aiorpcx._version < (0, 24)):" "if not ((0, 22, 0) <= aiorpcx._version < (0, 25)):" \ - --replace-fail "aiorpcX version {aiorpcx._version} does not match required: 0.22.0<=ver<0.24" "aiorpcX version {aiorpcx._version} does not match required: 0.22.0<=ver<0.25" - - # make compatible with protobuf4 by easing dependencies ... - substituteInPlace ./contrib/requirements/requirements.txt \ - --replace-fail "protobuf>=3.20,<4" "protobuf>=3.20" - # ... and regenerating the paymentrequest_pb2.py file - protoc --python_out=. electrum/paymentrequest.proto - - substituteInPlace ./electrum/ecc_fast.py \ - --replace-fail ${libsecp256k1_name} ${secp256k1}/lib/libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary} - '' - + ( - if enableQt then - '' - substituteInPlace ./electrum/qrscanner.py \ - --replace-fail ${libzbar_name} ${zbar.lib}/lib/libzbar${stdenv.hostPlatform.extensions.sharedLibrary} - '' - else - '' - sed -i '/qdarkstyle/d' contrib/requirements/requirements.txt - '' - ); + if enableQt then + '' + substituteInPlace ./electrum/qrscanner.py \ + --replace-fail ${libzbar_name} ${zbar.lib}/lib/libzbar${stdenv.hostPlatform.extensions.sharedLibrary} + '' + else + '' + sed -i '/qdarkstyle/d' contrib/requirements/requirements.txt + ''; postInstall = lib.optionalString stdenv.hostPlatform.isLinux '' substituteInPlace $out/share/applications/electrum.desktop \ @@ -136,6 +103,11 @@ python3.pkgs.buildPythonApplication rec { enabledTestPaths = [ "tests" ]; + # avoid homeless-shelter error in tests + preCheck = '' + export HOME="$(mktemp -d)" + ''; + postCheck = '' $out/bin/electrum help >/dev/null ''; diff --git a/pkgs/development/python-modules/aiorpcx/default.nix b/pkgs/development/python-modules/aiorpcx/default.nix index e17bb9db840d..db3f3f209416 100644 --- a/pkgs/development/python-modules/aiorpcx/default.nix +++ b/pkgs/development/python-modules/aiorpcx/default.nix @@ -10,14 +10,14 @@ buildPythonPackage rec { pname = "aiorpcx"; - version = "0.24.0"; + version = "0.25.0"; pyproject = true; src = fetchFromGitHub { owner = "kyuupichan"; repo = "aiorpcX"; - tag = "0.24"; # TODO: https://github.com/kyuupichan/aiorpcX/issues/52 - hash = "sha256-0c4AqKDWAmAFR1t42VE54kgbupe4ljajCR/TB5fZfME="; + tag = version; + hash = "sha256-mFg9mWrlnfXiQpgZ1rxvUy9TBfwy41XEKmsCf2nvxGo="; }; build-system = [ setuptools ]; diff --git a/pkgs/development/python-modules/electrum-aionostr/default.nix b/pkgs/development/python-modules/electrum-aionostr/default.nix new file mode 100644 index 000000000000..8fd18b50d89b --- /dev/null +++ b/pkgs/development/python-modules/electrum-aionostr/default.nix @@ -0,0 +1,52 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + setuptools, + aiohttp, + aiohttp-socks, + aiorpcx, + cryptography, + electrum-ecc, + click, + pytestCheckHook, +}: + +buildPythonPackage rec { + pname = "electrum-aionostr"; + version = "0.0.11"; + pyproject = true; + build-system = [ setuptools ]; + + src = fetchPypi { + pname = "electrum_aionostr"; + inherit version; + hash = "sha256-DusdAeVdS6ssEWJolloLLBFJBlnpaf2GTEUxBFWLz4E="; + }; + + dependencies = [ + aiohttp + aiohttp-socks + aiorpcx + cryptography + electrum-ecc + ]; + + nativeCheckInputs = [ pytestCheckHook ]; + + checkInputs = [ click ]; + + pythonImportsCheck = [ "electrum_aionostr" ]; + + disabledTests = [ + # command line interface is broken + "test_command_line_interface" + ]; + + meta = with lib; { + description = "Asyncio nostr client"; + homepage = "https://github.com/spesmilo/electrum-aionostr"; + license = licenses.bsd3; + maintainers = [ ]; + }; +} diff --git a/pkgs/development/python-modules/electrum-ecc/default.nix b/pkgs/development/python-modules/electrum-ecc/default.nix new file mode 100644 index 000000000000..15595435f24e --- /dev/null +++ b/pkgs/development/python-modules/electrum-ecc/default.nix @@ -0,0 +1,55 @@ +{ + lib, + stdenv, + buildPythonPackage, + fetchPypi, + setuptools, + pkgs, + pytestCheckHook, +}: + +let + libsecp256k1_name = + if stdenv.hostPlatform.isLinux then + "libsecp256k1.so.{v}" + else if stdenv.hostPlatform.isDarwin then + "libsecp256k1.{v}.dylib" + else + "libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}"; +in +buildPythonPackage rec { + pname = "electrum-ecc"; + version = "0.0.5"; + pyproject = true; + build-system = [ setuptools ]; + + src = fetchPypi { + pname = "electrum_ecc"; + inherit version; + hash = "sha256-9zO4WWoPeyXINx0Ir2Hvece4cdW0DwWluV0tBesvt9I="; + }; + + env = { + # Prevent compilation of the C extension as we use the system library instead. + ELECTRUM_ECC_DONT_COMPILE = "1"; + }; + + postPatch = '' + # remove bundled libsecp256k1 + rm -rf libsecp256k1/ + # use the system library instead + substituteInPlace ./src/electrum_ecc/ecc_fast.py \ + --replace-fail ${libsecp256k1_name} ${pkgs.secp256k1}/lib/libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary} + ''; + + nativeCheckInputs = [ pytestCheckHook ]; + + pythonImportsCheck = [ "electrum_ecc" ]; + + meta = with lib; { + description = "Pure python ctypes wrapper for libsecp256k1"; + homepage = "https://github.com/spesmilo/electrum-ecc"; + license = licenses.mit; + maintainers = [ ]; + }; +} diff --git a/pkgs/tools/graphics/zbar/default.nix b/pkgs/tools/graphics/zbar/default.nix index c899421687eb..a20738a53ee0 100644 --- a/pkgs/tools/graphics/zbar/default.nix +++ b/pkgs/tools/graphics/zbar/default.nix @@ -106,6 +106,11 @@ stdenv.mkDerivation rec { argp-standalone ]; + # fix iconv linking on macOS + preConfigure = lib.optionalString stdenv.hostPlatform.isDarwin '' + export LDFLAGS="-liconv" + ''; + # Note: postConfigure instead of postPatch in order to include some # autoconf-generated files. The template files for the autogen'd scripts are # not chmod +x, so patchShebangs misses them. diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index d231cd21957d..ce7c238682dc 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4549,6 +4549,10 @@ self: super: with self; { elasticsearchdsl = self.elasticsearch-dsl; + electrum-aionostr = callPackage ../development/python-modules/electrum-aionostr { }; + + electrum-ecc = callPackage ../development/python-modules/electrum-ecc { }; + elegy = callPackage ../development/python-modules/elegy { }; elementpath = callPackage ../development/python-modules/elementpath { };