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

  • Open
  • quality assurance status badge
Details
2 participants
  • Vinicius Monego
  • Sharlatan Hellseher
Owner
unassigned
Submitted by
Vinicius Monego
Severity
normal

Debbugs page

Vinicius Monego wrote 4 weeks ago
(address . guix-patches@gnu.org)(name . Vinicius Monego)(address . monego@posteo.net)
0a6be0beacf3a8eab021bb32670e02ccf520f038.1739748428.git.monego@posteo.net
* 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(-)

Toggle diff (87 lines)
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 <josh@inv.alid.pw>
;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
;;; Copyright © 2020, 2022 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020, 2021, 2022, 2023, 2024 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021, 2022, 2023, 2024, 2025 Vinicius Monego <monego@posteo.net>
;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
;;; Copyright © 2020 Hendursaga <hendursaga@yahoo.com>
;;; Copyright © 2020 Malte Frank Gerdes <malte.f.gerdes@gmail.com>
@@ -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
Vinicius Monego wrote 4 weeks ago
[PATCH v2] gnu: Add python-imageio-freeimage.
(address . 76354@debbugs.gnu.org)(name . Vinicius Monego)(address . monego@posteo.net)
22439888825192df60e3ae5b34c302a685d231eb.1739750350.git.monego@posteo.net
* 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(-)

Toggle diff (89 lines)
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 <josh@inv.alid.pw>
;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
;;; Copyright © 2020, 2022 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020, 2021, 2022, 2023, 2024 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021, 2022, 2023, 2024, 2025 Vinicius Monego <monego@posteo.net>
;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
;;; Copyright © 2020 Hendursaga <hendursaga@yahoo.com>
;;; Copyright © 2020 Malte Frank Gerdes <malte.f.gerdes@gmail.com>
@@ -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
Sharlatan Hellseher wrote 4 weeks ago
[PATCH] gnu: Add python-imageio-freeimage.
(address . 76354@debbugs.gnu.org)
87ldu3b1wi.fsf@gmail.com
Hi,

Toggle quote (3 lines)
> (python-imageio)[arguments]: Remove the freeimage substitution from the
> 'fix-source phase.

Toggle snippet (8 lines)
(add-after 'unpack 'fix-failing-tests
(lambda _
(substitute* "tests/test_core.py"
(("(core\\.load_lib)\\((\\[gllib\\], \\[\\])\\)"
all fun args)
(string-append "raises(ValueError, " fun ", " args ")")))
(delete-file "tests/test_freeimage.py"))))))
It looks the whole [arguments] block may be removed and skip test
logic applied in #:test-flags as the package uses python-pytest e.g.
"--ignore=tests/test_freeimage.py" or "-k not <test-name>".

Toggle snippet (2 lines)
+ #:tests? #f ; tests need internet and are not distributed in PyPI
Maybe install from Git?
the only one tests file which does not require urllib or requrests.

Toggle snippet (2 lines)
(symlink (search-input-file inputs "lib/libfreeimage.so")
Maybe swap to #$(this-package-input "<package>") instead?

---
Oleg
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEmEeB3micIcJkGAhndtcnv/Ys0rUFAme0wp0ACgkQdtcnv/Ys
0rXAQg//YlcLyRHdxJgapb9ayVs/nGyhSFHqMxgfOW0ZhemvmRQlQKNsqqBJCkPG
+mU0HDvGrfURnxVRH9WT5uJy/zS8Im5vudmDQrpK/9bnxOT/Jd7f70S7D3+jaQDv
JxFtZqQm2y9aC3OYzXKuGvl7dfa8xbJH58K+Dc515GN23aGuiNAJrGZhkWioB4Hv
wn9ZWuPGQBYOTNhzWJ2TK4I0V5LjGzoiaShtXKKa+iVrwr93a78lvufCStbIhzdj
QLUAjKLIQfQxiZ3RD5+hmBqWvMvc61PpMR31iSzwuAemFUrQR8nRXFq5HfWSeb5E
tS6QR2ihBfJNbCg1gJKWyCf97oAdm9CAzU7eGVueKRlWfcMNfeFVlcGYWH4FrjgZ
/nMKS7hXNNEaA+fhQM9Q8WARhgTtr9FUaoNb0eTGh5qmF+XRqDCGHN57MYlrUVd4
P5rEWc9oLtuLYjInXU0maW6eAD4RQbbmlxM3x+jnHqAxiuIIUVBumNokTBk9HjYD
RasnYSVhe9BYLnfXSiLaPi0RTisVNPSgF33tDW+dQPw5dC6/0OjV4vF4weTdBXRf
pNdDvdGi9hbbiI7sOZ509zKgSPkb2677VNIuQO5+BJkpo+IaJq2+5gOEGk0cqCR2
Ij8B4EhlevQ0zO9sCJ3QWfoSfDtoh57uOgpw0kNt8fZt8cN8QRo=
=fJ70
-----END PGP SIGNATURE-----

Vinicius Monego wrote 2 weeks ago
[PATCH v3] gnu: Add python-imageio-freeimage.
(address . 76354@debbugs.gnu.org)(name . Vinicius Monego)(address . monego@posteo.net)
f43c75335e45e89e93db0c93dde8a970988ffac0.1740874843.git.monego@posteo.net
* gnu/packages/python-xyz.scm (python-imageio-freeimage): New variable.
(python-imageio)[arguments]<#:phases>: Remove the freeimage substitution
from the 'fix-source phase. Delete the 'fix-failing-tests phase, add
test logic in #:test-flags instead.
[inputs]: Remove freeimage.

Change-Id: I842998baea1568e1d9d1328e4387d14867bd3bb2
---
gnu/packages/python-xyz.scm | 68 +++++++++++++++++++++++++++----------
1 file changed, 51 insertions(+), 17 deletions(-)

Toggle diff (103 lines)
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index c15671b53f..d3b42f7631 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -80,7 +80,7 @@
;;; Copyright © 2020 Josh Holland <josh@inv.alid.pw>
;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
;;; Copyright © 2020, 2022 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020, 2021, 2022, 2023, 2024 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021, 2022, 2023, 2024, 2025 Vinicius Monego <monego@posteo.net>
;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
;;; Copyright © 2020 Hendursaga <hendursaga@yahoo.com>
;;; Copyright © 2020 Malte Frank Gerdes <malte.f.gerdes@gmail.com>
@@ -12014,6 +12014,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")
@@ -12028,28 +12072,18 @@ (define-public python-imageio
(build-system pyproject-build-system)
(arguments
(list
- #:test-flags #~(list "-m" "not needs_internet")
+ #:test-flags #~(list "-m" "not needs_internet"
+ ;; This attempts to load libGL.so (provided by mesa)
+ ;; at the Python store path (sys.base_prefix?).
+ "-k" "not test_findlib2"
+ "--ignore" "tests/test_freeimage.py")
#:phases
#~(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\")"))))
- (add-after 'unpack 'fix-failing-tests
- (lambda _
- (substitute* "tests/test_core.py"
- (("(core\\.load_lib)\\((\\[gllib\\], \\[\\])\\)"
- all fun args)
- (string-append "raises(ValueError, " fun ", " args ")")))
- (delete-file "tests/test_freeimage.py"))))))
- (inputs (list freeimage))
+ "os.getenv(\"TMPDIR\", \"/tmp\")")))))))
(propagated-inputs
(list python-imageio-ffmpeg python-numpy python-pillow python-tifffile))
(native-inputs

base-commit: e7b87dcde25b5ef278441d6ea42a7f662fe6d53f
--
2.48.1
Vinicius Monego wrote 2 weeks ago
Re: [PATCH] gnu: Add python-imageio-freeimage.
(address . 76354@debbugs.gnu.org)(name . Sharlatan Hellseher)(address . sharlatanus@gmail.com)
160ad832-f82e-4dd9-9315-1e6c04ab0983@posteo.net
Hi,

Toggle quote (4 lines)
> It looks the whole [arguments] block may be removed and skip test
> logic applied in #:test-flags as the package uses python-pytest e.g.
> "--ignore=tests/test_freeimage.py" or "-k not <test-name>".

Done, but I had to keep the TMPDIR substitution.

Toggle quote (4 lines)
> Maybe install from Git?
> https://github.com/imageio/imageio-freeimage/blob/master/tests/test_freeimage.py
> the only one tests file which does not require urllib or requrests.

I tried, but most tests run imageio's downloader under the hood. IIRC
only 2 tests pass by default. Then I got to a point where some tests
pass in the build environment preserved by -K but still don't pass in
the build run. I eventually gave up on it as a few other tests were
still failing.

Toggle quote (1 lines)
> Maybe swap to #$(this-package-input "<package>") instead?
Wasn't search-input-file preferred to not break package transformation?
I skipped this change in v3.
Attachment: file
Vinicius Monego wrote 2 weeks ago
(address . 76354@debbugs.gnu.org)(name . Sharlatan Hellseher)(address . sharlatanus@gmail.com)
5c64e05c-8de5-4ecc-a0bc-651f4a95ae3c@posteo.net
Hi,

Toggle quote (4 lines)
> It looks the whole [arguments] block may be removed and skip test
> logic applied in #:test-flags as the package uses python-pytest e.g.
> "--ignore=tests/test_freeimage.py" or "-k not <test-name>".

Done, but I had to keep the TMPDIR substitution.

Toggle quote (4 lines)
> Maybe install from Git?
> https://github.com/imageio/imageio-freeimage/blob/master/tests/test_freeimage.py
> the only one tests file which does not require urllib or requrests.

I tried, but most tests run imageio's downloader under the hood. IIRC
only 2 tests pass by default. Then I got to a point where some tests
pass in the build environment preserved by -K but still don't pass in
the build run. I eventually gave up on it as a few other tests were
still failing.

Toggle quote (1 lines)
> Maybe swap to #$(this-package-input "<package>") instead?
Wasn't search-input-file preferred to not break package transformation?
I skipped this change in v3.

Vinicius
Attachment: file
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 76354@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 76354
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch
You may also tag this issue. See list of standard tags. For example, to set the confirmed and easy tags
mumi command -t +confirmed -t +easy
Or, remove the moreinfo tag and set the help tag
mumi command -t -moreinfo -t +help