Subject: [bug#77927] [PATCH v2 1/4] gnu: Add libiio

From: Rutherther <[email-masked]>
Date: Sun, 20 Apr 2025 18:18:09 +0200

This is a dependency used for communicating with PlutoSDR.

* gnu/packages/radio.scm (libiio): New variable.

Change-Id: Ic34895af35fa008923fed0de74ad12ffc75f2021
---
 gnu/packages/radio.scm | 67 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)

diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index 2752380a3a..cf8bb6f4e5 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -49,6 +49,7 @@ (define-module (gnu packages radio)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
+  #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -56,6 +57,7 @@ (define-module (gnu packages radio)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages engineering)
+  #:use-module (gnu packages flex)
   #:use-module (gnu packages fltk)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages gd)
@@ -190,6 +192,71 @@ (define-public libcorrect
 used as a drop-in substitute for @code{libfec}.")
       (license license:bsd-3))))
 
+(define-public libiio
+  (package
+    (name "libiio")
+    (version "0.26")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/analogdevicesinc/libiio")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "18cmaszfmn6kaa9gi26kkgjk506xqb8zsd4bq6yp8hzxr1qldfly"))))
+    (arguments
+     (list
+      #:tests? #f
+      #:configure-flags
+      #~(list
+         (string-append "-DUDEV_RULES_INSTALL_DIR=" #$output "/lib/udev/rules.d")
+         "-DOSX_PACKAGE=off"
+         "-DOSX_FRAMEWORK=off"
+         (string-append "-DPython_EXECUTABLE=" (search-input-file %build-inputs "/bin/python3"))
+         "-DPYTHON_BINDINGS=on")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch
+            (lambda _
+              (substitute* "bindings/python/iio.py"
+                (("_iiolib = \"iio\"") (string-append "_iiolib = \"" #$output "/lib/libiio.so\""))
+                (("find_library\\(_iiolib\\)") "_iiolib"))
+              ;; Libiio is not installed at the time of the build. The check is unnecessary,
+              ;; to do it the upstream way, we would have to configure, build, install
+              ;; without the bindings first, and then second time with the bindings...
+              (substitute* "bindings/python/setup.py.cmakein"
+                (("self._check_libiio_installed()") "")))))))
+    (native-inputs
+     (list
+      pkg-config
+      flex
+      bison
+      python
+      avahi
+      libaio))
+    (inputs
+     (list
+      libxml2
+      libusb))
+    (build-system cmake-build-system)
+    (license (list
+              license:lgpl2.1
+              license:gpl2))
+    (home-page "https://github.com/analogdevicesinc/libiio")
+    (synopsis "A cross platform library for interfacing with local and remote Linux IIO devices ")
+    (description
+     "Library for interfacing with Linux IIO devices
+libiio is used to interface to the Linux Industrial Input/Output (IIO) Subsystem.
+The Linux IIO subsystem is intended to provide support for devices that in some
+sense are analog to digital or digital to analog converters (ADCs, DACs).
+This includes, but is not limited to ADCs, Accelerometers, Gyros, IMUs,
+Capacitance to Digital Converters (CDCs), Pressure Sensors, Color, Light and Proximity Sensors,
+Temperature Sensors, Magnetometers, DACs, DDS (Direct Digital Synthesis), PLLs (Phase Locked Loops),
+Variable/Programmable Gain Amplifiers (VGA, PGA), and RF transceivers. You can use libiio natively
+on an embedded Linux target (local mode), or use libiio to communicate remotely to that same target
+from a host Linux, Windows or MAC over USB or Ethernet or Serial.")))
+
 (define-public liquid-dsp
   (package
     (name "liquid-dsp")

base-commit: 3ed24b2354907fd9ca4de6fa3ef0dc3015cafbca
-- 
2.49.0