From 97052019cdbb70f95a33f28632700bedf8e898b1 Mon Sep 17 00:00:00 2001 From: sternenseemann Date: Wed, 19 Jan 2022 13:34:13 +0100 Subject: [PATCH 1/2] libsigrok: take unversioned python argument libsigrok can be built with different python versions which we want to use for integrating it into python*Packages. --- pkgs/development/tools/libsigrok/default.nix | 4 ++-- pkgs/top-level/all-packages.nix | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/pkgs/development/tools/libsigrok/default.nix b/pkgs/development/tools/libsigrok/default.nix index 9db3df428232..5a11db8b3b94 100644 --- a/pkgs/development/tools/libsigrok/default.nix +++ b/pkgs/development/tools/libsigrok/default.nix @@ -1,5 +1,5 @@ { lib, stdenv, fetchurl, pkg-config, libzip, glib, libusb1, libftdi1, check -, libserialport, librevisa, doxygen, glibmm, python3 +, libserialport, librevisa, doxygen, glibmm, python , version ? "0.5.1", sha256 ? "171b553dir5gn6w4f7n37waqk62nq2kf1jykx4ifjacdz5xdw3z4", doInstallCheck ? true }: @@ -17,7 +17,7 @@ stdenv.mkDerivation rec { sha256 = "14sd8xqph4kb109g073daiavpadb20fcz7ch1ipn0waz7nlly4sw"; }; - nativeBuildInputs = [ doxygen pkg-config python3 ]; + nativeBuildInputs = [ doxygen pkg-config python ]; buildInputs = [ libzip glib libusb1 libftdi1 check libserialport librevisa glibmm ]; strictDeps = true; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 77500d7fbaf6..9c8d589a3648 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -14529,9 +14529,12 @@ with pkgs; libstdcxx5 = callPackage ../development/libraries/gcc/libstdc++/5.nix { }; - libsigrok = callPackage ../development/tools/libsigrok { }; + libsigrok = callPackage ../development/tools/libsigrok { + python = python3; + }; # old version: libsigrok_0_3 = libsigrok.override { + python = python3; version = "0.3.0"; sha256 = "0l3h7zvn3w4c1b9dgvl3hirc4aj1csfkgbk87jkpl7bgl03nk4j3"; doInstallCheck = false; From b876a7e5493c399b8a40715ea920d4ef815da229 Mon Sep 17 00:00:00 2001 From: sternenseemann Date: Wed, 19 Jan 2022 13:34:54 +0100 Subject: [PATCH 2/2] python3Packages.sigrok: init at 0.5.1 python*Packages.sigrok is a version of libsigrok which additionally builds its python bindings. Sadly bindings and package don't seem to be buildable independently of each other without a lot of patching. The main thing we need to do is patch Makefile.am to pass --single-version-externally-managed, so the installed sigrok module ends up in PYTHONPATH properly. --- .../python-modules/sigrok/default.nix | 62 +++++++++++++++++++ .../sigrok/python-install.patch | 16 +++++ pkgs/top-level/python-packages.nix | 2 + 3 files changed, 80 insertions(+) create mode 100644 pkgs/development/python-modules/sigrok/default.nix create mode 100644 pkgs/development/python-modules/sigrok/python-install.patch diff --git a/pkgs/development/python-modules/sigrok/default.nix b/pkgs/development/python-modules/sigrok/default.nix new file mode 100644 index 000000000000..b8b925ba6b16 --- /dev/null +++ b/pkgs/development/python-modules/sigrok/default.nix @@ -0,0 +1,62 @@ +{ lib +, stdenv +, libsigrok +, toPythonModule +, python +, autoreconfHook +, pythonImportsCheckHook +, pythonCatchConflictsHook +, swig +, setuptools +, numpy +, pygobject3 +}: + +# build libsigrok plus its Python bindings. Unfortunately it does not appear +# to be possible to build them separately, at least not easily. +toPythonModule ((libsigrok.override { + inherit python; +}).overrideAttrs (orig: { + pname = "${python.libPrefix}-sigrok"; + + patches = orig.patches or [] ++ [ + # Makes libsigrok install the bindings into site-packages properly (like + # we expect) instead of making a version-specific *.egg subdirectory. + ./python-install.patch + ]; + + nativeBuildInputs = orig.nativeBuildInputs or [] ++ [ + autoreconfHook + setuptools + swig + numpy + ] ++ lib.optionals (stdenv.hostPlatform == stdenv.buildPlatform) [ + pythonImportsCheckHook + pythonCatchConflictsHook + ]; + + buildInputs = orig.buildInputs or [] ++ [ + pygobject3 # makes headers available the configure script checks for + ]; + + propagatedBuildInputs = orig.propagatedBuildInputs or [] ++ [ + pygobject3 + numpy + ]; + + postInstall = '' + ${orig.postInstall or ""} + + # for pythonImportsCheck + export PYTHONPATH="$out/${python.sitePackages}:$PYTHONPATH" + ''; + + pythonImportsCheck = [ "sigrok" "sigrok.core" ]; + + meta = orig.meta // { + description = "Python bindings for libsigrok"; + maintainers = orig.meta.maintainers ++ [ + lib.maintainers.sternenseemann + ]; + }; +})) diff --git a/pkgs/development/python-modules/sigrok/python-install.patch b/pkgs/development/python-modules/sigrok/python-install.patch new file mode 100644 index 000000000000..9c25eab6f39a --- /dev/null +++ b/pkgs/development/python-modules/sigrok/python-install.patch @@ -0,0 +1,16 @@ +diff --git a/Makefile.am b/Makefile.am +index 280cf64d..e10eb79f 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -888,8 +888,9 @@ $(PDIR)/timestamp: $(PDIR)/sigrok/core/classes.i \ + + python-install: + $(AM_V_at)$(MKDIR_P) "$(DESTDIR)$(prefix)" "$(DESTDIR)$(exec_prefix)" +- destdir='$(DESTDIR)'; $(setup_py) install $${destdir:+"--root=$$destdir"} \ +- --prefix "$(prefix)" --exec-prefix "$(exec_prefix)" ++ destdir='$(DESTDIR)'; $(setup_py) install --root=$${destdir:-/} \ ++ --prefix "$(prefix)" --exec-prefix "$(exec_prefix)" \ ++ --single-version-externally-managed + + python-clean: + -$(AM_V_at)rm -f $(PDIR)/timestamp diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 24a0dcb52fc3..0332a01ef6d1 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -8925,6 +8925,8 @@ in { signedjson = callPackage ../development/python-modules/signedjson { }; + sigrok = callPackage ../development/python-modules/sigrok { }; + sigtools = callPackage ../development/python-modules/sigtools { }; simanneal = callPackage ../development/python-modules/simanneal { };