nixpkgs/pkgs/development/libraries/libiio/default.nix
Ben Wolsieffer d16b0690f8 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.
2023-08-16 14:31:16 -04:00

86 lines
2.3 KiB
Nix

{ stdenv
, fetchFromGitHub
, cmake
, flex
, bison
, libxml2
, pythonSupport ? stdenv.hostPlatform.hasSharedLibraries, python
, libusb1
, avahiSupport ? true, avahi
, libaio
, runtimeShell
, lib
, pkg-config
, CFNetwork
, CoreServices
}:
stdenv.mkDerivation rec {
pname = "libiio";
version = "0.24";
outputs = [ "out" "lib" "dev" ]
++ lib.optional pythonSupport "python";
src = fetchFromGitHub {
owner = "analogdevicesinc";
repo = "libiio";
rev = "v${version}";
sha256 = "sha256-c5HsxCdp1cv5BGTQ/8dc8J893zk9ntbfAudLpqoQ1ow=";
};
# Revert after https://github.com/NixOS/nixpkgs/issues/125008 is
# fixed properly
patches = [ ./cmake-fix-libxml2-find-package.patch ];
nativeBuildInputs = [
cmake
flex
bison
pkg-config
] ++ lib.optionals pythonSupport ([
python
] ++ lib.optional python.isPy3k python.pkgs.setuptools);
buildInputs = [
libxml2
libusb1
] ++ lib.optional avahiSupport avahi
++ lib.optional stdenv.isLinux libaio
++ lib.optionals stdenv.isDarwin [ CFNetwork CoreServices ];
cmakeFlags = [
"-DUDEV_RULES_INSTALL_DIR=${placeholder "out"}/lib/udev/rules.d"
# 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 = ''
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 = lib.optionalString pythonSupport ''
# Move Python bindings into a separate output.
moveToOutput ${python.sitePackages} "$python"
'';
meta = with lib; {
description = "API for interfacing with the Linux Industrial I/O Subsystem";
homepage = "https://github.com/analogdevicesinc/libiio";
license = licenses.lgpl21Plus;
platforms = platforms.linux ++ platforms.darwin;
maintainers = with maintainers; [ thoughtpolice ];
};
}