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