Skip to content

Commit

Permalink
libiio: disable Python for static builds
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
lopsided98 committed Aug 16, 2023
1 parent f045184 commit d16b069
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 10 deletions.
21 changes: 12 additions & 9 deletions pkgs/development/libraries/libiio/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
, flex
, bison
, libxml2
, python
, pythonSupport ? stdenv.hostPlatform.hasSharedLibraries, python
, libusb1
, avahiSupport ? true, avahi
, libaio
Expand All @@ -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";
Expand All @@ -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
Expand All @@ -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"
'';
Expand Down
5 changes: 4 additions & 1 deletion pkgs/top-level/python-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 { };

Expand Down

0 comments on commit d16b069

Please sign in to comment.