gnu: inkscape/stable: Build stable variant without imagemagick support.

This is done to allow imagemagick (not /stable variant) to be updated more
freely.

* gnu/packages/inkscape.scm (inkscape/stable)
[arguments]: Use gexps.  Add #:disallowed-references argument to guard against
referring to imagemagick/stable.  Add #:configure-flags argument.
[inputs]: Remove imagemagick.
[native-inputs]: Relpace imagemagick with imagemagick/stable.
* gnu/packages/inkscape.scm (inkscape): Use gexps.  Clear WITH_IMAGE_MAGICK
configure flag.
[inputs]: Add imagemagick.

Fixes: https://issues.guix.gnu.org/47479
Change-Id: Ifc812d2fc1eba5d2b45c3d7519ae38ac0294bd0a
Reported-by: Maxime Devos <maximedevos@telenet.be>
This commit is contained in:
Maxim Cournoyer 2024-01-21 22:45:21 -05:00 committed by Ludovic Courtès
parent 8da07d2e9e
commit aff6b2ac11
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -28,6 +28,7 @@ (define-module (gnu packages inkscape)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix gexp)
#:use-module (guix utils)
#:use-module (guix build-system cmake)
#:use-module (gnu packages)
@ -58,7 +59,8 @@ (define-module (gnu packages inkscape)
#:use-module (srfi srfi-1))
;;; A variant of Inkscape intended to be bumped only on core-updates, to avoid
;;; rebuilding 2k+ packages through dblatex.
;;; rebuilding 2k+ packages through dblatex. It should only be used as a
;;; native-input since it might not receive timely security updates.
(define-public inkscape/stable
(hidden-package
(package
@ -156,86 +158,90 @@ (define-public inkscape/stable
((".*find_package\\(DoubleConversion.*") ""))))))
(build-system cmake-build-system)
(arguments
`(#:test-target "check" ;otherwise some test binaries are missing
#:imported-modules (,@%cmake-build-system-modules
(list
#:test-target "check" ;otherwise some test binaries are missing
#:disallowed-references (list imagemagick/stable)
#:imported-modules `(,@%cmake-build-system-modules
(guix build glib-or-gtk-build-system))
#:modules ((guix build cmake-build-system)
#:modules '((guix build cmake-build-system)
((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
(guix build utils))
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'generate-gdk-pixbuf-loaders-cache-file
(assoc-ref glib-or-gtk:%standard-phases
'generate-gdk-pixbuf-loaders-cache-file))
(add-after 'unpack 'patch-icon-cache-generator
(lambda _
(substitute* "share/icons/application/CMakeLists.txt"
(("gtk-update-icon-cache") "true"))))
(add-after 'unpack 'disable-latex-export-tests
;; FIXME: For some reason the test.pdf_tex file generated by the
;; "--export-latex" lacks "some text" in its content when run in
;; the build environment. Skip the related tests.
(lambda _
(substitute* "testfiles/cli_tests/CMakeLists.txt"
(("add_cli_test\\(export-latex")
"message(TEST_DISABLED: export-latex"))))
(add-after 'unpack 'disable-vertical-glyph-tests
(lambda _
;; FIXME: These tests fail with newer Pango and Harfbuzz:
;; https://gitlab.com/inkscape/inkscape/-/issues/2917
;; https://gitlab.com/inkscape/inkscape/-/issues/3554
;; Simply providing older versions don't work, as we need
;; the full GTK stack; we could use package-input-rewriting
;; but then have to also downgrade pangomm and disable tests
;; in librsvg and GTK+. Just ignore for now.
(substitute* "testfiles/rendering_tests/CMakeLists.txt"
(("test-glyph-y-pos") "")
(("text-glyphs-combining") "")
(("text-glyphs-vertical") "")
(("test-rtl-vertical") ""))))
,@(if (or (target-aarch64?)
(target-ppc64le?)
(target-riscv64?))
`((add-after 'unpack 'disable-more-tests
(lambda _
;; https://gitlab.com/inkscape/inkscape/-/issues/3554#note_1035680690
(substitute* "testfiles/CMakeLists.txt"
(("lpe64-test") "#lpe64-test"))
;; https://gitlab.com/inkscape/inkscape/-/issues/3554#note_1035539888
;; According to upstream, this is a false positive.
(substitute* "testfiles/rendering_tests/CMakeLists.txt"
(("test-use") "#test-use"))
;; https://gitlab.com/inkscape/inkscape/-/issues/3554#note_1035539888
;; Allegedly a precision error in the gamma.
(substitute* "testfiles/cli_tests/CMakeLists.txt"
(("add_cli_test\\(export-png-color-mode-gray-8_png" all)
(string-append "#" all))))))
'())
(add-after 'unpack 'set-home
;; Mute Inkscape warnings during tests.
(lambda _
(setenv "HOME" (getcwd))))
;; Move the check phase after the install phase, as when run in the
;; tests, Inkscape relies on files that are not yet installed, such
;; as the "share/inkscape/ui/units.xml" file.
(delete 'check)
(add-after 'install 'check
(assoc-ref %standard-phases 'check))
(add-after 'install 'glib-or-gtk-compile-schemas
(assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
(add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap
(assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
(add-after 'install 'wrap-program
;; Disable imagemagick support in the stable variant, to reduce the
;; number of dependents of the 'imagemagick' package.
#:configure-flags #~(list "-DWITH_IMAGE_MAGICK=OFF")
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'generate-gdk-pixbuf-loaders-cache-file
(assoc-ref glib-or-gtk:%standard-phases
'generate-gdk-pixbuf-loaders-cache-file))
(add-after 'unpack 'patch-icon-cache-generator
(lambda _
(substitute* "share/icons/application/CMakeLists.txt"
(("gtk-update-icon-cache") "true"))))
(add-after 'unpack 'disable-latex-export-tests
;; FIXME: For some reason the test.pdf_tex file generated by the
;; "--export-latex" lacks "some text" in its content when run in
;; the build environment. Skip the related tests.
(lambda _
(substitute* "testfiles/cli_tests/CMakeLists.txt"
(("add_cli_test\\(export-latex")
"message(TEST_DISABLED: export-latex"))))
(add-after 'unpack 'disable-vertical-glyph-tests
(lambda _
;; FIXME: These tests fail with newer Pango and Harfbuzz:
;; https://gitlab.com/inkscape/inkscape/-/issues/2917
;; https://gitlab.com/inkscape/inkscape/-/issues/3554
;; Simply providing older versions don't work, as we need
;; the full GTK stack; we could use package-input-rewriting
;; but then have to also downgrade pangomm and disable tests
;; in librsvg and GTK+. Just ignore for now.
(substitute* "testfiles/rendering_tests/CMakeLists.txt"
(("test-glyph-y-pos") "")
(("text-glyphs-combining") "")
(("text-glyphs-vertical") "")
(("test-rtl-vertical") ""))))
#$@(if (or (target-aarch64?)
(target-ppc64le?)
(target-riscv64?))
'((add-after 'unpack 'disable-more-tests
(lambda _
;; https://gitlab.com/inkscape/inkscape/-/issues/3554#note_1035680690
(substitute* "testfiles/CMakeLists.txt"
(("lpe64-test") "#lpe64-test"))
;; https://gitlab.com/inkscape/inkscape/-/issues/3554#note_1035539888
;; According to upstream, this is a false positive.
(substitute* "testfiles/rendering_tests/CMakeLists.txt"
(("test-use") "#test-use"))
;; https://gitlab.com/inkscape/inkscape/-/issues/3554#note_1035539888
;; Allegedly a precision error in the gamma.
(substitute* "testfiles/cli_tests/CMakeLists.txt"
(("add_cli_test\\(export-png-color-mode-gray-8_png" all)
(string-append "#" all))))))
'())
(add-after 'unpack 'set-home
;; Mute Inkscape warnings during tests.
(lambda _
(setenv "HOME" (getcwd))))
;; Move the check phase after the install phase, as when run in the
;; tests, Inkscape relies on files that are not yet installed, such
;; as the "share/inkscape/ui/units.xml" file.
(delete 'check)
(add-after 'install 'check
(assoc-ref %standard-phases 'check))
(add-after 'install 'glib-or-gtk-compile-schemas
(assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
(add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap
(assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
(add-after 'install 'wrap-program
;; Ensure Python is available at runtime.
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(wrap-program (string-append out "/bin/inkscape")
`("GUIX_PYTHONPATH" prefix
(,(getenv "GUIX_PYTHONPATH")))
;; Wrapping GDK_PIXBUF_MODULE_FILE allows Inkscape to load
;; its own icons in pure environments.
`("GDK_PIXBUF_MODULE_FILE" =
(,(getenv "GDK_PIXBUF_MODULE_FILE"))))))))))
(lambda _
(wrap-program (string-append #$output "/bin/inkscape")
`("GUIX_PYTHONPATH" prefix
(,(getenv "GUIX_PYTHONPATH")))
;; Wrapping GDK_PIXBUF_MODULE_FILE allows Inkscape to load
;; its own icons in pure environments.
`("GDK_PIXBUF_MODULE_FILE" =
(,(getenv "GDK_PIXBUF_MODULE_FILE")))))))))
(inputs
(list aspell
autotrace
@ -245,7 +251,6 @@ (define-public inkscape/stable
gtk+
gtkspell3
gsl
imagemagick ;for libMagickCore and libMagickWand
poppler
lib2geom
libjpeg-turbo
@ -271,7 +276,7 @@ (define-public inkscape/stable
python-lxml))
(native-inputs
(list gettext-minimal
imagemagick ;for tests
imagemagick/stable ;for tests
`(,glib "bin")
googletest
perl
@ -300,19 +305,22 @@ (define-public inkscape
(build-system cmake-build-system)
(arguments
(substitute-keyword-arguments (package-arguments inkscape/stable)
;; ((#:configure-flags flags ''())
;; ;; Enable ImageMagick support.
;; #~(delete "-DWITH_IMAGE_MAGICK=OFF" #$flags))
((#:phases phases)
`(modify-phases ,phases
(replace 'wrap-program
;; Ensure Python is available at runtime.
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(wrap-program (string-append out "/bin/inkscape")
`("GUIX_PYTHONPATH" prefix
(,(getenv "GUIX_PYTHONPATH")))
;; Wrapping GDK_PIXBUF_MODULE_FILE allows Inkscape to load
;; its own icons in pure environments.
`("GDK_PIXBUF_MODULE_FILE" =
(,(getenv "GDK_PIXBUF_MODULE_FILE")))))))))))
#~(modify-phases #$phases
(replace 'wrap-program
;; Ensure Python is available at runtime.
(lambda _
(wrap-program (string-append #$output "/bin/inkscape")
`("GUIX_PYTHONPATH" prefix
(,(getenv "GUIX_PYTHONPATH")))
;; Wrapping GDK_PIXBUF_MODULE_FILE allows Inkscape to load
;; its own icons in pure environments.
`("GDK_PIXBUF_MODULE_FILE" =
(,(getenv "GDK_PIXBUF_MODULE_FILE"))))))))))
(inputs (modify-inputs (package-inputs inkscape/stable)
(append python-cssselect))) ;to render qrcode
(append imagemagick ;for libMagickCore and libMagickWand
python-cssselect))) ;to render qrcode
(properties (alist-delete 'hidden? (package-properties inkscape/stable)))))