Subject: [PATCH v2] gnu: Add python-imageio-freeimage.

From: Vinicius Monego <[email-masked]>
Date: Mon, 17 Feb 2025 00:00:35 +0000

* gnu/packages/python-xyz.scm (python-imageio-freeimage): New variable.
(python-imageio)[arguments]: Remove the freeimage substitution from the
'fix-source phase.
[inputs]: Remove freeimage.

Change-Id: I842998baea1568e1d9d1328e4387d14867bd3bb2
---
Fixed license list. No other changes.

 gnu/packages/python-xyz.scm | 53 +++++++++++++++++++++++++++++++------
 1 file changed, 45 insertions(+), 8 deletions(-)

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index bb0ab777d5..d59cedb179 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -80,7 +80,7 @@
 ;;; Copyright © 2020 Josh Holland <[email-masked]>
 ;;; Copyright © 2020 Yuval Kogman <[email-masked]>
 ;;; Copyright © 2020, 2022 Michael Rohleder <[email-masked]>
-;;; Copyright © 2020, 2021, 2022, 2023, 2024 Vinicius Monego <[email-masked]>
+;;; Copyright © 2020, 2021, 2022, 2023, 2024, 2025 Vinicius Monego <[email-masked]>
 ;;; Copyright © 2020 Guy Fleury Iteriteka <[email-masked]>
 ;;; Copyright © 2020 Hendursaga <[email-masked]>
 ;;; Copyright © 2020 Malte Frank Gerdes <[email-masked]>
@@ -11892,6 +11892,50 @@ (define-public python-imageio-ffmpeg
 from FFMPEG, reliably terminating the process when done.")
    (license license:bsd-2)))
 
+(define-public python-imageio-freeimage
+  (package
+    (name "python-imageio-freeimage")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "imageio_freeimage" version))
+       (sha256
+        (base32 "1la0iv3617m52dnidhhrdaz9dpnlfqs7b83550d3jkjavv30md72"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:tests? #f ; tests need internet and are not distributed in PyPI
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; imageio_freeimage expects a copy of the library in its source
+          ;; tree.  Changing this would require hacky substitutions.
+          (add-after 'install 'freeimage-path
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let* ((pylib (string-append #$output "/lib/python"
+                                           #$(version-major+minor
+                                              (package-version python))
+                                           "/site-packages"))
+                     (iofi (string-append pylib "/imageio_freeimage")))
+                (mkdir-p (string-append iofi "/_lib"))
+                (symlink (search-input-file inputs "lib/libfreeimage.so")
+                         (string-append iofi "/_lib/libfreeimage.so"))))))))
+    (native-inputs (list python-poetry-core python-requests python-setuptools
+                         python-wheel))
+    (inputs (list freeimage))
+    (propagated-inputs (list python-imageio))
+    (home-page "https://github.com/imageio/imageio-freeimage")
+    (synopsis "Plugin for ImageIO that wraps the FreeImage library")
+    (description
+     "This package provides a plugin for @code{ImageIO} that wraps the
+@code{FreeImage} library.")
+    ;; As a derivative work of FreeImage, imageio_freeimage is licensed under
+    ;; GPLv2 or GPLv3, and the FreeImage Public License (FIPL).
+    ;; For more information, see the LICENSE file.
+    (license
+     (list license:gpl2 license:gpl3
+           (license:non-copyleft "https://spdx.org/licenses/FreeImage.html")))))
+
 (define-public python-imageio
   (package
     (name "python-imageio")
@@ -11911,12 +11955,6 @@ (define-public python-imageio
       #~(modify-phases %standard-phases
           (add-after 'unpack 'fix-source
             (lambda* (#:key inputs #:allow-other-keys)
-              (substitute* "imageio/plugins/_freeimage.py"
-                (("os\\.getenv\\(\"IMAGEIO_FREEIMAGE_LIB\".*\\)" all)
-                 (string-append
-                  "(" all " or \""
-                  (search-input-file inputs "lib/libfreeimage.so")
-                  "\")")))
               (substitute* "imageio/core/util.py"
                 (("\"/var/tmp\"")
                  "os.getenv(\"TMPDIR\", \"/tmp\")"))))
@@ -11927,7 +11965,6 @@ (define-public python-imageio
                   all fun args)
                  (string-append "raises(ValueError, " fun ", " args ")")))
               (delete-file "tests/test_freeimage.py"))))))
-    (inputs (list freeimage))
     (propagated-inputs
      (list python-imageio-ffmpeg python-numpy python-pillow python-tifffile))
     (native-inputs

base-commit: b4dc8eb4adff9d824ff7df704e134964b3b47396
-- 
2.48.1