From d16b0690f8f73e2b085136591cab912d51fe944b Mon Sep 17 00:00:00 2001 From: Ben Wolsieffer Date: Thu, 10 Aug 2023 15:38:47 -0400 Subject: [PATCH] libiio: disable Python for static builds libiio's Python bindings use ctypes to load the shared library, which obviously can't work with a static build. This has recently started causing eval errors because the package uses stdenv.hostPlatform.extensions.sharedLibrary, which isn't available when building a static library. This patch adds a flag to disable the Python bindings, and automatically disables them for static builds. Note that even with this patch, static libiio doesn't build successfully by default. You have to disable avahi and manually disable libxml2 with custom CMake flags. --- pkgs/development/libraries/libiio/default.nix | 21 +++++++++++-------- pkgs/top-level/python-packages.nix | 5 ++++- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/pkgs/development/libraries/libiio/default.nix b/pkgs/development/libraries/libiio/default.nix index d217fbd8238..98ca22d2e90 100644 --- a/pkgs/development/libraries/libiio/default.nix +++ b/pkgs/development/libraries/libiio/default.nix @@ -4,7 +4,7 @@ , flex , bison , libxml2 -, python +, pythonSupport ? stdenv.hostPlatform.hasSharedLibraries, python , libusb1 , avahiSupport ? true, avahi , libaio @@ -19,7 +19,8 @@ stdenv.mkDerivation rec { pname = "libiio"; version = "0.24"; - outputs = [ "out" "lib" "dev" "python" ]; + outputs = [ "out" "lib" "dev" ] + ++ lib.optional pythonSupport "python"; src = fetchFromGitHub { owner = "analogdevicesinc"; @@ -37,8 +38,9 @@ stdenv.mkDerivation rec { flex bison pkg-config + ] ++ lib.optionals pythonSupport ([ python - ] ++ lib.optional python.isPy3k python.pkgs.setuptools; + ] ++ lib.optional python.isPy3k python.pkgs.setuptools); buildInputs = [ libxml2 @@ -49,25 +51,26 @@ stdenv.mkDerivation rec { cmakeFlags = [ "-DUDEV_RULES_INSTALL_DIR=${placeholder "out"}/lib/udev/rules.d" - "-DPython_EXECUTABLE=${python.pythonForBuild.interpreter}" - "-DPYTHON_BINDINGS=on" # osx framework is disabled, # the linux-like directory structure is used for proper output splitting "-DOSX_PACKAGE=off" "-DOSX_FRAMEWORK=off" + ] ++ lib.optionals pythonSupport [ + "-DPython_EXECUTABLE=${python.pythonForBuild.interpreter}" + "-DPYTHON_BINDINGS=on" ] ++ lib.optionals (!avahiSupport) [ "-DHAVE_DNS_SD=OFF" ]; postPatch = '' - # Hardcode path to the shared library into the bindings. - sed "s#@libiio@#$lib/lib/libiio${stdenv.hostPlatform.extensions.sharedLibrary}#g" ${./hardcode-library-path.patch} | patch -p1 - substituteInPlace libiio.rules.cmakein \ --replace /bin/sh ${runtimeShell} + '' + lib.optionalString pythonSupport '' + # Hardcode path to the shared library into the bindings. + sed "s#@libiio@#$lib/lib/libiio${stdenv.hostPlatform.extensions.sharedLibrary}#g" ${./hardcode-library-path.patch} | patch -p1 ''; - postInstall = '' + postInstall = lib.optionalString pythonSupport '' # Move Python bindings into a separate output. moveToOutput ${python.sitePackages} "$python" ''; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index c2572b7a4e7..6d6611eb871 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -5882,7 +5882,10 @@ self: super: with self; { inherit (pkgs.config) cudaSupport; }; - libiio = (toPythonModule (pkgs.libiio.override { inherit python; })).python; + libiio = (toPythonModule (pkgs.libiio.override { + pythonSupport = true; + inherit python; + })).python; libkeepass = callPackage ../development/python-modules/libkeepass { };