diff options
Diffstat (limited to 'gnu/packages/inkscape.scm')
-rw-r--r-- | gnu/packages/inkscape.scm | 302 |
1 files changed, 183 insertions, 119 deletions
diff --git a/gnu/packages/inkscape.scm b/gnu/packages/inkscape.scm index aa2c6419a0..524277fc2b 100644 --- a/gnu/packages/inkscape.scm +++ b/gnu/packages/inkscape.scm @@ -1,13 +1,13 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 John Darrington <jmd@gnu.org> ;;; Copyright © 2014, 2016 Mark H Weaver <mhw@netris.org> -;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2016, 2018, 2024 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2017, 2020 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> -;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com> +;;; Copyright © 2020, 2021, 2022, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; Copyright © 2020 Boris A. Dekshteyn <boris.dekshteyn@gmail.com> ;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech> -;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2023, 2024 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -28,10 +28,11 @@ #: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) - #:use-module (gnu packages aspell) + #:use-module (gnu packages algebra) #:use-module (gnu packages bash) #:use-module (gnu packages bdw-gc) #:use-module (gnu packages boost) @@ -50,6 +51,7 @@ #:use-module (gnu packages python) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) + #:use-module (gnu packages readline) #:use-module (gnu packages xml) #:use-module (gnu packages ghostscript) #:use-module (gnu packages fontutils) @@ -58,21 +60,21 @@ #: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 (name "inkscape") - (version "1.2.1") + (version "1.3.2") (source (origin (method url-fetch) (uri (string-append "https://media.inkscape.org/dl/" "resources/file/" "inkscape-" version ".tar.xz")) - (patches (search-patches "inkscape-poppler-compat.patch")) (sha256 - (base32 "06scilds4p4bw337ss22nfdxy2kynv5yjw6vq6nlpjm7xfh7vkj6")) + (base32 "0sq81smxwypgnp7r3wgza8w25dsz9qa8ga79sc85xzj3qi6q9lfv")) (modules '((guix build utils) (ice-9 format))) (snippet @@ -156,123 +158,172 @@ 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" + ;; TODO: Remove after next release, since the problematic + ;; libsoup/soup.h include is no longer used. + (string-append "-DCMAKE_CXX_FLAGS=-I" + (search-input-directory %build-inputs + "/include/libsoup-2.4"))) + #: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)) + #$@(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") + ((" lpe-test") " #lpe-test") + (("add_subdirectory\\(lpe_tests\\)") "")) + ;; https://gitlab.com/inkscape/inkscape/-/issues/3554#note_1035539888 + ;; According to upstream, this is a false positive. + (substitute* "testfiles/rendering_tests/CMakeLists.txt" + (("add_rendering_test\\(test-use" all) + (string-append "#" all))) + ;; 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)) + ;; These also seem to be failing due to precision errors. + (("add_pdfinput_test\\(font-(spacing|style) 1 draw-all" all) + (string-append "#" all)))))) + '()) + #$@(if (target-x86-32?) + '((add-after 'unpack 'fix-32bit-size_t-format + (lambda _ + ;; Fix an error due to format type mismatch with 32-bit size_t. + (substitute* "testfiles/src/visual-bounds-test.cpp" + (("%lu") "%u"))))) + '()) + (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 + ;; Use ctest directly so that we can easily exclude problematic + ;; tests. + (lambda* (#:key parallel-tests? tests? #:allow-other-keys) + (when tests? + ;; The following tests fails, perhaps due to building without + ;; ImageMagick (see: + ;; https://gitlab.com/inkscape/inbox/-/issues/10005). + (let ((job-count (if parallel-tests? + (number->string (parallel-job-count)) + "1")) + (skipped-tests + (list "cli_export-type-caseinsensitive_check_output" + "cli_export-type_xaml_check_output" + "cli_export-height_export-use-hints_check_output" + "cli_export-plain-svg_check_output" + "cli_export-use-hints_export-id_check_output" + "cli_export-extension_svg_check_output" + "cli_export-extension_ps_check_output" + "cli_export-extension_eps_check_output" + "cli_export-extension_pdf_check_output" + "cli_export-plain-extension-svg_check_output" + ;; These fail non-deterministically (see: + ;; https://gitlab.com/inkscape/inbox/-/issues/10005). + "cli_export-ps-level_3_check_output" + "cli_export-ps-level_3_content_check_output" + "cli_export-ps-level_2_content_check_output" + "cli_export-ps-level_2_check_output" + ;; These fail on i686 but not x86-64 + #$@(if (target-x86-32?) + '("cli_pdfinput-font-spacing_check_output" + "cli_pdfinput-font-style_check_output" + "cli_pdfinput-latex_check_output" + "cli_pdfinput-multi-page-sample_check_output" + "test_lpe") + '())))) + (invoke "make" "-j" job-count "tests") + (invoke "ctest" "-j" job-count + "--output-on-error" + "-E" (string-append + "(" (string-join skipped-tests "|") ")")))))) + (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* (#:key inputs #:allow-other-keys) + (wrap-program (string-append #$output "/bin/inkscape") + `("PATH" prefix + (,(dirname (search-input-file inputs "bin/python")))) + `("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"))) + ;; Ensure GObject Introspection typelibs are found. + `("GI_TYPELIB_PATH" ":" prefix + (,(getenv "GI_TYPELIB_PATH"))))))))) (inputs - (list aspell + (list (librsvg-for-system) ;for the pixbuf loader autotrace bash-minimal + boost + freetype gdl-minimal - gtkmm-3 - gtk+ - gtkspell3 gsl - poppler + gspell + gtk+ + gtkmm-3 + lcms lib2geom + libcdr + libgc libjpeg-turbo libpng - libxml2 - libxslt - libgc - (librsvg-for-system) ;for the pixbuf loader libsoup-minimal-2 - libcdr libvisio libwpd libwpg - freetype + libxml2 + libxslt + poppler popt potrace - lcms - boost - python-wrapper - python-scour - python-pyserial + ;; These Python dependencies are used by the Inkscape extension + ;; management system. To verify that it is working, visit the + ;; Extensions -> Manage Extensions... menu. + python-appdirs + python-cssselect + python-lxml python-numpy - python-lxml)) + python-pygobject + python-pyserial + python-requests + python-scour + python-wrapper + readline)) (native-inputs - (list gettext-minimal - imagemagick ;for tests - `(,glib "bin") + (list `(,glib "bin") + bc + gettext-minimal googletest + imagemagick/stable ;for tests perl pkg-config)) (home-page "https://inkscape.org/") @@ -286,7 +337,7 @@ as the native format.") (package (inherit inkscape/stable) (name "inkscape") - (version "1.2.1") + (version "1.3.2") (source (origin (inherit (package-source inkscape/stable)) @@ -295,23 +346,36 @@ as the native format.") "resources/file/" "inkscape-" version ".tar.xz")) (sha256 - (base32 "06scilds4p4bw337ss22nfdxy2kynv5yjw6vq6nlpjm7xfh7vkj6")))) + (base32 "0sq81smxwypgnp7r3wgza8w25dsz9qa8ga79sc85xzj3qi6q9lfv")))) (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 + #$@(if (target-x86-32?) + #~() ;XXX: there are remaining failures on i686 + #~((replace 'check + ;; Re-instate the tests disabled in inkscape/stable, now that + ;; their ImageMagick requirement is satisfied. + (assoc-ref %standard-phases 'check)))) + + (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 + (native-inputs + (modify-inputs (package-native-inputs inkscape/stable) + ;; Only use 1 imagemagick across the package build. + (replace "imagemagick" imagemagick))) (properties (alist-delete 'hidden? (package-properties inkscape/stable))))) |