From f302d482045569daeb0c925ef230bbb9798c86c2 Mon Sep 17 00:00:00 2001 From: Linus Karl Date: Mon, 2 Oct 2023 18:05:34 +0200 Subject: [PATCH] indilib: fix udev rules This fixes the udev rules so that the indi packages can be added to nixos services.udev.packages option. It also fixes the loading of firmware for devices which need fxload. --- .../science/astronomy/indilib/default.nix | 11 ++++++++++ .../astronomy/indilib/indi-3rdparty.nix | 19 ++++++++++++++++ .../astronomy/indilib/indi-firmware.nix | 22 +++++++++++++++---- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/pkgs/development/libraries/science/astronomy/indilib/default.nix b/pkgs/development/libraries/science/astronomy/indilib/default.nix index d6d8919ccddf..0b4526e6e1eb 100644 --- a/pkgs/development/libraries/science/astronomy/indilib/default.nix +++ b/pkgs/development/libraries/science/astronomy/indilib/default.nix @@ -1,9 +1,11 @@ { stdenv , lib , fetchFromGitHub +, bash , cmake , cfitsio , libusb1 +, kmod , zlib , boost , libev @@ -58,6 +60,15 @@ stdenv.mkDerivation rec { # Socket address collisions between tests enableParallelChecking = false; + postFixup = lib.optionalString stdenv.isLinux '' + for f in $out/lib/udev/rules.d/*.rules + do + substituteInPlace $f --replace "/bin/sh" "${bash}/bin/sh" \ + --replace "/sbin/modprobe" "${kmod}/sbin/modprobe" + done + ''; + + meta = with lib; { homepage = "https://www.indilib.org/"; description = "Implementation of the INDI protocol for POSIX operating systems"; diff --git a/pkgs/development/libraries/science/astronomy/indilib/indi-3rdparty.nix b/pkgs/development/libraries/science/astronomy/indilib/indi-3rdparty.nix index 2423a6e20e34..fdbdb4db24bf 100644 --- a/pkgs/development/libraries/science/astronomy/indilib/indi-3rdparty.nix +++ b/pkgs/development/libraries/science/astronomy/indilib/indi-3rdparty.nix @@ -1,6 +1,8 @@ { stdenv , lib +, bash , cmake +, coreutils , cfitsio , libusb1 , zlib @@ -24,6 +26,10 @@ , firmware ? null }: +let + libusb-with-fxload = libusb1.override { withExamples = true;}; +in + stdenv.mkDerivation rec { pname = "indi-3rdparty"; @@ -68,6 +74,19 @@ stdenv.mkDerivation rec { "-DWITH_SBIG=off" ]; + postFixup = lib.optionalString stdenv.isLinux '' + for f in $out/lib/udev/rules.d/*.rules + do + substituteInPlace $f --replace "/sbin/fxload" "${libusb-with-fxload}/sbin/fxload" \ + --replace "/lib/firmware/" "$out/lib/firmware/" \ + --replace "/bin/sleep" "${coreutils}/bin/sleep" \ + --replace "/bin/cat" "${coreutils}/bin/cat" \ + --replace "/bin/echo" "${coreutils}/bin/echo" \ + --replace "/bin/sh" "${bash}/bin/sh" + done + ''; + + meta = with lib; { homepage = "https://www.indilib.org/"; description = "Third party drivers for the INDI astronomical software suite"; diff --git a/pkgs/development/libraries/science/astronomy/indilib/indi-firmware.nix b/pkgs/development/libraries/science/astronomy/indilib/indi-firmware.nix index 7875051cbf79..102a8b901cce 100644 --- a/pkgs/development/libraries/science/astronomy/indilib/indi-firmware.nix +++ b/pkgs/development/libraries/science/astronomy/indilib/indi-firmware.nix @@ -1,7 +1,9 @@ { stdenv , lib +, bash , cmake , cfitsio +, coreutils , libusb1 , zlib , boost @@ -21,7 +23,9 @@ , src , autoPatchelfHook }: - +let + libusb-with-fxload = libusb1.override { withExamples = true;}; +in stdenv.mkDerivation rec { pname = "indi-firmware"; @@ -39,7 +43,8 @@ stdenv.mkDerivation rec { "-DCMAKE_INSTALL_LIBDIR=lib" "-DUDEVRULES_INSTALL_DIR=lib/udev/rules.d" "-DRULES_INSTALL_DIR=lib/udev/rules.d" - "-DFIRMWARE_INSTALL_DIR=\${CMAKE_INSTALL_PREFIX}/lib/firmware" + "-DFIRMWARE_INSTALL_DIR=lib/firmware" + "-DQHY_FIRMWARE_INSTALL_DIR=\${CMAKE_INSTALL_PREFIX}/lib/firmware/qhy" "-DCONF_DIR=etc" "-DBUILD_LIBS=1" "-DWITH_PENTAX=off" @@ -52,8 +57,17 @@ stdenv.mkDerivation rec { done ''; - postFixup = '' - rm $out/lib/udev/rules.d/99-fli.rules + postFixup = lib.optionalString stdenv.isLinux '' + for f in $out/lib/udev/rules.d/*.rules + do + substituteInPlace "$f" --replace "/sbin/fxload" "${libusb-with-fxload}/sbin/fxload" \ + --replace "/bin/sleep" "${coreutils}/bin/sleep" \ + --replace "/bin/cat" "${coreutils}/bin/cat" \ + --replace "/bin/echo" "${coreutils}/bin/echo" \ + --replace "/bin/sh" "${bash}/bin/sh" \ + --replace "/lib/firmware/" "$out/lib/firmware/" + sed -e 's|-D $env{DEVNAME}|-p $env{BUSNUM},$env{DEVNUM}|' -i "$f" + done ''; meta = with lib; {