mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-20 12:43:52 +00:00
d16b0690f8
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.
86 lines
2.3 KiB
Nix
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 ];
|
|
};
|
|
}
|