Subject: bug#76354: closed ([PATCH] gnu: Add python-imageio-freeimage.)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 29 Apr 2025 12:08:02 +0000

Your bug report

#76354: [PATCH] gnu: Add python-imageio-freeimage.

which was filed against the guix-patches package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
76354: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=76354
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: [PATCH] gnu: Add python-imageio-freeimage.
From: Sharlatan Hellseher <[email-masked]>
To: [email-masked]
Date: Tue, 29 Apr 2025 13:06:50 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi Vinicius,

Sorry for delay and thanks for v3!

I've successfully built all first level dependent packages and have 100+
is ok to push directly to master.

--8<---------------cut here---------------start------------->8---
> ./pre-inst-env guix build -P1 python-imageio-freeimage -P1 python-imageio
guix build: computing dependents of package [email-masked]...
guix build: computing dependents of package [email-masked]...
/gnu/store/m8h67ckjs0b1hvqv036cdgp78ih9hnb5-python-imageio-freeimage-0.1.1
/gnu/store/5mqdqyz0z11qxd4dyslic8axrslbwdvb-python-imageio-2.36.1
/gnu/store/v67jqcb3bhh205x7gl4rls9mxcy9payb-python-fanc-0.9.28
/gnu/store/dv2fcfci3hx86fjnzgl9wlxm83n1fbnw-python-pims-0.7
/gnu/store/8zdznsmbxpp4krxh15vkg7b8ddxvnpdk-python-clingraph-1.1.2
/gnu/store/vjq7ibv82p9gp02klhkr7wsjilbnrhck-python-pyvista-0.44.2
/gnu/store/0di2vw749n6v8b6vv47vwzcynlyy8l2j-python-scikit-image-0.23.2
/gnu/store/m8h67ckjs0b1hvqv036cdgp78ih9hnb5-python-imageio-freeimage-0.1.1
/gnu/store/70bj97fm6wib8krh33jlgi5vkn2lqvn4-python-matplotx-0.3.10
--8<---------------cut here---------------end--------------->8---

Pushed to maseter as fbf766295710078b5cd2e8810459908d9f777442.

--
Oleg

Subject: [PATCH] gnu: Add python-imageio-freeimage.
From: Vinicius Monego <[email-masked]>
To: [email-masked]
Cc: Vinicius Monego <[email-masked]>
Date: Sun, 16 Feb 2025 23:41:56 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

* 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
---
This patch is intended to clear transitive dependencies on openexr@2 and freeimage via imageio, which includes a freeimage plugin. Imageio has around ~100 packages to rebuild.

Freeimage last release was back in 2018, it is unknown to me whether it is still maintained and it may contain known and unpatched vulnerabilities (guix lint -c cve freeimage). OpenEXR 2 was also abandoned in favor of OpenEXR 3.

It seems that Debian has a patch to make freeimage work with OpenEXR 3. I may have a look at this later.

I noticed that imageio made a separate package for freeimage due to license concerns but I thought it would be a good fit for Guix for the reasons aforementioend.

Anyway, freeimage is slowly being deprecated in imageio: https://github.com/imageio/imageio/issues/892

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

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index bb0ab777d5..0a9d0e02b0 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,48 @@ (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:gplv2 license:gplv3 license:non-copyleft))))
+
 (define-public python-imageio
   (package
     (name "python-imageio")
@@ -11911,12 +11953,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 +11963,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