guix_mirror_bot pushed a commit to branch kde-team
in repository guix.

commit 53eaac11ec6035be5e652c3ccd58da7d8856c404
Author: Konstantin Suntsov <[email protected]>
AuthorDate: Wed Aug 12 01:43:12 2026 +0500

    gnu: inkscape/pinned, inkscape: Update to 1.4.4.
    
    * gnu/packages/inkscape.scm (inkscape/pinned):
    [version]: Update to 1.4.4.
    [source]: Add patches for poppler compatibility.
    [arguments]<#:phases>{disable-svg-parser-test}: New phase to disable test
    that is failing without gtksourceview.
    (%inkscape-release-year): Update to 2026.
    (inkscape)[name, version, source]: Remove inherited fiels.
    [arguments]<#:phases>: Remove disable-svg-parser-test phase to re-enable
    test.
    [inputs]: Add gtksourceview-4.
    * gnu/packages/patches/inkscape-libxml2.patch: Remove file.
    * gnu/packages/patches/inkscape-poppler-26-1.patch: New file.
    * gnu/packages/patches/inkscape-poppler-26-2.patch: New file.
    * gnu/packages/patches/inkscape-poppler-26-3.patch: New file.
    * gnu/local.mk (dist_patch_DATA): Remove inkscape-libxml2.patch;
    add reference to inkscape-poppler-26-1.patch, inkscape-poppler-26-2.patch,
    inkscape-poppler-26-3.patch.
    
    Co-authored-by: Rodion Goritskov <[email protected]>
    Signed-off-by: Andreas Enge <[email protected]>
---
 gnu/local.mk                                     |   4 +-
 gnu/packages/inkscape.scm                        |  36 +-
 gnu/packages/patches/inkscape-libxml2.patch      |  33 --
 gnu/packages/patches/inkscape-poppler-26-1.patch | 479 +++++++++++++++++++++++
 gnu/packages/patches/inkscape-poppler-26-2.patch | 318 +++++++++++++++
 gnu/packages/patches/inkscape-poppler-26-3.patch |  67 ++++
 6 files changed, 886 insertions(+), 51 deletions(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index b7f1f580ea..3138bce412 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1673,7 +1673,9 @@ dist_patch_DATA =                                         
\
   %D%/packages/patches/inetutils-drop-test.patch                \
   %D%/packages/patches/inferno-fix-crash.patch         \
   %D%/packages/patches/iniparser-remove-fetchcontent-usage.patch               
\
-  %D%/packages/patches/inkscape-libxml2.patch          \
+  %D%/packages/patches/inkscape-poppler-26-1.patch             \
+  %D%/packages/patches/inkscape-poppler-26-2.patch             \
+  %D%/packages/patches/inkscape-poppler-26-3.patch             \
   %D%/packages/patches/instead-use-games-path.patch            \
   %D%/packages/patches/intltool-perl-compatibility.patch       \
   %D%/packages/patches/insight-toolkit-fix-build.patch                 \
diff --git a/gnu/packages/inkscape.scm b/gnu/packages/inkscape.scm
index 02b34f44e2..5790ddf5f0 100644
--- a/gnu/packages/inkscape.scm
+++ b/gnu/packages/inkscape.scm
@@ -9,6 +9,8 @@
 ;;; Copyright © 2020 Ekaitz Zarraga <[email protected]>
 ;;; Copyright © 2023, 2024 Efraim Flashner <[email protected]>
 ;;; Copyright © 2025 John Kehayias <[email protected]>
+;;; Copyright © 2026 Konstantin Suntsov <[email protected]>
+;;; Copyright © 2026 Rodion Goritskov <[email protected]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -68,7 +70,7 @@
   (hidden-package
    (package
      (name "inkscape")
-     (version "1.3.2")
+     (version "1.4.4")
      (source
       (origin
         (method url-fetch)
@@ -76,10 +78,12 @@
                             "resources/file/"
                             "inkscape-" version ".tar.xz"))
         (sha256
-         (base32 "0sq81smxwypgnp7r3wgza8w25dsz9qa8ga79sc85xzj3qi6q9lfv"))
+         (base32 "0vl5p2rxki7lcgf7k8x6p6m0lw30n1g6cv7ibhd8g2z0l59mgkmv"))
         (modules '((guix build utils)
                    (ice-9 format)))
-        (patches (search-patches "inkscape-libxml2.patch"))
+        (patches (search-patches "inkscape-poppler-26-1.patch"
+                                 "inkscape-poppler-26-2.patch"
+                                 "inkscape-poppler-26-3.patch"))
         (snippet
          '(begin
             (let-syntax
@@ -215,6 +219,14 @@ endif()~%~%"
                         (substitute* "testfiles/src/visual-bounds-test.cpp"
                           (("%lu") "%u")))))
                   '())
+           (add-after 'unpack 'disable-svg-parser-test
+             (lambda _
+               ;; Fail because without gtksourceview in deps
+               ;; SvgPathParser::prettify_svgd is not available
+               ;; for tests
+               (substitute* "testfiles/CMakeLists.txt"
+                 (("    svg-path-parser-test")
+                  "    #svg-path-parser-test"))))
            (add-after 'unpack 'set-home
              ;; Mute Inkscape warnings during tests.
              (lambda _
@@ -342,23 +354,10 @@ as the native format.")
 
 ;;; The Inkscape release year used in the about dialog.  Please keep it sync
 ;;; when updating the package!
-(define %inkscape-release-year 2025)
+(define %inkscape-release-year 2026)
 (define-public inkscape
   (package
     (inherit inkscape/pinned)
-    (name "inkscape")
-    (version "1.4.3")
-    (source
-     (origin
-       (inherit (package-source inkscape/pinned))
-       (method url-fetch)
-       (uri (string-append "https://media.inkscape.org/dl/";
-                           "resources/file/"
-                           "inkscape-" version ".tar.xz"))
-       (patches '())
-       (sha256
-        (base32 "1lfi1rqr32kwjdkka4sbsxmkyyw3k1qgxk0gzyhwbdkhnlyjqfp8"))))
-    (build-system cmake-build-system)
     (arguments
      (substitute-keyword-arguments (package-arguments inkscape/pinned)
        ((#:modules modules)
@@ -388,6 +387,8 @@ as the native format.")
                          (substitute* "testfiles/CMakeLists.txt"
                            (("    geom-pathstroke-test") "")))))
                    '())
+            ;; We now have gtksourceview in deps, so test should pass
+            (delete 'disable-svg-parser-test)
             (replace 'wrap-program
               ;; Ensure Python is available at runtime.
               (lambda _
@@ -401,6 +402,7 @@ as the native format.")
     (inputs (modify-inputs (package-inputs inkscape/pinned)
               (replace "lib2geom" lib2geom)
               (append imagemagick       ;for libMagickCore and libMagickWand
+                      gtksourceview-4
                       python-tinycss2)))
     (native-inputs
      (modify-inputs (package-native-inputs inkscape/pinned)
diff --git a/gnu/packages/patches/inkscape-libxml2.patch 
b/gnu/packages/patches/inkscape-libxml2.patch
deleted file mode 100644
index dc5b0f5346..0000000000
--- a/gnu/packages/patches/inkscape-libxml2.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 694d8ae43d06efff21adebf377ce614d660b24cd Mon Sep 17 00:00:00 2001
-From: Christian Hesse <[email protected]>
-Date: Fri, 17 Nov 2023 22:30:42 +0100
-Subject: [PATCH] include missing header file
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This fixes build error:
-```
-/build/inkscape/src/inkscape/src/object/uri.cpp: In constructor 
‘Inkscape::URI::URI(const gchar*, const char*)’:
-/build/inkscape/src/inkscape/src/object/uri.cpp:86:9: error: ‘xmlFree’ was not 
declared in this scope; did you mean ‘xmlFreeURI’?
-   86 |         xmlFree(full);
-```
----
- src/object/uri.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/object/uri.h b/src/object/uri.h
-index 381adec58cf..d5b211fe2b2 100644
---- a/src/object/uri.h
-+++ b/src/object/uri.h
-@@ -13,6 +13,7 @@
- #define INKSCAPE_URI_H
- 
- #include <libxml/uri.h>
-+#include <libxml/xmlmemory.h>
- #include <memory>
- #include <string>
- 
--- 
-GitLab
-
diff --git a/gnu/packages/patches/inkscape-poppler-26-1.patch 
b/gnu/packages/patches/inkscape-poppler-26-1.patch
new file mode 100644
index 0000000000..8d917b7345
--- /dev/null
+++ b/gnu/packages/patches/inkscape-poppler-26-1.patch
@@ -0,0 +1,479 @@
+Backport:
+https://gitlab.com/inkscape/inkscape/-/commit/1ad89c941bad5e42a3378cd8644a4c4cd3b6ea71.patch
+https://gitlab.com/inkscape/inkscape/-/commit/09cbe3cf8fdf6a9dc6d9789f4d2416c619e8bc89.patch
+
+Subject: [PATCH 1/2] poppler 26.6.0
+
+---
+ src/extension/internal/pdfinput/pdf-input.cpp | 14 +++++-
+ .../internal/pdfinput/pdf-parser.cpp          | 43 ++++++++++---------
+ src/extension/internal/pdfinput/pdf-parser.h  |  4 +-
+ src/extension/internal/pdfinput/pdf-utils.cpp |  5 +++
+ src/extension/internal/pdfinput/pdf-utils.h   |  1 +
+ .../pdfinput/poppler-cairo-font-engine.cpp    |  2 +-
+ .../pdfinput/poppler-transition-api.h         | 16 +++++++
+ .../internal/pdfinput/poppler-utils.cpp       | 20 +++++----
+ .../internal/pdfinput/svg-builder.cpp         | 30 ++++++++-----
+ src/extension/internal/pdfinput/svg-builder.h |  3 +-
+ 10 files changed, 92 insertions(+), 46 deletions(-)
+
+diff --git a/src/extension/internal/pdfinput/pdf-input.cpp 
b/src/extension/internal/pdfinput/pdf-input.cpp
+index 45df931..441871b 100644
+--- a/src/extension/internal/pdfinput/pdf-input.cpp
++++ b/src/extension/internal/pdfinput/pdf-input.cpp
+@@ -808,7 +808,11 @@ 
PdfInput::add_builder_page(std::shared_ptr<PDFDoc>pdf_doc, SvgBuilder *builder,
+     }
+ 
+     // Apply crop settings
++#if POPPLER_CHECK_VERSION(26, 6, 0)
++    std::optional<PDFRectangle> clipToBox;
++#else
+     _POPPLER_CONST PDFRectangle *clipToBox = nullptr;
++#endif
+ 
+     if (crop_to == "media-box") {
+         clipToBox = page->getMediaBox();
+@@ -822,8 +826,16 @@ 
PdfInput::add_builder_page(std::shared_ptr<PDFDoc>pdf_doc, SvgBuilder *builder,
+         clipToBox = page->getArtBox();
+     }
+ 
++    std::optional<PDFRectangle> cropBox;
++#if POPPLER_CHECK_VERSION(26, 6, 0)
++    cropBox = clipToBox;
++#else
++    if (clipToBox) {
++        cropBox = *clipToBox;
++    }
++#endif
+     // Create parser  (extension/internal/pdfinput/pdf-parser.h)
+-    auto pdf_parser = PdfParser(pdf_doc, builder, page, clipToBox);
++    auto pdf_parser = PdfParser(pdf_doc, builder, page, cropBox);
+ 
+     // Set up approximation precision for parser. Used for converting Mesh 
Gradients into tiles.
+     if ( color_delta <= 0.0 ) {
+diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp 
b/src/extension/internal/pdfinput/pdf-parser.cpp
+index d24dc05..e32fa24 100644
+--- a/src/extension/internal/pdfinput/pdf-parser.cpp
++++ b/src/extension/internal/pdfinput/pdf-parser.cpp
+@@ -43,6 +43,7 @@
+ #include <poppler/GlobalParams.h>
+ #include <poppler/Lexer.h>
+ #include <poppler/Object.h>
++#include <poppler/OptionalContent.h>
+ #include <poppler/OutputDev.h>
+ #include <poppler/PDFDoc.h>
+ #include <poppler/Page.h>
+@@ -266,7 +267,7 @@ GfxPatch blankPatch()
+ //------------------------------------------------------------------------
+ 
+ PdfParser::PdfParser(std::shared_ptr<PDFDoc> pdf_doc, 
Inkscape::Extension::Internal::SvgBuilder *builderA, Page *page,
+-                     _POPPLER_CONST PDFRectangle *cropBox)
++                     const std::optional<PDFRectangle> &cropBox)
+     : _pdf_doc(pdf_doc)
+     , xref(pdf_doc->getXRef())
+     , builder(builderA)
+@@ -307,8 +308,8 @@ PdfParser::PdfParser(std::shared_ptr<PDFDoc> pdf_doc, 
Inkscape::Extension::Inter
+     builder->setMargins(getRect(page->getTrimBox()) * scale,
+                         getRect(page->getArtBox()) * scale,
+                         getRect(page->getBleedBox()) * scale);
+-    if (cropBox && getRect(cropBox) != page_box) {
+-        builder->cropPage(getRect(cropBox) * scale);
++    if (cropBox && getRect(*cropBox) != page_box) {
++        builder->cropPage(getRect(*cropBox) * scale);
+     }
+ 
+     saveState();
+@@ -325,7 +326,7 @@ PdfParser::PdfParser(XRef *xrefA, 
Inkscape::Extension::Internal::SvgBuilder *bui
+     , printCommands(false)
+     , res(new GfxResources(xref, resDict, nullptr))
+     , // start the resource stack
+-    state(new GfxState(72, 72, box, 0, false))
++    state(new _POPPLER_GFX_STATE(72, 72, *box, 0, false))
+     , fontChanged(gFalse)
+     , clip(clipNone)
+     , ignoreUndef(0)
+@@ -992,7 +993,7 @@ void PdfParser::opSetFillGray(Object args[], int 
/*numArgs*/)
+   state->setFillPattern(nullptr);
+   
state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceGrayColorSpace>()));
+   color.c[0] = dblToCol(args[0].getNum());
+-  state->setFillColor(&color);
++  state->_POPPLER_SET_FILL_COLOR(color);
+   builder->updateStyle(state);
+ }
+ 
+@@ -1004,7 +1005,7 @@ void PdfParser::opSetStrokeGray(Object args[], int 
/*numArgs*/)
+   state->setStrokePattern(nullptr);
+   
state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceGrayColorSpace>()));
+   color.c[0] = dblToCol(args[0].getNum());
+-  state->setStrokeColor(&color);
++  state->_POPPLER_SET_STROKE_COLOR(color);
+   builder->updateStyle(state);
+ }
+ 
+@@ -1019,7 +1020,7 @@ void PdfParser::opSetFillCMYKColor(Object args[], int 
/*numArgs*/)
+   for (i = 0; i < 4; ++i) {
+     color.c[i] = dblToCol(args[i].getNum());
+   }
+-  state->setFillColor(&color);
++  state->_POPPLER_SET_FILL_COLOR(color);
+   builder->updateStyle(state);
+ }
+ 
+@@ -1033,7 +1034,7 @@ void PdfParser::opSetStrokeCMYKColor(Object args[], int 
/*numArgs*/)
+   for (int i = 0; i < 4; ++i) {
+     color.c[i] = dblToCol(args[i].getNum());
+   }
+-  state->setStrokeColor(&color);
++  state->_POPPLER_SET_STROKE_COLOR(color);
+   builder->updateStyle(state);
+ }
+ 
+@@ -1047,7 +1048,7 @@ void PdfParser::opSetFillRGBColor(Object args[], int 
/*numArgs*/)
+   for (int i = 0; i < 3; ++i) {
+     color.c[i] = dblToCol(args[i].getNum());
+   }
+-  state->setFillColor(&color);
++  state->_POPPLER_SET_FILL_COLOR(color);
+   builder->updateStyle(state);
+ }
+ 
+@@ -1060,7 +1061,7 @@ void PdfParser::opSetStrokeRGBColor(Object args[], int 
/*numArgs*/) {
+   for (int i = 0; i < 3; ++i) {
+     color.c[i] = dblToCol(args[i].getNum());
+   }
+-  state->setStrokeColor(&color);
++  state->_POPPLER_SET_STROKE_COLOR(color);
+   builder->updateStyle(state);
+ }
+ 
+@@ -1076,7 +1077,7 @@ void PdfParser::opSetFillColorSpace(Object args[], int 
numArgs)
+     GfxColor color;
+     colorSpace->getDefaultColor(&color);
+     state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(colorSpace));
+-    state->setFillColor(&color);
++    state->_POPPLER_SET_FILL_COLOR(color);
+     builder->updateStyle(state);
+   } else {
+     error(errSyntaxError, getPos(), "Bad color space (fill)");
+@@ -1097,7 +1098,7 @@ void PdfParser::opSetStrokeColorSpace(Object args[], int 
numArgs)
+     GfxColor color;
+     colorSpace->getDefaultColor(&color);
+     state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(colorSpace));
+-    state->setStrokeColor(&color);
++    state->_POPPLER_SET_STROKE_COLOR(color);
+     builder->updateStyle(state);
+   } else {
+     error(errSyntaxError, getPos(), "Bad color space (stroke)");
+@@ -1117,7 +1118,7 @@ void PdfParser::opSetFillColor(Object args[], int 
numArgs) {
+   for (i = 0; i < numArgs; ++i) {
+     color.c[i] = dblToCol(args[i].getNum());
+   }
+-  state->setFillColor(&color);
++  state->_POPPLER_SET_FILL_COLOR(color);
+   builder->updateStyle(state);
+ }
+ 
+@@ -1134,7 +1135,7 @@ void PdfParser::opSetStrokeColor(Object args[], int 
numArgs) {
+   for (i = 0; i < numArgs; ++i) {
+     color.c[i] = dblToCol(args[i].getNum());
+   }
+-  state->setStrokeColor(&color);
++  state->_POPPLER_SET_STROKE_COLOR(color);
+   builder->updateStyle(state);
+ }
+ 
+@@ -1155,7 +1156,7 @@ void PdfParser::opSetFillColorN(Object args[], int 
numArgs) {
+         color.c[i] = dblToCol(args[i].getNum());
+       }
+       }
+-      state->setFillColor(&color);
++      state->_POPPLER_SET_FILL_COLOR(color);
+       builder->updateStyle(state);
+     }
+     if (auto pattern = lookupPattern(&(args[numArgs - 1]), state)) {
+@@ -1174,7 +1175,7 @@ void PdfParser::opSetFillColorN(Object args[], int 
numArgs) {
+       color.c[i] = dblToCol(args[i].getNum());
+       }
+     }
+-    state->setFillColor(&color);
++    state->_POPPLER_SET_FILL_COLOR(color);
+     builder->updateStyle(state);
+   }
+ }
+@@ -1198,7 +1199,7 @@ void PdfParser::opSetStrokeColorN(Object args[], int 
numArgs) {
+         color.c[i] = dblToCol(args[i].getNum());
+       }
+       }
+-      state->setStrokeColor(&color);
++      state->_POPPLER_SET_STROKE_COLOR(color);
+       builder->updateStyle(state);
+     }
+     if (auto pattern = lookupPattern(&(args[numArgs - 1]), state)) {
+@@ -1217,7 +1218,7 @@ void PdfParser::opSetStrokeColorN(Object args[], int 
numArgs) {
+       color.c[i] = dblToCol(args[i].getNum());
+       }
+     }
+-    state->setStrokeColor(&color);
++    state->_POPPLER_SET_STROKE_COLOR(color);
+     builder->updateStyle(state);
+   }
+ }
+@@ -1700,7 +1701,7 @@ void PdfParser::doFunctionShFill1(GfxFunctionShading 
*shading,
+ 
+     // use the center color
+     shading->getColor(xM, yM, &fillColor);
+-    state->setFillColor(&fillColor);
++    state->_POPPLER_SET_FILL_COLOR(fillColor);
+ 
+     // fill the rectangle
+     state->moveTo(x0 * matrix[0] + y0 * matrix[2] + matrix[4],
+@@ -1799,7 +1800,7 @@ void PdfParser::gouraudFillTriangle(double x0, double 
y0, GfxColor *color0,
+     }
+   }
+   if (i == nComps || depth == maxDepths[pdfGouraudTriangleShading-1]) {
+-    state->setFillColor(color0);
++    state->_POPPLER_SET_FILL_COLOR(*color0);
+     state->moveTo(x0, y0);
+     state->lineTo(x1, y1);
+     state->lineTo(x2, y2);
+@@ -1877,7 +1878,7 @@ void PdfParser::fillPatch(_POPPLER_CONST GfxPatch 
*patch, int nComps, int depth)
+     color.c[i] = GfxColorComp(patch->color[0][0].c[i]);
+   }
+   if (i == nComps || depth == maxDepths[pdfPatchMeshShading-1]) {
+-    state->setFillColor(&color);
++    state->_POPPLER_SET_FILL_COLOR(color);
+     state->moveTo(patch->x[0][0], patch->y[0][0]);
+     state->curveTo(patch->x[0][1], patch->y[0][1],
+                  patch->x[0][2], patch->y[0][2],
+diff --git a/src/extension/internal/pdfinput/pdf-parser.h 
b/src/extension/internal/pdfinput/pdf-parser.h
+index c136ebf..58044fb 100644
+--- a/src/extension/internal/pdfinput/pdf-parser.h
++++ b/src/extension/internal/pdfinput/pdf-parser.h
+@@ -112,8 +112,8 @@ struct OpHistoryEntry {
+ class PdfParser {
+ public:
+ 
+-  // Constructor for regular output.
+-    PdfParser(std::shared_ptr<PDFDoc> pdf_doc, SvgBuilder *builderA, Page 
*page, _POPPLER_CONST PDFRectangle *cropBox);
++    // Constructor for regular output.
++    PdfParser(std::shared_ptr<PDFDoc> pdf_doc, SvgBuilder *builderA, Page 
*page, const std::optional<PDFRectangle> &cropBox);
+     // Constructor for a sub-page object.
+     PdfParser(XRef *xrefA, SvgBuilder *builderA, Dict *resDict, 
_POPPLER_CONST PDFRectangle *box);
+ 
+diff --git a/src/extension/internal/pdfinput/pdf-utils.cpp 
b/src/extension/internal/pdfinput/pdf-utils.cpp
+index d126426..ceb05cf 100644
+--- a/src/extension/internal/pdfinput/pdf-utils.cpp
++++ b/src/extension/internal/pdfinput/pdf-utils.cpp
+@@ -133,6 +133,11 @@ Geom::Rect getRect(_POPPLER_CONST PDFRectangle *box)
+     return Geom::Rect(box->x1, box->y1, box->x2, box->y2);
+ }
+ 
++Geom::Rect getRect(_POPPLER_CONST PDFRectangle &box)
++{
++    return Geom::Rect(box.x1, box.y1, box.x2, box.y2);
++}
++
+ Geom::PathVector getPathV(GfxPath *path) 
+ {
+     if (!path) {
+diff --git a/src/extension/internal/pdfinput/pdf-utils.h 
b/src/extension/internal/pdfinput/pdf-utils.h
+index 59efdea..d37edd7 100644
+--- a/src/extension/internal/pdfinput/pdf-utils.h
++++ b/src/extension/internal/pdfinput/pdf-utils.h
+@@ -59,6 +59,7 @@ private:
+ };
+ 
+ Geom::Rect getRect(_POPPLER_CONST PDFRectangle *box);
++Geom::Rect getRect(_POPPLER_CONST PDFRectangle &box);
+ Geom::PathVector getPathV(GfxPath *gPath);
+ 
+ #endif /* PDF_UTILS_H */
+diff --git a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp 
b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
+index b6ed11c..122804f 100644
+--- a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
++++ b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
+@@ -700,7 +700,7 @@ CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, 
PDFDoc *doc, CairoFontE
+         codeToGID[i] = 0;
+         if (charProcs && (name = enc[i])) {
+             for (int j = 0; j < charProcs->getLength(); j++) {
+-                if (strcmp(name, charProcs->getKey(j)) == 0) {
++                if (std::string(charProcs->getKey(j)).compare(name) == 0) {
+                     codeToGID[i] = j;
+                 }
+             }
+diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h 
b/src/extension/internal/pdfinput/poppler-transition-api.h
+index 7f299bd..bf42f54 100644
+--- a/src/extension/internal/pdfinput/poppler-transition-api.h
++++ b/src/extension/internal/pdfinput/poppler-transition-api.h
+@@ -15,6 +15,22 @@
+ #include <glib/poppler-features.h>
+ #include <poppler/UTF.h>
+ 
++#if POPPLER_CHECK_VERSION(26, 6, 0)
++#define _POPPLER_GET_GRAY(color, gray) getGray(color, gray)
++#define _POPPLER_GET_RGB(color, rgb) getRGB(color, rgb)
++#define _POPPLER_GET_CMYK(color, cmyk) getCMYK(color, cmyk)
++#define _POPPLER_SET_FILL_COLOR(color) setFillColor(color)
++#define _POPPLER_SET_STROKE_COLOR(color) setStrokeColor(color)
++#define _POPPLER_GFX_STATE(h, v, Rect, rotateA, upsideDown) GfxState(h, v, 
Rect, rotateA, upsideDown)
++#else
++#define _POPPLER_GET_GRAY(color, gray) getGray(&color, gray)
++#define _POPPLER_GET_RGB(color, rgb) getRGB(&color, rgb)
++#define _POPPLER_GET_CMYK(color, cmyk) getCMYK(&color, cmyk)
++#define _POPPLER_SET_FILL_COLOR(color) setFillColor(&color)
++#define _POPPLER_SET_STROKE_COLOR(color) setStrokeColor(&color)
++#define _POPPLER_GFX_STATE(h, v, Rect, rotateA, upsideDown) GfxState(h, v, 
&Rect, rotateA, upsideDown)
++#endif
++
+ #if POPPLER_CHECK_VERSION(26, 2, 0)
+ #define _POPPLER_WMODE GfxFont::WritingMode
+ #define _POPPLER_WMODE_HORIZONTAL GfxFont::WritingMode::Horizontal
+diff --git a/src/extension/internal/pdfinput/poppler-utils.cpp 
b/src/extension/internal/pdfinput/poppler-utils.cpp
+index a65a578..9027362 100644
+--- a/src/extension/internal/pdfinput/poppler-utils.cpp
++++ b/src/extension/internal/pdfinput/poppler-utils.cpp
+@@ -195,15 +195,17 @@ void InkFontDict::hashFontObject1(const Object *obj, 
FNVHash *h)
+                 hashFontObject1(&obj2, h);
+             }
+             break;
+-        case objDict:
+-            h->hash('d');
+-            n = obj->dictGetLength();
+-            h->hash((char *)&n, sizeof(int));
+-            for (i = 0; i < n; ++i) {
+-                p = obj->dictGetKey(i);
+-                h->hash(p, (int)strlen(p));
+-                const Object &obj2 = obj->dictGetValNF(i);
+-                hashFontObject1(&obj2, h);
++        case objDict: {
++                h->hash('d');
++                auto objdict = obj->getDict();
++                n = objdict->getLength();
++                h->hash((char *)&n, sizeof(int));
++                for (i = 0; i < n; ++i) {
++                    auto p = std::string(objdict->getKey(i));
++                    h->hash(p.c_str(), p.length());
++                    const Object &obj2 = objdict->getValNF(i);
++                    hashFontObject1(&obj2, h);
++                }
+             }
+             break;
+         case objStream:
+diff --git a/src/extension/internal/pdfinput/svg-builder.cpp 
b/src/extension/internal/pdfinput/svg-builder.cpp
+index d854ed8..feba794 100644
+--- a/src/extension/internal/pdfinput/svg-builder.cpp
++++ b/src/extension/internal/pdfinput/svg-builder.cpp
+@@ -392,7 +392,15 @@ static std::string svgConvertGfxRGB(GfxRGB *color)
+     return svgConvertRGBToText(r, g, b);
+ }
+ 
+-std::string SvgBuilder::convertGfxColor(const GfxColor *color, GfxColorSpace 
*space)
++// for poppler < 26.06.0
++std::string SvgBuilder::convertGfxColor(const GfxColor *color, GfxColorSpace 
*space) {
++    if (!color) {
++        return "";
++    }
++    return convertGfxColor(*color, space);
++}
++
++std::string SvgBuilder::convertGfxColor(const GfxColor &color, GfxColorSpace 
*space)
+ {
+     std::string icc = "";
+     switch (space->getMode()) {
+@@ -412,14 +420,14 @@ std::string SvgBuilder::convertGfxColor(const GfxColor 
*color, GfxColorSpace *sp
+     }
+ 
+     GfxRGB rgb;
+-    space->getRGB(color, &rgb);
++    space->_POPPLER_GET_RGB(color, &rgb);
+     auto rgb_color = svgConvertGfxRGB(&rgb);
+ 
+     if (!icc.empty()) {
+         Inkscape::CSSOStringStream icc_color;
+         icc_color << rgb_color << " icc-color(" << icc;
+         for (int i = 0; i < space->getNComps(); ++i) {
+-            icc_color << ", " << colToDbl((*color).c[i]);
++            icc_color << ", " << colToDbl((color).c[i]);
+         }
+         icc_color << ");";
+         return icc_color.str();
+@@ -1204,7 +1212,7 @@ gchar *SvgBuilder::_createGradient(GfxShading *shading, 
const Geom::Affine pat_m
+ /**
+  * \brief Adds a stop with the given properties to the gradient's 
representation
+  */
+-void SvgBuilder::_addStopToGradient(Inkscape::XML::Node *gradient, double 
offset, GfxColor *color, GfxColorSpace *space,
++void SvgBuilder::_addStopToGradient(Inkscape::XML::Node *gradient, double 
offset, GfxColor &color, GfxColorSpace *space,
+                                     double opacity)
+ {
+     Inkscape::XML::Node *stop = _xml_doc->createElement("svg:stop");
+@@ -1214,7 +1222,7 @@ void SvgBuilder::_addStopToGradient(Inkscape::XML::Node 
*gradient, double offset
+     if (space->getMode() == csDeviceGray) {
+         // This is a transparency mask.
+         GfxRGB rgb;
+-        space->getRGB(color, &rgb);
++        space->_POPPLER_GET_RGB(color, &rgb);
+         double gray = (double)rgb.r / 65535.0;
+         gray = CLAMP(gray, 0.0, 1.0);
+         os_opacity << gray;
+@@ -1255,8 +1263,8 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node 
*gradient, GfxShading *sh
+         if (!svgGetShadingColor(shading, 0.0, &stop1) || 
!svgGetShadingColor(shading, 1.0, &stop2)) {
+             return false;
+         } else {
+-            _addStopToGradient(gradient, 0.0, &stop1, space, 1.0);
+-            _addStopToGradient(gradient, 1.0, &stop2, space, 1.0);
++            _addStopToGradient(gradient, 0.0, stop1, space, 1.0);
++            _addStopToGradient(gradient, 1.0, stop2, space, 1.0);
+         }
+     } else if (type == _POPPLER_FUNCTION_TYPE_STITCHING) {
+         auto stitchingFunc = static_cast<_POPPLER_CONST 
StitchingFunction*>(func);
+@@ -1269,7 +1277,7 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node 
*gradient, GfxShading *sh
+         // Add stops from all the stitched functions
+         GfxColor prev_color, color;
+         svgGetShadingColor(shading, bounds[0], &prev_color);
+-        _addStopToGradient(gradient, bounds[0], &prev_color, space, 1.0);
++        _addStopToGradient(gradient, bounds[0], prev_color, space, 1.0);
+         for ( int i = 0 ; i < num_funcs ; i++ ) {
+             svgGetShadingColor(shading, bounds[i + 1], &color);
+             // Add stops
+@@ -1279,14 +1287,14 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node 
*gradient, GfxShading *sh
+                     expE = (bounds[i + 1] - bounds[i])/expE;    // 
approximate exponential as a single straight line at x=1
+                     if (encode[2*i] == 0) {    // normal sequence
+                         auto offset = (bounds[i + 1] - expE) / max_bound;
+-                        _addStopToGradient(gradient, offset, &prev_color, 
space, 1.0);
++                        _addStopToGradient(gradient, offset, prev_color, 
space, 1.0);
+                     } else {                   // reflected sequence
+                         auto offset = (bounds[i] + expE) / max_bound;
+-                        _addStopToGradient(gradient, offset, &color, space, 
1.0);
++                        _addStopToGradient(gradient, offset, color, space, 
1.0);
+                     }
+                 }
+             }
+-            _addStopToGradient(gradient, bounds[i + 1] / max_bound, &color, 
space, 1.0);
++            _addStopToGradient(gradient, bounds[i + 1] / max_bound, color, 
space, 1.0);
+             prev_color = color;
+         }
+     } else { // Unsupported function type
+diff --git a/src/extension/internal/pdfinput/svg-builder.h 
b/src/extension/internal/pdfinput/svg-builder.h
+index b814a67..4041c95 100644
+--- a/src/extension/internal/pdfinput/svg-builder.h
++++ b/src/extension/internal/pdfinput/svg-builder.h
+@@ -186,7 +186,7 @@ private:
+     // Pattern creation
+     gchar *_createPattern(GfxPattern *pattern, GfxState *state, bool 
is_stroke=false);
+     gchar *_createGradient(GfxShading *shading, const Geom::Affine 
pat_matrix, bool for_shading = false);
+-    void _addStopToGradient(Inkscape::XML::Node *gradient, double offset, 
GfxColor *color, GfxColorSpace *space,
++    void _addStopToGradient(Inkscape::XML::Node *gradient, double offset, 
GfxColor &color, GfxColorSpace *space,
+                             double opacity);
+     bool _addGradientStops(Inkscape::XML::Node *gradient, GfxShading *shading,
+                            _POPPLER_CONST Function *func);
+@@ -239,6 +239,7 @@ private:
+     static bool _attrEqual(Inkscape::XML::Node *a, Inkscape::XML::Node *b, 
char const *attr);
+ 
+     // Colors
++    std::string convertGfxColor(const GfxColor &color, GfxColorSpace *space);
+     std::string convertGfxColor(const GfxColor *color, GfxColorSpace *space);
+     std::string _getColorProfile(cmsHPROFILE hp);
+ 
+-- 
+2.54.0
+
diff --git a/gnu/packages/patches/inkscape-poppler-26-2.patch 
b/gnu/packages/patches/inkscape-poppler-26-2.patch
new file mode 100644
index 0000000000..47833c9304
--- /dev/null
+++ b/gnu/packages/patches/inkscape-poppler-26-2.patch
@@ -0,0 +1,318 @@
+Backport: 
https://gitlab.com/inkscape/inkscape/-/commit/ce52c5f96106ae5747171663a46831f21aa52d95.patch
+
+Subject: [PATCH 2/2] Backport 26.7.0
+
+---
+ src/extension/internal/pdfinput/pdf-input.cpp |  5 +-
+ .../internal/pdfinput/pdf-parser.cpp          | 50 +++++++++----------
+ .../pdfinput/poppler-transition-api.h         |  6 +++
+ .../internal/pdfinput/poppler-utils.cpp       | 29 ++++++-----
+ .../internal/pdfinput/poppler-utils.h         |  1 +
+ 5 files changed, 52 insertions(+), 39 deletions(-)
+
+diff --git a/src/extension/internal/pdfinput/pdf-input.cpp 
b/src/extension/internal/pdfinput/pdf-input.cpp
+index 441871b..3507ce4 100644
+--- a/src/extension/internal/pdfinput/pdf-input.cpp
++++ b/src/extension/internal/pdfinput/pdf-input.cpp
+@@ -855,9 +855,10 @@ 
PdfInput::add_builder_page(std::shared_ptr<PDFDoc>pdf_doc, SvgBuilder *builder,
+ 
+     // Parse the annotations
+     if (auto annots = page->getAnnotsObject(); annots.isArray()) {
+-        auto const size = annots.arrayGetLength();
++        auto* annotsArray = annots.getArray();
++        auto const size = annotsArray->getLength();
+         for (int i = 0; i < size; i++) {
+-            pdf_parser.build_annots(annots.arrayGet(i), page_num);
++            pdf_parser.build_annots(annotsArray->get(i), page_num);
+         }
+     }
+ }
+diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp 
b/src/extension/internal/pdfinput/pdf-parser.cpp
+index e32fa24..bf8daaa 100644
+--- a/src/extension/internal/pdfinput/pdf-parser.cpp
++++ b/src/extension/internal/pdfinput/pdf-parser.cpp
+@@ -293,8 +293,8 @@ PdfParser::PdfParser(std::shared_ptr<PDFDoc> pdf_doc, 
Inkscape::Extension::Inter
+     if (page) {
+         // Increment the page building here and set page label
+         Catalog *catalog = pdf_doc->getCatalog();
+-        GooString *label = new GooString("");
+-        catalog->indexToLabel(page->getNum() - 1, label);
++        _POPPLER_STRING_26_7 label;
++        catalog->indexToLabel(page->getNum() - 1, &label);
+         builder->pushPage(getString(label), state);
+     }
+ 
+@@ -370,8 +370,8 @@ void PdfParser::parse(Object *obj, GBool topLevel) {
+   Object obj2;
+ 
+   if (obj->isArray()) {
+-    for (int i = 0; i < obj->arrayGetLength(); ++i) {
+-      _POPPLER_CALL_ARGS(obj2, obj->arrayGet, i);
++    for (int i = 0; i < obj->getArray()->getLength(); ++i) {
++      _POPPLER_CALL_ARGS(obj2, obj->getArray()->get, i);
+       if (!obj2.isStream()) {
+       error(errInternal, -1, "Weird page contents");
+       _POPPLER_FREE(obj2);
+@@ -808,8 +808,8 @@ void PdfParser::opSetExtGState(Object args[], int 
/*numArgs*/)
+                 for (int &i : backdropColor.c) {
+                     i = 0;
+                 }
+-                for (int i = 0; i < obj3.arrayGetLength() && i < 
gfxColorMaxComps; ++i) {
+-                    _POPPLER_CALL_ARGS(obj4, obj3.arrayGet, i);
++                for (int i = 0; i < obj3.getArray()->getLength() && i < 
gfxColorMaxComps; ++i) {
++                    _POPPLER_CALL_ARGS(obj4, obj3.getArray()->get, i);
+                     if (obj4.isNum()) {
+                         backdropColor.c[i] = dblToCol(obj4.getNum());
+                     }
+@@ -818,7 +818,7 @@ void PdfParser::opSetExtGState(Object args[], int 
/*numArgs*/)
+             }
+             _POPPLER_FREE(obj3);
+             if (_POPPLER_CALL_ARGS_DEREF(obj3, obj2.dictLookup, 
"G").isStream()) {
+-                if (_POPPLER_CALL_ARGS_DEREF(obj4, 
obj3.streamGetDict()->lookup, "Group").isDict()) {
++                if (_POPPLER_CALL_ARGS_DEREF(obj4, 
obj3.getStream()->getDict()->lookup, "Group").isDict()) {
+                     std::unique_ptr<GfxColorSpace> blendingColorSpace;
+                     GBool isolated = gFalse;
+                     GBool knockout = gFalse;
+@@ -881,7 +881,7 @@ void PdfParser::doSoftMask(Object *str, GBool alpha,
+   }
+ 
+   // get stream dict
+-  dict = str->streamGetDict();
++  dict = str->getStream()->getDict();
+ 
+   // check form type
+   _POPPLER_CALL_ARGS(obj1, dict->lookup, "FormType");
+@@ -898,7 +898,7 @@ void PdfParser::doSoftMask(Object *str, GBool alpha,
+     return;
+   }
+   for (i = 0; i < 4; ++i) {
+-    _POPPLER_CALL_ARGS(obj2, obj1.arrayGet, i);
++    _POPPLER_CALL_ARGS(obj2, obj1.getArray()->get, i);
+     bbox[i] = obj2.getNum();
+     _POPPLER_FREE(obj2);
+   }
+@@ -908,7 +908,7 @@ void PdfParser::doSoftMask(Object *str, GBool alpha,
+   _POPPLER_CALL_ARGS(obj1, dict->lookup, "Matrix");
+   if (obj1.isArray()) {
+     for (i = 0; i < 6; ++i) {
+-      _POPPLER_CALL_ARGS(obj2, obj1.arrayGet, i);
++      _POPPLER_CALL_ARGS(obj2, obj1.getArray()->get, i);
+       m[i] = obj2.getNum();
+       _POPPLER_FREE(obj2);
+     }
+@@ -2378,7 +2378,7 @@ void PdfParser::opXObject(Object args[], int /*numArgs*/)
+     }
+ 
+ //add layer at root if xObject has type OCG
+-    _POPPLER_CALL_ARGS(obj2, obj1.streamGetDict()->lookup, "OC");
++    _POPPLER_CALL_ARGS(obj2, obj1.getStream()->getDict()->lookup, "OC");
+     if(obj2.isDict()){
+         auto type_dict = obj2.getDict();
+         if (type_dict->lookup("Type").isName("OCG")) {
+@@ -2396,7 +2396,7 @@ void PdfParser::opXObject(Object args[], int /*numArgs*/)
+         }
+     }
+ 
+-    _POPPLER_CALL_ARGS(obj2, obj1.streamGetDict()->lookup, "Subtype");
++    _POPPLER_CALL_ARGS(obj2, obj1.getStream()->getDict()->lookup, "Subtype");
+     if (obj2.isName(const_cast<char*>("Image"))) {
+         _POPPLER_CALL_ARGS(refObj, res->lookupXObjectNF, name);
+         doImage(&refObj, obj1.getStream(), gFalse);
+@@ -2404,7 +2404,7 @@ void PdfParser::opXObject(Object args[], int /*numArgs*/)
+     } else if (obj2.isName(const_cast<char*>("Form"))) {
+         doForm(&obj1);
+     } else if (obj2.isName(const_cast<char*>("PS"))) {
+-        _POPPLER_CALL_ARGS(obj3, obj1.streamGetDict()->lookup, "Level1");
++        _POPPLER_CALL_ARGS(obj3, obj1.getStream()->getDict()->lookup, 
"Level1");
+     } else if (obj2.isName()) {
+         error(errSyntaxError, getPos(), "Unknown XObject subtype '{0:s}'", 
obj2.getName());
+     } else {
+@@ -2535,7 +2535,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, 
GBool inlineImg)
+             _POPPLER_CALL_ARGS(obj1, dict->lookup, "D");
+         }
+         if (obj1.isArray()) {
+-            _POPPLER_CALL_ARGS(obj2, obj1.arrayGet, 0);
++            _POPPLER_CALL_ARGS(obj2, obj1.getArray()->get, 0);
+             if (obj2.isInt() && obj2.getInt() == 1) {
+                 invert = gTrue;
+             }
+@@ -2597,7 +2597,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, 
GBool inlineImg)
+                   goto err1;
+             }
+             maskStr = smaskObj.getStream();
+-            maskDict = smaskObj.streamGetDict();
++            maskDict = smaskObj.getStream()->getDict();
+             _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "Width");
+             if (obj1.isNull()) {
+                     _POPPLER_FREE(obj1);
+@@ -2663,8 +2663,8 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, 
GBool inlineImg)
+         } else if (maskObj.isArray()) {
+             // color key mask
+             int i;
+-            for (i = 0; i < maskObj.arrayGetLength() && i < 
2*gfxColorMaxComps; ++i) {
+-                _POPPLER_CALL_ARGS(obj1, maskObj.arrayGet, i);
++            for (i = 0; i < maskObj.getArray()->getLength() && i < 
2*gfxColorMaxComps; ++i) {
++                _POPPLER_CALL_ARGS(obj1, maskObj.getArray()->get, i);
+                 maskColors[i] = obj1.getInt();
+                 _POPPLER_FREE(obj1);
+             }
+@@ -2675,7 +2675,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, 
GBool inlineImg)
+                 goto err1;
+             }
+             maskStr = maskObj.getStream();
+-            maskDict = maskObj.streamGetDict();
++            maskDict = maskObj.getStream()->getDict();
+             _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "Width");
+             if (obj1.isNull()) {
+                 _POPPLER_FREE(obj1);
+@@ -2722,7 +2722,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, 
GBool inlineImg)
+                 _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "D");
+             }
+             if (obj1.isArray()) {
+-                _POPPLER_CALL_ARGS(obj2, obj1.arrayGet, 0);
++                _POPPLER_CALL_ARGS(obj2, obj1.getArray()->get, 0);
+                 if (obj2.isInt() && obj2.getInt() == 1) {
+                     maskInvert = gTrue;
+                 }
+@@ -2775,7 +2775,7 @@ void PdfParser::doForm(Object *str, double *offset)
+     }
+ 
+     // get stream dict
+-    dict = str->streamGetDict();
++    dict = str->getStream()->getDict();
+ 
+     // check form type
+     _POPPLER_CALL_ARGS(obj1, dict->lookup, "FormType");
+@@ -2792,7 +2792,7 @@ void PdfParser::doForm(Object *str, double *offset)
+         return;
+     }
+     for (i = 0; i < 4; ++i) {
+-        _POPPLER_CALL_ARGS(obj1, bboxObj.arrayGet, i);
++        _POPPLER_CALL_ARGS(obj1, bboxObj.getArray()->get, i);
+         bbox[i] = obj1.getNum();
+         _POPPLER_FREE(obj1);
+     }
+@@ -2802,7 +2802,7 @@ void PdfParser::doForm(Object *str, double *offset)
+     _POPPLER_CALL_ARGS(matrixObj, dict->lookup, "Matrix");
+     if (matrixObj.isArray()) {
+         for (i = 0; i < 6; ++i) {
+-        _POPPLER_CALL_ARGS(obj1, matrixObj.arrayGet, i);
++        _POPPLER_CALL_ARGS(obj1, matrixObj.getArray()->get, i);
+         m[i] = obj1.getNum();
+         _POPPLER_FREE(obj1);
+         }
+@@ -3194,10 +3194,10 @@ void PdfParser::loadColorProfile()
+         return;
+ 
+     Object outputIntents = catDict.dictLookup("OutputIntents");
+-    if (!outputIntents.isArray() || outputIntents.arrayGetLength() != 1)
++    if (!outputIntents.isArray() || outputIntents.getArray()->getLength() != 
1)
+         return;
+ 
+-    Object firstElement = outputIntents.arrayGet(0);
++    Object firstElement = outputIntents.getArray()->get(0);
+     if (!firstElement.isDict())
+         return;
+ 
+@@ -3245,7 +3245,7 @@ void PdfParser::build_annots(const Object &annot, int 
page_num)
+             _POPPLER_CALL_ARGS(Rect_obj, annot_dict->lookup, "Rect");
+             if (Rect_obj.isArray()) {
+                 for (int i = 0; i < 2; i++) {
+-                    _POPPLER_CALL_ARGS(xy_obj, Rect_obj.arrayGet, i);
++                    _POPPLER_CALL_ARGS(xy_obj, Rect_obj.getArray()->get, i);
+                     offset[i] = xy_obj.getNum();
+                 }
+                 doForm(&first_state_obj, offset);
+diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h 
b/src/extension/internal/pdfinput/poppler-transition-api.h
+index bf42f54..058c91f 100644
+--- a/src/extension/internal/pdfinput/poppler-transition-api.h
++++ b/src/extension/internal/pdfinput/poppler-transition-api.h
+@@ -15,6 +15,12 @@
+ #include <glib/poppler-features.h>
+ #include <poppler/UTF.h>
+ 
++#if POPPLER_CHECK_VERSION(26, 7, 0)
++#define _POPPLER_STRING_26_7 std::string
++#else
++#define _POPPLER_STRING_26_7 GooString
++#endif
++
+ #if POPPLER_CHECK_VERSION(26, 6, 0)
+ #define _POPPLER_GET_GRAY(color, gray) getGray(color, gray)
+ #define _POPPLER_GET_RGB(color, rgb) getRGB(color, rgb)
+diff --git a/src/extension/internal/pdfinput/poppler-utils.cpp 
b/src/extension/internal/pdfinput/poppler-utils.cpp
+index 9027362..d084d92 100644
+--- a/src/extension/internal/pdfinput/poppler-utils.cpp
++++ b/src/extension/internal/pdfinput/poppler-utils.cpp
+@@ -186,15 +186,16 @@ void InkFontDict::hashFontObject1(const Object *obj, 
FNVHash *h)
+         case objNull:
+             h->hash('z');
+             break;
+-        case objArray:
+-            h->hash('a');
+-            n = obj->arrayGetLength();
+-            h->hash((char *)&n, sizeof(int));
+-            for (i = 0; i < n; ++i) {
+-                const Object &obj2 = obj->arrayGetNF(i);
+-                hashFontObject1(&obj2, h);
+-            }
+-            break;
++        case objArray: {
++                h->hash('a');
++                Array * objArray = obj->getArray();
++                n = objArray->getLength();
++                h->hash((char *)&n, sizeof(int));
++                for (i = 0; i < n; ++i) {
++                    const Object &obj2 = objArray->getNF(i);
++                    hashFontObject1(&obj2, h);
++                }
++            } break;
+         case objDict: {
+                 h->hash('d');
+                 auto objdict = obj->getDict();
+@@ -206,8 +207,7 @@ void InkFontDict::hashFontObject1(const Object *obj, 
FNVHash *h)
+                     const Object &obj2 = objdict->getValNF(i);
+                     hashFontObject1(&obj2, h);
+                 }
+-            }
+-            break;
++            } break;
+         case objStream:
+             // this should never happen - streams must be indirect refs
+             break;
+@@ -545,7 +545,7 @@ void _getFontsRecursive(std::shared_ptr<PDFDoc> pdf_doc, 
Dict *resources, const
+                 continue;
+ 
+             Ref resourcesRef;
+-            const Object resObj = obj2.streamGetDict()->lookup("Resources", 
&resourcesRef);
++            const Object resObj = 
obj2.getStream()->getDict()->lookup("Resources", &resourcesRef);
+             if (resourcesRef != Ref::INVALID() && 
!visitedObjects.insert(resourcesRef.num).second)
+                 continue;
+ 
+@@ -610,6 +610,11 @@ std::string getString(const GooString *value)
+     return "";
+ }
+ 
++std::string getString(const GooString &value)
++{
++    return getString(value.toStr());
++}
++
+ /**
+  * Convert PDF strings, which can be formatted as UTF8, UTF16BE or UTF16LE 
into
+  * a predictable UTF8 string consistant with svg requirements.
+diff --git a/src/extension/internal/pdfinput/poppler-utils.h 
b/src/extension/internal/pdfinput/poppler-utils.h
+index 13123d7..2b1978b 100644
+--- a/src/extension/internal/pdfinput/poppler-utils.h
++++ b/src/extension/internal/pdfinput/poppler-utils.h
+@@ -86,6 +86,7 @@ std::string getDictString(Dict *dict, const char *key);
+ std::string getString(const std::string &value);
+ std::string getString(const std::unique_ptr<GooString> &value);
+ std::string getString(const GooString *value);
++std::string getString(const GooString &value);
+ std::string validateString(std::string const &in);
+ 
+ // Replacate poppler FontDict
+-- 
+2.54.0
+
diff --git a/gnu/packages/patches/inkscape-poppler-26-3.patch 
b/gnu/packages/patches/inkscape-poppler-26-3.patch
new file mode 100644
index 0000000000..0d2db8e8c9
--- /dev/null
+++ b/gnu/packages/patches/inkscape-poppler-26-3.patch
@@ -0,0 +1,67 @@
+https://gitlab.com/inkscape/inkscape/-/commit/98828255aa0c1212329236b3ff4ac7f41efb4a67.patch
+
+From: Varasina Farmadani <[email protected]>
+Date: Mon, 11 May 2026 02:29:05 +0700
+Subject: [PATCH] fix: support for popler >= 26.05 font encoding change
+
+Poppler version 26.05.0 changed the return type of
+gfx8bit->getEncoding() from char** to const std::array<const char*,256>&.
+this caused a compilation error due to type incompatibility:
+    error: assigning to 'char **' from incompatible type 'const 
std::array<const char *, 256>
+    error: no viable conversion from 'const std::array<const char *, 256>' to 
'char **'
+---
+ .../pdfinput/poppler-cairo-font-engine.cpp         | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp 
b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
+index a022ce63c8..19ebd26693 100644
+--- a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
++++ b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
+@@ -314,7 +314,11 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont 
*gfxFont, XRef *xref, FT_Li
+ #else
+     GfxFontLoc *fontLoc;
+ #endif
++#if POPPLER_CHECK_VERSION(26, 5, 0)
++    const char * const *enc;
++#else
+     char **enc;
++#endif
+     const char *name;
+ #if POPPLER_CHECK_VERSION(25, 7, 0)
+     std::unique_ptr<FoFiType1C> ff1c;
+@@ -386,7 +390,11 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont 
*gfxFont, XRef *xref, FT_Li
+                 goto err2;
+             }
+ 
++#if POPPLER_CHECK_VERSION(26, 5, 0)
++            enc = gfx8bit->getEncoding().data();
++#else
+             enc = gfx8bit->getEncoding();
++#endif
+ 
+             codeToGID.resize(256);
+             for (i = 0; i < 256; ++i) {
+@@ -678,7 +686,7 @@ CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, 
PDFDoc *doc, CairoFontE
+ #endif
+ 
+     std::vector<int> codeToGID;
+-    char *name;
++    const char *name;
+ 
+     Dict *charProcs = gfx8bit->getCharProcs();
+     Ref ref = *gfxFont->getID();
+@@ -695,7 +703,11 @@ CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, 
PDFDoc *doc, CairoFontE
+ 
+     cairo_font_face_set_user_data(font_face, &type3_font_key, (void *)info, 
_free_type3_font_info);
+ 
++#if POPPLER_CHECK_VERSION(26, 5, 0)
++    const char * const *enc = gfx8bit->getEncoding().data();
++#else
+     char **enc = gfx8bit->getEncoding();
++#endif
+     codeToGID.resize(256);
+     for (int i = 0; i < 256; ++i) {
+         codeToGID[i] = 0;
+-- 
+GitLab
+

Reply via email to