Hi,

On Thu, Oct 24, 2024 at 11:40:26AM +0200, Rafael Sadowski wrote:
> On Tue Oct 22, 2024 at 08:16:32PM +0200, Matthias Kilian wrote:
> > Disable poppler for now, because this doesn't build with poppler-24.10.0
> > and my C++ foo isn't strong enough.
> 
> Not happy with it but OK rsadowski

I'd like to re-add some happiness (from upstream). Lightly tested
by importing a PDF document.

ok?

Ciao,
        Kili

Index: Makefile
===================================================================
RCS file: /cvs/ports/graphics/inkscape/Makefile,v
diff -u -p -r1.115 Makefile
--- Makefile    24 Oct 2024 19:08:18 -0000      1.115
+++ Makefile    29 Oct 2024 22:14:28 -0000
@@ -1,10 +1,8 @@
 COMMENT =      SVG vector drawing application
 
-# After the next update, try to re-enable poppler.
-
 VERSION =      1.4
 DISTNAME =     inkscape-${VERSION}
-REVISION =     0
+REVISION =     1
 
 CATEGORIES =   graphics
 
@@ -24,7 +22,7 @@ WANTLIB += freetype gc gdk-3 gdk_pixbuf-
 WANTLIB += giomm-2.4 glib-2.0 glibmm-2.4 gmodule-2.0 gobject-2.0
 WANTLIB += gsl gslcblas gspell-1 gtk-3 gtkmm-3.0 gtksourceview-4
 WANTLIB += harfbuzz iconv intl jpeg lcms2 m pango-1.0 pangocairo-1.0
-WANTLIB += pangoft2-1.0 pangomm-1.4 png potrace
+WANTLIB += pangoft2-1.0 pangomm-1.4 png poppler poppler-glib potrace
 WANTLIB += sigc-2.0 xml2 xslt z
 
 SITES =                https://media.inkscape.org/dl/resources/file/
@@ -36,8 +34,6 @@ MODULES =     devel/cmake \
 
 COMPILER =     base-clang ports-gcc
 
-CONFIGURE_ARGS +=      -DENABLE_POPPLER=False
-
 # We are just substituting paths at build time
 MODRUBY_BUILDDEP =     No
 
@@ -58,6 +54,7 @@ LIB_DEPENDS = devel/boost \
                graphics/lcms2 \
                graphics/png \
                graphics/potrace \
+               print/poppler \
                textproc/gspell \
                textproc/libxslt \
                x11/gtk+3 \
Index: patches/patch-src_extension_internal_pdfinput_pdf-parser_cpp
===================================================================
RCS file: patches/patch-src_extension_internal_pdfinput_pdf-parser_cpp
diff -N patches/patch-src_extension_internal_pdfinput_pdf-parser_cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_extension_internal_pdfinput_pdf-parser_cpp        29 Oct 
2024 22:14:28 -0000
@@ -0,0 +1,380 @@
+Fix build with poppler-24.10.0.
+
+From upstream commit 22304ae8034d067670a9f95022083a75fac92b4c.
+
+Index: src/extension/internal/pdfinput/pdf-parser.cpp
+--- src/extension/internal/pdfinput/pdf-parser.cpp.orig
++++ src/extension/internal/pdfinput/pdf-parser.cpp
+@@ -810,11 +810,11 @@ void PdfParser::opSetExtGState(Object args[], int /*nu
+             _POPPLER_FREE(obj3);
+             if (_POPPLER_CALL_ARGS_DEREF(obj3, obj2.dictLookup, 
"G").isStream()) {
+                 if (_POPPLER_CALL_ARGS_DEREF(obj4, 
obj3.streamGetDict()->lookup, "Group").isDict()) {
+-                    GfxColorSpace *blendingColorSpace = nullptr;
++                    std::unique_ptr<GfxColorSpace> blendingColorSpace;
+                     GBool isolated = gFalse;
+                     GBool knockout = gFalse;
+                     if (!_POPPLER_CALL_ARGS_DEREF(obj5, obj4.dictLookup, 
"CS").isNull()) {
+-                        blendingColorSpace = GfxColorSpace::parse(nullptr, 
&obj5, nullptr, state);
++                        blendingColorSpace = 
std::unique_ptr<GfxColorSpace>(GfxColorSpace::parse(nullptr, &obj5, nullptr, 
state));
+                     }
+                     _POPPLER_FREE(obj5);
+                     if (_POPPLER_CALL_ARGS_DEREF(obj5, obj4.dictLookup, 
"I").isBool()) {
+@@ -835,7 +835,7 @@ void PdfParser::opSetExtGState(Object args[], int /*nu
+                             }
+                         }
+                     }
+-                    doSoftMask(&obj3, alpha, blendingColorSpace, isolated, 
knockout, funcs[0], &backdropColor);
++                    doSoftMask(&obj3, alpha, blendingColorSpace.get(), 
isolated, knockout, funcs[0], &backdropColor);
+                     if (funcs[0]) {
+                         delete funcs[0];
+                     }
+@@ -920,9 +920,6 @@ void PdfParser::doSoftMask(Object *str, GBool alpha,
+         alpha, transferFunc, backdropColor);
+   --formDepth;
+ 
+-  if (blendingColorSpace) {
+-    delete blendingColorSpace;
+-  }
+   _POPPLER_FREE(obj1);
+ }
+ 
+@@ -939,42 +936,43 @@ void PdfParser::opSetRenderingIntent(Object /*args*/[]
+  *
+  * Maintains a cache for named color spaces to avoid expensive re-parsing.
+  */
+-GfxColorSpace *PdfParser::lookupColorSpaceCopy(Object &arg)
++std::unique_ptr<GfxColorSpace> PdfParser::lookupColorSpaceCopy(Object &arg)
+ {
+     assert(!arg.isNull());
+-    GfxColorSpace *colorSpace = nullptr;
+ 
+     if (char const *name = arg.isName() ? arg.getName() : nullptr) {
+         auto const cache_name = std::to_string(formDepth) + "-" + name;
+-        if ((colorSpace = colorSpacesCache[cache_name].get())) {
+-            return colorSpace->copy();
++        if (auto cached = colorSpacesCache[cache_name].get()) {
++            return std::unique_ptr<GfxColorSpace>(cached->copy());
+         }
+ 
+-        Object obj = res->lookupColorSpace(name);
+-        if (obj.isNull()) {
+-            colorSpace = GfxColorSpace::parse(res, &arg, nullptr, state);
++        std::unique_ptr<GfxColorSpace> colorSpace;
++        if (auto obj = res->lookupColorSpace(name); !obj.isNull()) {
++            colorSpace = 
std::unique_ptr<GfxColorSpace>(GfxColorSpace::parse(res, &obj, nullptr, state));
+         } else {
+-            colorSpace = GfxColorSpace::parse(res, &obj, nullptr, state);
++            colorSpace = 
std::unique_ptr<GfxColorSpace>(GfxColorSpace::parse(res, &arg, nullptr, state));
+         }
+ 
+         if (colorSpace && colorSpace->getMode() != csPattern) {
+-            colorSpacesCache[cache_name].reset(colorSpace->copy());
++            colorSpacesCache[cache_name] = 
std::unique_ptr<GfxColorSpace>(colorSpace->copy());
+         }
++
++        return colorSpace;
+     } else {
+         // We were passed in an object directly.
+-        colorSpace = GfxColorSpace::parse(res, &arg, nullptr, state);
++        return std::unique_ptr<GfxColorSpace>(GfxColorSpace::parse(res, &arg, 
nullptr, state));
+     }
+-    return colorSpace;
+ }
+ 
+ /**
+  * Look up pattern/gradients from the GfxResource dictionary
+  */
+-GfxPattern *PdfParser::lookupPattern(Object *obj, GfxState *state)
++std::unique_ptr<GfxPattern> PdfParser::lookupPattern(Object *obj, GfxState 
*state)
+ {
+-    if (!obj->isName())
+-        return nullptr;
+-    return res->lookupPattern(obj->getName(), nullptr, state);
++    if (!obj->isName()) {
++        return {};
++    }
++    return std::unique_ptr<GfxPattern>(res->lookupPattern(obj->getName(), 
nullptr, state));
+ }
+ 
+ // TODO not good that numArgs is ignored but args[] is used:
+@@ -983,7 +981,7 @@ void PdfParser::opSetFillGray(Object args[], int /*num
+   GfxColor color;
+   builder->beforeStateChange(state);
+   state->setFillPattern(nullptr);
+-  state->setFillColorSpace(new GfxDeviceGrayColorSpace());
++  
state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceGrayColorSpace>()));
+   color.c[0] = dblToCol(args[0].getNum());
+   state->setFillColor(&color);
+   builder->updateStyle(state);
+@@ -995,7 +993,7 @@ void PdfParser::opSetStrokeGray(Object args[], int /*n
+   GfxColor color;
+   builder->beforeStateChange(state);
+   state->setStrokePattern(nullptr);
+-  state->setStrokeColorSpace(new GfxDeviceGrayColorSpace());
++  
state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceGrayColorSpace>()));
+   color.c[0] = dblToCol(args[0].getNum());
+   state->setStrokeColor(&color);
+   builder->updateStyle(state);
+@@ -1008,7 +1006,7 @@ void PdfParser::opSetFillCMYKColor(Object args[], int 
+   int i;
+   builder->beforeStateChange(state);
+   state->setFillPattern(nullptr);
+-  state->setFillColorSpace(new GfxDeviceCMYKColorSpace());
++  
state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceCMYKColorSpace>()));
+   for (i = 0; i < 4; ++i) {
+     color.c[i] = dblToCol(args[i].getNum());
+   }
+@@ -1022,7 +1020,7 @@ void PdfParser::opSetStrokeCMYKColor(Object args[], in
+   GfxColor color;
+   builder->beforeStateChange(state);
+   state->setStrokePattern(nullptr);
+-  state->setStrokeColorSpace(new GfxDeviceCMYKColorSpace());
++  
state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceCMYKColorSpace>()));
+   for (int i = 0; i < 4; ++i) {
+     color.c[i] = dblToCol(args[i].getNum());
+   }
+@@ -1036,7 +1034,7 @@ void PdfParser::opSetFillRGBColor(Object args[], int /
+   GfxColor color;
+   builder->beforeStateChange(state);
+   state->setFillPattern(nullptr);
+-  state->setFillColorSpace(new GfxDeviceRGBColorSpace());
++  
state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceRGBColorSpace>()));
+   for (int i = 0; i < 3; ++i) {
+     color.c[i] = dblToCol(args[i].getNum());
+   }
+@@ -1049,7 +1047,7 @@ void PdfParser::opSetStrokeRGBColor(Object args[], int
+   GfxColor color;
+   builder->beforeStateChange(state);
+   state->setStrokePattern(nullptr);
+-  state->setStrokeColorSpace(new GfxDeviceRGBColorSpace());
++  
state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceRGBColorSpace>()));
+   for (int i = 0; i < 3; ++i) {
+     color.c[i] = dblToCol(args[i].getNum());
+   }
+@@ -1061,14 +1059,14 @@ void PdfParser::opSetStrokeRGBColor(Object args[], int
+ void PdfParser::opSetFillColorSpace(Object args[], int numArgs)
+ {
+   assert(numArgs >= 1);
+-  GfxColorSpace *colorSpace = lookupColorSpaceCopy(args[0]);
++  auto colorSpace = lookupColorSpaceCopy(args[0]);
+   builder->beforeStateChange(state);
+   state->setFillPattern(nullptr);
+ 
+   if (colorSpace) {
+     GfxColor color;
+-    state->setFillColorSpace(colorSpace);
+     colorSpace->getDefaultColor(&color);
++    state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(colorSpace));
+     state->setFillColor(&color);
+     builder->updateStyle(state);
+   } else {
+@@ -1082,14 +1080,14 @@ void PdfParser::opSetStrokeColorSpace(Object args[], i
+   assert(numArgs >= 1);
+   builder->beforeStateChange(state);
+ 
+-  GfxColorSpace *colorSpace = lookupColorSpaceCopy(args[0]);
++  auto colorSpace = lookupColorSpaceCopy(args[0]);
+ 
+   state->setStrokePattern(nullptr);
+ 
+   if (colorSpace) {
+     GfxColor color;
+-    state->setStrokeColorSpace(colorSpace);
+     colorSpace->getDefaultColor(&color);
++    state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(colorSpace));
+     state->setStrokeColor(&color);
+     builder->updateStyle(state);
+   } else {
+@@ -1152,7 +1150,7 @@ void PdfParser::opSetFillColorN(Object args[], int num
+       builder->updateStyle(state);
+     }
+     if (auto pattern = lookupPattern(&(args[numArgs - 1]), state)) {
+-        state->setFillPattern(pattern);
++        state->setFillPattern(_POPPLER_CONSUME_UNIQPTR_ARG(pattern));
+         builder->updateStyle(state);
+     }
+ 
+@@ -1195,7 +1193,7 @@ void PdfParser::opSetStrokeColorN(Object args[], int n
+       builder->updateStyle(state);
+     }
+     if (auto pattern = lookupPattern(&(args[numArgs - 1]), state)) {
+-        state->setStrokePattern(pattern);
++        state->setStrokePattern(_POPPLER_CONSUME_UNIQPTR_ARG(pattern));
+         builder->updateStyle(state);
+     }
+ 
+@@ -1572,11 +1570,11 @@ void PdfParser::doShadingPatternFillFallback(GfxShadin
+ // TODO not good that numArgs is ignored but args[] is used:
+ void PdfParser::opShFill(Object args[], int /*numArgs*/)
+ {
+-  GfxShading *shading = nullptr;
+   GfxPath *savedPath = nullptr;
+   bool savedState = false;
+ 
+-  if (!(shading = res->lookupShading(args[0].getName(), nullptr, state))) {
++  auto shading = 
std::unique_ptr<GfxShading>(res->lookupShading(args[0].getName(), nullptr, 
state));
++  if (!shading) {
+     return;
+   }
+ 
+@@ -1608,19 +1606,19 @@ void PdfParser::opShFill(Object args[], int /*numArgs*
+   // do shading type-specific operations
+   switch (shading->getType()) {
+   case 1: // Function-based shading
+-    doFunctionShFill(static_cast<GfxFunctionShading *>(shading));
++    doFunctionShFill(static_cast<GfxFunctionShading *>(shading.get()));
+     break;
+   case 2: // Axial shading
+   case 3: // Radial shading
+-      builder->addClippedFill(shading, stateToAffine(state));
++      builder->addClippedFill(shading.get(), stateToAffine(state));
+       break;
+   case 4: // Free-form Gouraud-shaded triangle mesh
+   case 5: // Lattice-form Gouraud-shaded triangle mesh
+-    doGouraudTriangleShFill(static_cast<GfxGouraudTriangleShading 
*>(shading));
++    doGouraudTriangleShFill(static_cast<GfxGouraudTriangleShading 
*>(shading.get()));
+     break;
+   case 6: // Coons patch mesh
+   case 7: // Tensor-product patch mesh
+-    doPatchMeshShFill(static_cast<GfxPatchMeshShading *>(shading));
++    doPatchMeshShFill(static_cast<GfxPatchMeshShading *>(shading.get()));
+     break;
+   }
+ 
+@@ -1629,8 +1627,6 @@ void PdfParser::opShFill(Object args[], int /*numArgs*
+     restoreState();
+     state->setPath(savedPath);
+   }
+-
+-  delete shading;
+ }
+ 
+ void PdfParser::doFunctionShFill(GfxFunctionShading *shading) {
+@@ -2521,7 +2517,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str,
+         
+     } else {
+         // get color space and color map
+-        GfxColorSpace *colorSpace;
++        std::unique_ptr<GfxColorSpace> colorSpace;
+         _POPPLER_CALL_ARGS(obj1, dict->lookup, "ColorSpace");
+         if (obj1.isNull()) {
+             _POPPLER_FREE(obj1);
+@@ -2530,13 +2526,11 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str,
+         if (!obj1.isNull()) {
+             colorSpace = lookupColorSpaceCopy(obj1);
+         } else if (csMode == streamCSDeviceGray) {
+-            colorSpace = new GfxDeviceGrayColorSpace();
++            colorSpace = std::make_unique<GfxDeviceGrayColorSpace>();
+         } else if (csMode == streamCSDeviceRGB) {
+-            colorSpace = new GfxDeviceRGBColorSpace();
++            colorSpace = std::make_unique<GfxDeviceRGBColorSpace>();
+         } else if (csMode == streamCSDeviceCMYK) {
+-            colorSpace = new GfxDeviceCMYKColorSpace();
+-        } else {
+-            colorSpace = nullptr;
++            colorSpace = std::make_unique<GfxDeviceCMYKColorSpace>();
+         }
+         _POPPLER_FREE(obj1);
+         if (!colorSpace) {
+@@ -2547,10 +2541,9 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str,
+             _POPPLER_FREE(obj1);
+             _POPPLER_CALL_ARGS(obj1, dict->lookup, "D");
+         }
+-        GfxImageColorMap *colorMap = new GfxImageColorMap(bits, &obj1, 
colorSpace);
++        auto colorMap = std::make_unique<GfxImageColorMap>(bits, &obj1, 
_POPPLER_CONSUME_UNIQPTR_ARG(colorSpace));
+         _POPPLER_FREE(obj1);
+         if (!colorMap->isOk()) {
+-            delete colorMap;
+             goto err1;
+         }
+         
+@@ -2561,7 +2554,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str,
+         int maskWidth = 0;
+         int maskHeight = 0;
+         maskInvert = gFalse;
+-        GfxImageColorMap *maskColorMap = nullptr;
++        std::unique_ptr<GfxImageColorMap> maskColorMap;
+         _POPPLER_CALL_ARGS(maskObj, dict->lookup, "Mask");
+         _POPPLER_CALL_ARGS(smaskObj, dict->lookup, "SMask");
+         Dict* maskDict;
+@@ -2617,7 +2610,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str,
+                   _POPPLER_FREE(obj1);
+                     _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "CS");
+             }
+-            GfxColorSpace *maskColorSpace = lookupColorSpaceCopy(obj1);
++            auto maskColorSpace = lookupColorSpaceCopy(obj1);
+             _POPPLER_FREE(obj1);
+             if (!maskColorSpace || maskColorSpace->getMode() != csDeviceGray) 
{
+                 goto err1;
+@@ -2627,10 +2620,9 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str,
+                 _POPPLER_FREE(obj1);
+                 _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "D");
+             }
+-            maskColorMap = new GfxImageColorMap(maskBits, &obj1, 
maskColorSpace);
++            maskColorMap = std::make_unique<GfxImageColorMap>(maskBits, 
&obj1, _POPPLER_CONSUME_UNIQPTR_ARG(maskColorSpace));
+             _POPPLER_FREE(obj1);
+             if (!maskColorMap->isOk()) {
+-                delete maskColorMap;
+                 goto err1;
+             }
+             //~ handle the Matte entry
+@@ -2711,17 +2703,15 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str,
+         
+         // draw it
+         if (haveSoftMask) {
+-          builder->addSoftMaskedImage(state, str, width, height, colorMap, 
interpolate,
+-                              maskStr, maskWidth, maskHeight, maskColorMap, 
maskInterpolate);
+-            delete maskColorMap;
++          builder->addSoftMaskedImage(state, str, width, height, 
colorMap.get(), interpolate,
++                              maskStr, maskWidth, maskHeight, 
maskColorMap.get(), maskInterpolate);
+         } else if (haveExplicitMask) {
+-          builder->addMaskedImage(state, str, width, height, colorMap, 
interpolate,
++          builder->addMaskedImage(state, str, width, height, colorMap.get(), 
interpolate,
+                               maskStr, maskWidth, maskHeight, maskInvert, 
maskInterpolate);
+         } else {
+-          builder->addImage(state, str, width, height, colorMap, interpolate,
+-                      haveColorKeyMask ? maskColors : static_cast<int 
*>(nullptr));
++          builder->addImage(state, str, width, height, colorMap.get(), 
interpolate,
++                      haveColorKeyMask ? maskColors : nullptr);
+         }
+-        delete colorMap;
+         
+         _POPPLER_FREE(maskObj);
+         _POPPLER_FREE(smaskObj);
+@@ -2739,7 +2729,6 @@ void PdfParser::doForm(Object *str, double *offset)
+ {
+     Dict *dict;
+     GBool transpGroup, isolated, knockout;
+-    GfxColorSpace *blendingColorSpace;
+     Object matrixObj, bboxObj;
+     double m[6], bbox[4];
+     Object resObj;
+@@ -2805,12 +2794,12 @@ void PdfParser::doForm(Object *str, double *offset)
+ 
+     // check for a transparency group
+     transpGroup = isolated = knockout = gFalse;
+-    blendingColorSpace = nullptr;
++    std::unique_ptr<GfxColorSpace> blendingColorSpace;
+     if (_POPPLER_CALL_ARGS_DEREF(obj1, dict->lookup, "Group").isDict()) {
+         if (_POPPLER_CALL_ARGS_DEREF(obj2, obj1.dictLookup, 
"S").isName("Transparency")) {
+         transpGroup = gTrue;
+         if (!_POPPLER_CALL_ARGS_DEREF(obj3, obj1.dictLookup, "CS").isNull()) {
+-                blendingColorSpace = GfxColorSpace::parse(nullptr, &obj3, 
nullptr, state);
++            blendingColorSpace = 
std::unique_ptr<GfxColorSpace>(GfxColorSpace::parse(nullptr, &obj3, nullptr, 
state));
+         }
+         _POPPLER_FREE(obj3);
+         if (_POPPLER_CALL_ARGS_DEREF(obj3, obj1.dictLookup, "I").isBool()) {
+@@ -2828,12 +2817,9 @@ void PdfParser::doForm(Object *str, double *offset)
+ 
+     // draw it
+     ++formDepth;
+-    doForm1(str, resDict, m, bbox, transpGroup, gFalse, blendingColorSpace, 
isolated, knockout);
++    doForm1(str, resDict, m, bbox, transpGroup, gFalse, 
blendingColorSpace.get(), isolated, knockout);
+     --formDepth;
+ 
+-    if (blendingColorSpace) {
+-        delete blendingColorSpace;
+-    }
+     _POPPLER_FREE(resObj);
+ }
+ 
Index: patches/patch-src_extension_internal_pdfinput_pdf-parser_h
===================================================================
RCS file: patches/patch-src_extension_internal_pdfinput_pdf-parser_h
diff -N patches/patch-src_extension_internal_pdfinput_pdf-parser_h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_extension_internal_pdfinput_pdf-parser_h  29 Oct 2024 
22:14:28 -0000
@@ -0,0 +1,25 @@
+Fix build with poppler-24.10.0.
+
+From upstream commit 22304ae8034d067670a9f95022083a75fac92b4c.
+
+Index: src/extension/internal/pdfinput/pdf-parser.h
+--- src/extension/internal/pdfinput/pdf-parser.h.orig
++++ src/extension/internal/pdfinput/pdf-parser.h
+@@ -138,7 +138,7 @@ class PdfParser { (public)
+     void loadPatternColorProfiles(Dict *resources);
+     void loadColorProfile();
+     void loadColorSpaceProfile(GfxColorSpace *space, Object *obj);
+-    GfxPattern *lookupPattern(Object *obj, GfxState *state);
++    std::unique_ptr<GfxPattern> lookupPattern(Object *obj, GfxState *state);
+ 
+     std::shared_ptr<CairoFontEngine> getFontEngine();
+ 
+@@ -177,7 +177,7 @@ class PdfParser { (public)
+     //! Caches color spaces by name
+     std::map<std::string, std::unique_ptr<GfxColorSpace>> colorSpacesCache;
+ 
+-    GfxColorSpace *lookupColorSpaceCopy(Object &);
++    std::unique_ptr<GfxColorSpace> lookupColorSpaceCopy(Object &);
+ 
+     void setDefaultApproximationPrecision(); // init color deltas
+     void pushOperator(const char *name);
Index: patches/patch-src_extension_internal_pdfinput_poppler-transition-api_h
===================================================================
RCS file: patches/patch-src_extension_internal_pdfinput_poppler-transition-api_h
diff -N patches/patch-src_extension_internal_pdfinput_poppler-transition-api_h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_extension_internal_pdfinput_poppler-transition-api_h      
29 Oct 2024 22:14:28 -0000
@@ -0,0 +1,20 @@
+Fix build with poppler-24.10.0.
+
+From upstream commit 22304ae8034d067670a9f95022083a75fac92b4c.
+
+Index: src/extension/internal/pdfinput/poppler-transition-api.h
+--- src/extension/internal/pdfinput/poppler-transition-api.h.orig
++++ 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(24, 10, 0)
++#define _POPPLER_CONSUME_UNIQPTR_ARG(value) std::move(value)
++#else
++#define _POPPLER_CONSUME_UNIQPTR_ARG(value) value.release()
++#endif
++
+ #if POPPLER_CHECK_VERSION(24, 5, 0)
+ #define _POPPLER_HAS_UNICODE_BOM(value) 
(hasUnicodeByteOrderMark(value->toStr()))
+ #define _POPPLER_HAS_UNICODE_BOMLE(value) 
(hasUnicodeByteOrderMarkLE(value->toStr()))

Reply via email to