~ruther/guix-local

aff6b2ac111834c5d2b2f04021b542563c2d4776 — Maxim Cournoyer 2 years ago 8da07d2
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>
1 files changed, 100 insertions(+), 92 deletions(-)

M gnu/packages/inkscape.scm
M gnu/packages/inkscape.scm => gnu/packages/inkscape.scm +100 -92
@@ 28,6 28,7 @@
  #: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 @@
  #: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 @@ endif()~%~%"
              ((".*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 @@ endif()~%~%"
            gtk+
            gtkspell3
            gsl
            imagemagick                 ;for libMagickCore and libMagickWand
            poppler
            lib2geom
            libjpeg-turbo


@@ 271,7 276,7 @@ endif()~%~%"
            python-lxml))
     (native-inputs
      (list gettext-minimal
            imagemagick                  ;for tests
            imagemagick/stable          ;for tests
            `(,glib "bin")
            googletest
            perl


@@ 300,19 305,22 @@ as the native format.")
    (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)))))