[packages/inkscape] - gdl no longer a BR, added poppler patches

mrozowik mrozowik at pld-linux.org
Tue Jul 29 13:39:45 CEST 2025


commit dfd3d2c91365ff3783f65eba56c40706c0371d82
Author: Krzysztof Mrozowicz <mrozowik at pld-linux.org>
Date:   Tue Jul 29 11:39:36 2025 +0000

    - gdl no longer a BR, added poppler patches

 inkscape.spec       |  10 ++--
 poppler-25.06.patch | 118 ++++++++++++++++++++++++++++++++++++++++++++++
 poppler-25.07.patch | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 257 insertions(+), 4 deletions(-)
---
diff --git a/inkscape.spec b/inkscape.spec
index 7fc8153..e4dd101 100644
--- a/inkscape.spec
+++ b/inkscape.spec
@@ -8,12 +8,14 @@ Summary:	Scalable vector graphics editor
 Summary(pl.UTF-8):	Edytor skalowalnej grafiki wektorowej
 Name:		inkscape
 Version:	1.4.2
-Release:	3
+Release:	4
 License:	GPL v2+, LGPL v2.1+
 Group:		X11/Applications/Graphics
 # download: follow https://inkscape.org/release/
 Source0:	https://media.inkscape.org/dl/resources/file/%{name}-%{version}.tar.xz
 # Source0-md5:	0c24e84085bed3f0237d1cdf0856a855
+Patch0:		poppler-25.06.patch
+Patch1:		poppler-25.07.patch
 URL:		https://inkscape.org/
 %{!?with_imagick:BuildRequires:	GraphicsMagick-c++-devel}
 %{?with_imagick:BuildRequires:	ImageMagick6-c++-devel < 7}
@@ -28,7 +30,6 @@ BuildRequires:	double-conversion-devel
 BuildRequires:	fontconfig-devel
 BuildRequires:	freetype-devel >= 2.0
 BuildRequires:	gc-devel >= 7.2
-BuildRequires:	gdl-devel >= 3.6
 BuildRequires:	gettext-tools >= 0.17
 BuildRequires:	glib2-devel >= 1:2.28
 BuildRequires:	glibmm-devel >= 2.28
@@ -48,7 +49,6 @@ BuildRequires:	libpng-devel >= 1.2
 BuildRequires:	librevenge-devel
 BuildRequires:	libsigc++-devel >= 2.0.17
 BuildRequires:	libsoup-devel >= 2.42
-# C++ 20 needed for poppler 24.x
 BuildRequires:	libstdc++-devel >= 6:8
 BuildRequires:	libvisio-devel >= 0.1
 BuildRequires:	libwpd-devel >= 0.9
@@ -75,7 +75,7 @@ Requires(post,postun):	gtk-update-icon-cache
 Requires:	cairo >= 1.10
 Requires:	cairomm >= 1.9.8
 Requires:	gc >= 7.2
-Requires:	gdl >= 3.6
+#Requires:	gdl >= 3.6
 Requires:	glib2 >= 1:2.28
 Requires:	glibmm >= 2.28
 Requires:	gtk+3 >= 3.22
@@ -114,6 +114,8 @@ Bashowe dopełnianie argumentów programu inkscape.
 
 %prep
 %setup -q -n %{name}-%{version}_2025-05-08_ebf0e940d0
+%patch -P0 -p1
+%patch -P1 -p1
 
 # python3-only
 %{__sed} -i -e '1s,/usr/bin/env python3,%{__python3},' \
diff --git a/poppler-25.06.patch b/poppler-25.06.patch
new file mode 100644
index 0000000..676a2e7
--- /dev/null
+++ b/poppler-25.06.patch
@@ -0,0 +1,118 @@
+From 1fdfb889bba9ee146c8b826e97bc58a88cb1e529 Mon Sep 17 00:00:00 2001
+From: Rafael Siejakowski <rs at rs-math.net>
+Date: Sun, 8 Jun 2025 21:30:44 +0200
+Subject: [PATCH] Fix build against Poppler 25.06
+
+Accommodate for the private API change, whereby an array of pointers
+has been replaced with a vector of unique_ptr.
+
+Fixes https://gitlab.com/inkscape/inkscape/-/issues/5836
+---
+ .../internal/pdfinput/pdf-parser.cpp          | 23 +++++++++++--------
+ .../pdfinput/poppler-transition-api.h         | 12 ++++++++++
+ 2 files changed, 25 insertions(+), 10 deletions(-)
+
+diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
+index b0b6aa9eec4..22c86fbc3a4 100644
+--- a/src/extension/internal/pdfinput/pdf-parser.cpp
++++ b/src/extension/internal/pdfinput/pdf-parser.cpp
+@@ -24,6 +24,7 @@
+ #include <cstdio>
+ #include <cstdlib>
+ #include <cstring>
++#include <memory>
+ #include <mutex> // std::call_once()
+ #include <utility>
+ #include <vector>
+@@ -693,7 +694,6 @@ void PdfParser::opSetLineWidth(Object args[], int /*numArgs*/)
+ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
+ {
+     Object obj1, obj2, obj3, obj4, obj5;
+-    Function *funcs[4] = {nullptr, nullptr, nullptr, nullptr};
+     GfxColor backdropColor;
+     GBool haveBackdropColor = gFalse;
+     GBool alpha = gFalse;
+@@ -751,13 +751,14 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
+         state->setLineWidth(obj2.getNum());
+     }
+ 
++    _POPPLER_DECLARE_TRANSFER_FUNCTION_VECTOR(funcs);
++
+     // transfer function
+     if (_POPPLER_CALL_ARGS_DEREF(obj2, obj1.dictLookup, "TR2").isNull()) {
+         _POPPLER_CALL_ARGS(obj2, obj1.dictLookup, "TR");
+     }
+     if (obj2.isName(const_cast<char *>("Default")) || obj2.isName(const_cast<char *>("Identity"))) {
+-        funcs[0] = funcs[1] = funcs[2] = funcs[3] = nullptr;
+-        state->setTransfer(funcs);
++        state->setTransfer(std::move(funcs));
+     } else if (obj2.isArray() && obj2.arrayGetLength() == 4) {
+         int pos = 4;
+         for (int i = 0; i < 4; ++i) {
+@@ -770,12 +771,14 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
+         }
+         _POPPLER_FREE(obj3);
+         if (pos == 4) {
+-            state->setTransfer(funcs);
++            state->setTransfer(std::move(funcs));
+         }
+     } else if (obj2.isName() || obj2.isDict() || obj2.isStream()) {
+         if ((funcs[0] = Function::parse(&obj2))) {
+-            funcs[1] = funcs[2] = funcs[3] = nullptr;
+-            state->setTransfer(funcs);
++            funcs[1] = nullptr;
++            funcs[2] = nullptr;
++            funcs[3] = nullptr;
++            state->setTransfer(std::move(funcs));
+         }
+     } else if (!obj2.isNull()) {
+         error(errSyntaxError, getPos(), "Invalid transfer function in ExtGState");
+@@ -797,8 +800,7 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
+                 funcs[0] = Function::parse(&obj3);
+                 if (funcs[0]->getInputSize() != 1 || funcs[0]->getOutputSize() != 1) {
+                     error(errSyntaxError, getPos(), "Invalid transfer function in soft mask in ExtGState");
+-                    delete funcs[0];
+-                    funcs[0] = nullptr;
++                    _POPPLER_DELETE_TRANSFER_FUNCTION(funcs[0]);
+                 }
+             }
+             _POPPLER_FREE(obj3);
+@@ -842,9 +844,10 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
+                             }
+                         }
+                     }
+-                    doSoftMask(&obj3, alpha, blendingColorSpace.get(), isolated, knockout, funcs[0], &backdropColor);
++                    doSoftMask(&obj3, alpha, blendingColorSpace.get(), isolated, knockout,
++                               _POPPLER_GET_TRANSFER_FUNCTION_POINTER(funcs[0]), &backdropColor);
+                     if (funcs[0]) {
+-                        delete funcs[0];
++                        _POPPLER_DELETE_TRANSFER_FUNCTION(funcs[0]);
+                     }
+                 } else {
+                     error(errSyntaxError, getPos(), "Invalid soft mask in ExtGState - missing group");
+diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h
+index a67132ba6bd..d04412757bc 100644
+--- a/src/extension/internal/pdfinput/poppler-transition-api.h
++++ b/src/extension/internal/pdfinput/poppler-transition-api.h
+@@ -15,6 +15,18 @@
+ #include <glib/poppler-features.h>
+ #include <poppler/UTF.h>
+ 
++#if POPPLER_CHECK_VERSION(25, 6, 0)
++#define _POPPLER_DECLARE_TRANSFER_FUNCTION_VECTOR(name) std::vector<std::unique_ptr<Function>> name(4)
++#define _POPPLER_DELETE_TRANSFER_FUNCTION(name) name.reset()
++#define _POPPLER_GET_TRANSFER_FUNCTION_POINTER(name) name.get()
++#else
++#define _POPPLER_DECLARE_TRANSFER_FUNCTION_VECTOR(name) Function *name[4] = {}
++#define _POPPLER_DELETE_TRANSFER_FUNCTION(name) \
++    delete name;                                \
++    name = nullptr
++#define _POPPLER_GET_TRANSFER_FUNCTION_POINTER(name) name
++#endif
++
+ #if POPPLER_CHECK_VERSION(25,2,0)
+ #define _POPPLER_GET_CODE_TO_GID_MAP(ff, len) getCodeToGIDMap(ff)
+ #define _POPPLER_GET_CID_TO_GID_MAP(len) getCIDToGIDMap()
+-- 
+GitLab
+
diff --git a/poppler-25.07.patch b/poppler-25.07.patch
new file mode 100644
index 0000000..dd6d7a7
--- /dev/null
+++ b/poppler-25.07.patch
@@ -0,0 +1,133 @@
+From ce52c5f96106ae5747171663a46831f21aa52d95 Mon Sep 17 00:00:00 2001
+From: KrIr17 <elendil.krir17 at gmail.com>
+Date: Sun, 6 Jul 2025 15:42:13 +0200
+Subject: [PATCH] Fix building with Poppler 25.07.0
+
+Fix building issues with
+
+1. [`GfxState::shift()`](https://gitlab.freedesktop.org/poppler/poppler/-/commit/71bf5552d448a6fdb666f2b61764b61ca197617d)
+
+2. [`FoFiTrueType::make` and `FoFiType1C::make`](FoFiTrueType::make)
+
+3. Fix typo from 5c4c6d116dae5250d75d34a45f0d9220824d2e20
+---
+ src/extension/internal/pdfinput/pdf-parser.cpp   |  4 ++--
+ .../pdfinput/poppler-cairo-font-engine.cpp       | 16 +++++++++++-----
+ .../internal/pdfinput/poppler-transition-api.h   | 14 ++++++++++++++
+ 3 files changed, 27 insertions(+), 7 deletions(-)
+
+diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
+index f46d12f72e5..4071e464a44 100644
+--- a/src/extension/internal/pdfinput/pdf-parser.cpp
++++ b/src/extension/internal/pdfinput/pdf-parser.cpp
+@@ -2322,11 +2322,11 @@ void PdfParser::doShowText(GooString *s) {
+         state->textTransformDelta(originX, originY, &tOriginX, &tOriginY);
+ 
+         // In Gfx.cc this is drawChar(...)
+-        builder->addChar(state, state->getCurX() + riseX, state->getCurY() + riseY,
++        builder->addChar(state, state->_POPPLER_GET_CUR_TEXT_X() + riseX, state->_POPPLER_GET_CUR_TEXT_Y() + riseY,
+                          dx, dy, ax, ay, tOriginX, tOriginY, code, n, u, uLen);
+ 
+         // Move onto next unicode character.
+-        state->shift(tdx, tdy);
++        state->_POPPLER_TEXT_SHIFT_WITH_USER_COORDS(tdx, tdy);
+         p += n;
+         len -= n;
+     }
+diff --git a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
+index bd1d4e49367..cfc6961f629 100644
+--- a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
++++ b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
+@@ -316,7 +316,11 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
+ #endif
+     char **enc;
+     const char *name;
++#if POPPLER_CHECK_VERSION(25, 7, 0)
++    std::unique_ptr<FoFiType1C> ff1c;
++#else
+     FoFiType1C *ff1c;
++#endif
+     std::optional<FreeTypeFontFace> font_face;
+     std::vector<int> codeToGID;
+     bool substitute = false;
+@@ -427,7 +431,7 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
+                 FoFiTrueType *ff;
+ #endif
+                 if (!font_data.empty()) {
+-                    ff = FoFiTrueType::make((fontchar)font_data.data(), font_data.size(), 0);
++                    ff = _POPPLER_FOFI_TRUETYPE_MAKE(font_data, 0);
+                 } else {
+                     ff = FoFiTrueType::load(fileName.c_str(), 0);
+                 }
+@@ -457,7 +461,7 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
+             FoFiTrueType *ff;
+ #endif
+             if (!font_data.empty()) {
+-                ff = FoFiTrueType::make((fontchar)font_data.data(), font_data.size(), 0);
++                ff = _POPPLER_FOFI_TRUETYPE_MAKE(font_data, 0);
+             } else {
+                 ff = FoFiTrueType::load(fileName.c_str(), 0);
+             }
+@@ -491,7 +495,7 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
+         case fontCIDType0C:
+             if (!useCIDs) {
+                 if (!font_data.empty()) {
+-                    ff1c = FoFiType1C::make((fontchar)font_data.data(), font_data.size());
++                    ff1c = _POPPLER_FOFI_TYPE1C_MAKE(font_data);
+                 } else {
+                     ff1c = FoFiType1C::load(fileName.c_str());
+                 }
+@@ -504,7 +508,9 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
+                     codeToGID.insert(codeToGID.begin(), src, src + n);
+                     gfree(src);
+ #endif
++#if !(POPPLER_CHECK_VERSION(25, 7, 0))
+                     delete ff1c;
++#endif
+                 }
+             }
+ 
+@@ -540,13 +546,13 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
+                     FoFiTrueType *ff;
+ #endif
+                     if (!font_data.empty()) {
+-                        ff = FoFiTrueType::make((fontchar)font_data.data(), font_data.size(), 0);
++                        ff = _POPPLER_FOFI_TRUETYPE_MAKE(font_data, 0);
+                     } else {
+                         ff = FoFiTrueType::load(fileName.c_str(), 0);
+                     }
+                     if (ff) {
+                         if (ff->isOpenTypeCFF()) {
+-                            auto src = ff1c->_POPPLER_GET_CID_TO_GID_MAP(&n);
++                            auto src = ff->_POPPLER_GET_CID_TO_GID_MAP(&n);
+ #if POPPLER_CHECK_VERSION(25,2,0)
+                             codeToGID = std::move(src);
+ #else
+diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h
+index d04412757bc..866b630bb67 100644
+--- a/src/extension/internal/pdfinput/poppler-transition-api.h
++++ b/src/extension/internal/pdfinput/poppler-transition-api.h
+@@ -15,6 +15,20 @@
+ #include <glib/poppler-features.h>
+ #include <poppler/UTF.h>
+ 
++#if POPPLER_CHECK_VERSION(25, 7, 0)
++#define _POPPLER_TEXT_SHIFT_WITH_USER_COORDS(dx, dy) textShiftWithUserCoords(dx, dy)
++#define _POPPLER_FOFI_TRUETYPE_MAKE(font_data, faceIndex) FoFiTrueType::make(std::span(font_data), faceIndex)
++#define _POPPLER_FOFI_TYPE1C_MAKE(font_data) FoFiType1C::make(std::span(font_data))
++#define _POPPLER_GET_CUR_TEXT_X() getCurTextX()
++#define _POPPLER_GET_CUR_TEXT_Y() getCurTextY()
++#else
++#define _POPPLER_TEXT_SHIFT_WITH_USER_COORDS(dx, dy) shift(dx, dy)
++#define _POPPLER_FOFI_TRUETYPE_MAKE(font_data, faceIndex) FoFiTrueType::make((fontchar)font_data.data(), font_data.size(), faceIndex)
++#define _POPPLER_FOFI_TYPE1C_MAKE(font_data) FoFiType1C::make((fontchar)font_data.data(), font_data.size())
++#define _POPPLER_GET_CUR_TEXT_X() getCurX()
++#define _POPPLER_GET_CUR_TEXT_Y() getCurY()
++#endif
++
+ #if POPPLER_CHECK_VERSION(25, 6, 0)
+ #define _POPPLER_DECLARE_TRANSFER_FUNCTION_VECTOR(name) std::vector<std::unique_ptr<Function>> name(4)
+ #define _POPPLER_DELETE_TRANSFER_FUNCTION(name) name.reset()
+-- 
+GitLab
+
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/inkscape.git/commitdiff/dfd3d2c91365ff3783f65eba56c40706c0371d82



More information about the pld-cvs-commit mailing list