Hi,

this fixes the build with a newer poppler.

Ciao,
        Kili

Index: Makefile
===================================================================
RCS file: /cvs/ports/print/scribus/Makefile,v
retrieving revision 1.84
diff -u -p -r1.84 Makefile
--- Makefile    24 Apr 2023 11:41:25 -0000      1.84
+++ Makefile    16 Jul 2023 22:00:29 -0000
@@ -2,6 +2,7 @@ DPB_PROPERTIES= parallel
 
 COMMENT=       desktop publishing program
 DISTNAME=      scribus-1.5.8
+REVISION=      0
 CATEGORIES=    print
 REVISION=      1
 
@@ -45,8 +46,10 @@ LIB_DEPENDS= graphics/lcms2 \
                graphics/jpeg \
                ${MODPY_LIB_DEPENDS}
 
+CXXFLAGS+=     -D CMS_NO_REGISTER_KEYWORD
 CONFIGURE_ARGS+=       -DCMAKE_INSTALL_MANDIR="${LOCALBASE}/man/" \
-                       -DWANT_NOOSG=1
+                       -DWANT_NOOSG=1 \
+                       -DWANT_CPP17=ON
 #DEBUG_CONFIGURE_ARGS +=       -DWANT_DEBUG=1
 
 FIX_CRLF_FILES=        `find . -type f \( -name "*.cpp" -o -name "*.h" \)`
Index: patches/patch-scribus_plugins_import_pdf_importpdf_cpp
===================================================================
RCS file: patches/patch-scribus_plugins_import_pdf_importpdf_cpp
diff -N patches/patch-scribus_plugins_import_pdf_importpdf_cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-scribus_plugins_import_pdf_importpdf_cpp      16 Jul 2023 
22:00:29 -0000
@@ -0,0 +1,43 @@
+Fix build with newer poppler. From upstream svn r24982.
+
+Index: scribus/plugins/import/pdf/importpdf.cpp
+--- scribus/plugins/import/pdf/importpdf.cpp.orig
++++ scribus/plugins/import/pdf/importpdf.cpp
+@@ -90,7 +90,11 @@ QImage PdfPlug::readThumbnail(const QString& fName)
+ #endif
+       globalParams->setErrQuiet(gTrue);
+ 
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 3, 0)
++      PDFDoc pdfDoc{ std::make_unique<GooString>(fname) };
++#else
+       PDFDoc pdfDoc{fname, nullptr, nullptr, nullptr};
++#endif
+       if (!pdfDoc.isOk() || pdfDoc.getErrorCode() == errEncrypted)
+               return QImage();
+ 
+@@ -343,7 +347,11 @@ bool PdfPlug::convert(const QString& fn)
+       globalParams->setErrQuiet(gTrue);
+ //    globalParams->setPrintCommands(gTrue);
+       QList<OptionalContentGroup*> ocgGroups;
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 3, 0)
++      auto pdfDoc = 
std::make_unique<PDFDoc>(std::make_unique<GooString>(fname));
++#else
+       auto pdfDoc = std::unique_ptr<PDFDoc>(new PDFDoc(fname, nullptr, 
nullptr, nullptr));
++#endif
+       if (pdfDoc)
+       {
+               if (pdfDoc->getErrorCode() == errEncrypted)
+@@ -362,8 +370,13 @@ bool PdfPlug::convert(const QString& fn)
+ #else
+                               auto fname = new 
GooString(QFile::encodeName(fn).data());
+ #endif
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 3, 0)
++                              std::optional<GooString> userPW(std::in_place, 
text.toLocal8Bit().data());
++                              pdfDoc.reset(new 
PDFDoc(std::make_unique<GooString>(fname), userPW, userPW, nullptr));
++#else
+                               auto userPW = new 
GooString(text.toLocal8Bit().data());
+                               pdfDoc.reset(new PDFDoc(fname, userPW, userPW, 
nullptr));
++#endif
+                               
qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
+                       }
+                       if ((!pdfDoc) || (pdfDoc->getErrorCode() != errNone))
Index: patches/patch-scribus_plugins_import_pdf_slaoutput_cpp
===================================================================
RCS file: patches/patch-scribus_plugins_import_pdf_slaoutput_cpp
diff -N patches/patch-scribus_plugins_import_pdf_slaoutput_cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-scribus_plugins_import_pdf_slaoutput_cpp      16 Jul 2023 
22:00:29 -0000
@@ -0,0 +1,367 @@
+Fix build with newer poppler. From upstream svn r24884, r24885, and
+r25074 and myself (for that dashPattern fix).
+
+Index: scribus/plugins/import/pdf/slaoutput.cpp
+--- scribus/plugins/import/pdf/slaoutput.cpp.orig
++++ scribus/plugins/import/pdf/slaoutput.cpp
+@@ -7,6 +7,11 @@ for which a new license (GPL+exception) is in place.
+ 
+ #include "slaoutput.h"
+ 
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
++#include <memory>
++#include <optional>
++#endif
++
+ #include <poppler/GlobalParams.h>
+ #include <poppler/poppler-config.h>
+ #include <poppler/FileSpec.h>
+@@ -169,8 +174,13 @@ void AnoOutputDev::drawString(GfxState *state, POPPLER
+       int shade = 100;
+       currColorText = getColor(state->getFillColorSpace(), 
state->getFillColor(), &shade);
+       fontSize = state->getFontSize();
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
++      if (state->getFont() && state->getFont()->getName())
++              fontName = new GooString(state->getFont()->getName().value());
++#else
+       if (state->getFont())
+               fontName = state->getFont()->getName()->copy();
++#endif
+       itemText = s->copy();
+ }
+ 
+@@ -358,7 +368,12 @@ LinkAction* SlaOutputDev::SC_getAdditionalAction(const
+ GBool SlaOutputDev::annotations_callback(Annot *annota, void *user_data)
+ {
+       SlaOutputDev *dev = (SlaOutputDev*)user_data;
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
++      const PDFRectangle& annotRect = annota->getRect();;
++      const PDFRectangle* box = &annotRect;
++#else
+       PDFRectangle *box = annota->getRect();
++#endif
+       double xCoor = dev->m_doc->currentPage()->xOffset() + box->x1 - 
dev->cropOffsetX;
+       double yCoor = dev->m_doc->currentPage()->yOffset() + 
dev->m_doc->currentPage()->height() - box->y2 + dev->cropOffsetY;
+       double width = box->x2 - box->x1;
+@@ -701,7 +716,12 @@ bool SlaOutputDev::handleWidgetAnnot(Annot* annota, do
+                       if (apa || !achar)
+                       {
+                               AnoOutputDev *annotOutDev = new 
AnoOutputDev(m_doc, m_importedColors);
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
++                              const PDFRectangle& annotaRect = 
annota->getRect();
++                              Gfx* gfx = new Gfx(pdfDoc, annotOutDev, 
pdfDoc->getPage(m_actPage)->getResourceDict(), &annotaRect, nullptr);
++#else
+                               Gfx *gfx = new Gfx(pdfDoc, annotOutDev, 
pdfDoc->getPage(m_actPage)->getResourceDict(), annota->getRect(), nullptr);
++#endif
+                               ano->draw(gfx, false);
+                               if (!bgFound)
+                                       m_currColorFill = 
annotOutDev->currColorFill;
+@@ -3026,19 +3046,30 @@ void SlaOutputDev::markPoint(POPPLER_CONST char *name,
+ 
+ void SlaOutputDev::updateFont(GfxState *state)
+ {
+-      GfxFont *gfxFont;
+-      GfxFontLoc *fontLoc;
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
++      std::optional<GfxFontLoc> fontLoc;
++      std::string fileName;
++      std::unique_ptr<FoFiTrueType> ff;
++      std::optional<std::vector<unsigned char>> tmpBuf;
++#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
++      std::optional<GfxFontLoc> fontLoc;
++      const GooString * fileName = nullptr;
++      std::unique_ptr<FoFiTrueType> ff;
++      char* tmpBuf = nullptr;
++#else
++      GfxFontLoc * fontLoc = nullptr;
++      GooString * fileName = nullptr;
++      FoFiTrueType * ff = nullptr;
++      char* tmpBuf = nullptr;
++#endif
+       GfxFontType fontType;
+       SlaOutFontFileID *id;
+       SplashFontFile *fontFile;
+       SplashFontSrc *fontsrc = nullptr;
+-      FoFiTrueType *ff;
+       Object refObj, strObj;
+-      GooString *fileName;
+-      char *tmpBuf;
+       int tmpBufLen = 0;
+-      int *codeToGID;
+-      const double *textMat;
++      int *codeToGID = nullptr;
++      const double *textMat = nullptr;
+       double m11, m12, m21, m22, fontSize;
+       SplashCoord mat[4];
+       int n = 0;
+@@ -3046,11 +3077,12 @@ void SlaOutputDev::updateFont(GfxState *state)
+       SplashCoord matrix[6];
+ 
+       m_font = nullptr;
+-      fileName = nullptr;
+-      tmpBuf = nullptr;
+-      fontLoc = nullptr;
+ 
+-      gfxFont = state->getFont();
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
++      GfxFont* gfxFont = state->getFont().get();
++#else
++      GfxFont* gfxFont = state->getFont();
++#endif
+       if (!gfxFont)
+               goto err1;
+ 
+@@ -3064,10 +3096,10 @@ void SlaOutputDev::updateFont(GfxState *state)
+               delete id;
+       else
+       {
+-              if (!(fontLoc = gfxFont->locateFont(xref, nullptr)))
++              fontLoc = gfxFont->locateFont((xref) ? xref : 
pdfDoc->getXRef(), nullptr);
++              if (!fontLoc)
+               {
+-                      error(errSyntaxError, -1, "Couldn't find a font for 
'{0:s}'",
+-                      gfxFont->getName() ? gfxFont->getName()->getCString() : 
"(unnamed)");
++                      error(errSyntaxError, -1, "Couldn't find a font for 
'{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
+                       goto err2;
+               }
+ 
+@@ -3075,94 +3107,106 @@ void SlaOutputDev::updateFont(GfxState *state)
+               if (fontLoc->locType == gfxFontLocEmbedded)
+               {
+                       // if there is an embedded font, read it to memory
+-                      tmpBuf = gfxFont->readEmbFontFile(xref, &tmpBufLen);
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
++                      tmpBuf = gfxFont->readEmbFontFile((xref) ? xref : 
pdfDoc->getXRef());
+                       if (! tmpBuf)
+                               goto err2;
++#else
++                      tmpBuf = gfxFont->readEmbFontFile(xref, &tmpBufLen);
++                      if (!tmpBuf)
++                              goto err2;
++#endif
+ 
+                       // external font
+               }
+               else
+               { // gfxFontLocExternal
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
+                       fileName = fontLoc->path;
++#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
++                      fileName = fontLoc->pathAsGooString();
++#else
++                      fileName = fontLoc->path;
++#endif
+                       fontType = fontLoc->fontType;
+               }
+ 
+               fontsrc = new SplashFontSrc;
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
++              if (!fileName.empty())
++                      fontsrc->setFile(fileName);
++              else
++                      fontsrc->setBuf(std::move(tmpBuf.value()));
++#else
+               if (fileName)
+                       fontsrc->setFile(fileName, gFalse);
+               else
+                       fontsrc->setBuf(tmpBuf, tmpBufLen, gTrue);
++#endif
+ 
+               // load the font file
+               switch (fontType) {
+               case fontType1:
+-                      if (!(fontFile = m_fontEngine->loadType1Font(
+-                              id,
+-                              fontsrc,
+-                              (const char **)((Gfx8BitFont *) 
gfxFont)->getEncoding())))
++                      if (!(fontFile = m_fontEngine->loadType1Font(id, 
fontsrc, (const char **)((Gfx8BitFont *) gfxFont)->getEncoding())))
+                       {
+-                              error(errSyntaxError, -1, "Couldn't create a 
font for '{0:s}'",
+-                              gfxFont->getName() ? 
gfxFont->getName()->getCString() : "(unnamed)");
++                              error(errSyntaxError, -1, "Couldn't create a 
font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : 
"(unnamed)");
+                               goto err2;
+                       }
+                       break;
+               case fontType1C:
+-                      if (!(fontFile = m_fontEngine->loadType1CFont(
+-                                                      id,
+-                                                      fontsrc,
+-                                                      (const char 
**)((Gfx8BitFont *) gfxFont)->getEncoding())))
++                      if (!(fontFile = m_fontEngine->loadType1CFont(id, 
fontsrc, (const char **)((Gfx8BitFont *) gfxFont)->getEncoding())))
+                       {
+-                              error(errSyntaxError, -1, "Couldn't create a 
font for '{0:s}'",
+-                              gfxFont->getName() ? 
gfxFont->getName()->getCString() : "(unnamed)");
++                              error(errSyntaxError, -1, "Couldn't create a 
font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : 
"(unnamed)");
+                               goto err2;
+                       }
+                       break;
+               case fontType1COT:
+-                      if (!(fontFile = m_fontEngine->loadOpenTypeT1CFont(
+-                                                      id,
+-                                                      fontsrc,
+-                                                      (const char 
**)((Gfx8BitFont *) gfxFont)->getEncoding())))
++                      if (!(fontFile = m_fontEngine->loadOpenTypeT1CFont(id, 
fontsrc, (const char **)((Gfx8BitFont *) gfxFont)->getEncoding())))
+                       {
+-                              error(errSyntaxError, -1, "Couldn't create a 
font for '{0:s}'",
+-                              gfxFont->getName() ? 
gfxFont->getName()->getCString() : "(unnamed)");
++                              error(errSyntaxError, -1, "Couldn't create a 
font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : 
"(unnamed)");
+                               goto err2;
+                       }
+                       break;
+               case fontTrueType:
+               case fontTrueTypeOT:
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
++                      if (!fileName.empty())
++                              ff = FoFiTrueType::load(fileName.c_str());
++                      else
++                              ff = FoFiTrueType::make(fontsrc->buf.data(), 
fontsrc->buf.size());
++#else
+                       if (fileName)
+                               ff = FoFiTrueType::load(fileName->getCString());
+                       else
+                               ff = FoFiTrueType::make(tmpBuf, tmpBufLen);
++#endif
+                       if (ff)
+                       {
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
++                              codeToGID = ((Gfx8BitFont*) 
gfxFont)->getCodeToGIDMap(ff.get());
++                              ff.reset();
++#else
+                               codeToGID = ((Gfx8BitFont 
*)gfxFont)->getCodeToGIDMap(ff);
+-                              n = 256;
+                               delete ff;
++#endif
++                              n = 256;
+                       }
+                       else
+                       {
+                               codeToGID = nullptr;
+                               n = 0;
+                       }
+-                      if (!(fontFile = m_fontEngine->loadTrueTypeFont(
+-                                                      id,
+-                                                      fontsrc,
+-                                                      codeToGID, n)))
++                      if (!(fontFile = m_fontEngine->loadTrueTypeFont(id, 
fontsrc, codeToGID, n)))
+                       {
+-                              error(errSyntaxError, -1, "Couldn't create a 
font for '{0:s}'",
+-                              gfxFont->getName() ? 
gfxFont->getName()->getCString() : "(unnamed)");
++                              error(errSyntaxError, -1, "Couldn't create a 
font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : 
"(unnamed)");
+                               goto err2;
+                       }
+                       break;
+               case fontCIDType0:
+               case fontCIDType0C:
+-                      if (!(fontFile = m_fontEngine->loadCIDFont(
+-                                                      id,
+-                                                      fontsrc)))
++                      if (!(fontFile = m_fontEngine->loadCIDFont(id, 
fontsrc)))
+                       {
+-                              error(errSyntaxError, -1, "Couldn't create a 
font for '{0:s}'",
+-                              gfxFont->getName() ? 
gfxFont->getName()->getCString() : "(unnamed)");
++                              error(errSyntaxError, -1, "Couldn't create a 
font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : 
"(unnamed)");
+                               goto err2;
+                       }
+                       break;
+@@ -3178,10 +3222,7 @@ void SlaOutputDev::updateFont(GfxState *state)
+                               codeToGID = nullptr;
+                               n = 0;
+                       }
+-                      if (!(fontFile = m_fontEngine->loadOpenTypeCFFFont(
+-                                                      id,
+-                                                      fontsrc,
+-                                                      codeToGID, n)))
++                      if (!(fontFile = m_fontEngine->loadOpenTypeCFFFont(id, 
fontsrc, codeToGID, n)))
+                       {
+                               error(errSyntaxError, -1, "Couldn't create a 
font for '{0:s}'",
+                               gfxFont->getName() ? 
gfxFont->getName()->getCString() : "(unnamed)");
+@@ -3203,22 +3244,30 @@ void SlaOutputDev::updateFont(GfxState *state)
+                       }
+                       else
+                       {
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
++                              if (!fileName.empty())
++                                      ff = 
FoFiTrueType::load(fileName.c_str());
++                              else
++                                      ff = 
FoFiTrueType::make(fontsrc->buf.data(), fontsrc->buf.size());
++#else
+                               if (fileName)
+                                       ff = 
FoFiTrueType::load(fileName->getCString());
+                               else
+                                       ff = FoFiTrueType::make(tmpBuf, 
tmpBufLen);
++#endif
+                               if (! ff)
+                                       goto err2;
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
++                              codeToGID = ((GfxCIDFont*) 
gfxFont)->getCodeToGIDMap(ff.get(), &n);
++                              ff.reset();
++#else
+                               codeToGID = ((GfxCIDFont 
*)gfxFont)->getCodeToGIDMap(ff, &n);
+                               delete ff;
++#endif
+                       }
+-                      if (!(fontFile = m_fontEngine->loadTrueTypeFont(
+-                                                      id,
+-                                                      fontsrc,
+-                                                      codeToGID, n, 
faceIndex)))
++                      if (!(fontFile = m_fontEngine->loadTrueTypeFont(id, 
fontsrc, codeToGID, n, faceIndex)))
+                       {
+-                              error(errSyntaxError, -1, "Couldn't create a 
font for '{0:s}'",
+-                              gfxFont->getName() ? 
gfxFont->getName()->getCString() : "(unnamed)");
++                              error(errSyntaxError, -1, "Couldn't create a 
font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : 
"(unnamed)");
+                               goto err2;
+                       }
+                       break;
+@@ -3247,14 +3296,19 @@ void SlaOutputDev::updateFont(GfxState *state)
+       mat[3] = -m22;
+       m_font = m_fontEngine->getFont(fontFile, mat, matrix);
+ 
++#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(22, 2, 0)
+       delete fontLoc;
++#endif
+       if (fontsrc && !fontsrc->isFile)
+               fontsrc->unref();
+       return;
+ 
+ err2:
+       delete id;
++#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(22, 2, 0)
+       delete fontLoc;
++#endif
++
+ err1:
+       if (fontsrc && !fontsrc->isFile)
+               fontsrc->unref();
+@@ -3357,9 +3411,15 @@ void SlaOutputDev::drawChar(GfxState* state, double x,
+ GBool SlaOutputDev::beginType3Char(GfxState *state, double x, double y, 
double dx, double dy, CharCode code, POPPLER_CONST_082 Unicode *u, int uLen)
+ {
+ //    qDebug() << "beginType3Char";
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
+       GfxFont *gfxFont;
++      if (!(gfxFont = state->getFont().get()))
++              return gTrue;
++#else
++      GfxFont* gfxFont;
+       if (!(gfxFont = state->getFont()))
+               return gTrue;
++#endif
+       if (gfxFont->getType() != fontType3)
+               return gTrue;
+       F3Entry f3e;
+@@ -3681,13 +3741,12 @@ void SlaOutputDev::getPenState(GfxState *state)
+                       break;
+       }
+       double lw = state->getLineWidth();
+-      double *dashPattern;
+-      int dashLength;
+-      state->getLineDash(&dashPattern, &dashLength, &DashOffset);
++      const std::vector<double> &dashPattern = 
state->getLineDash(&DashOffset);
++      int dashLength = dashPattern.size();
+       QVector<double> pattern(dashLength);
+       for (int i = 0; i < dashLength; ++i)
+       {
+-              pattern[i] = dashPattern[i] / lw;
++              pattern[i] = dashPattern.data()[i] / lw;
+       }
+       DashValues = pattern;
+ }

Reply via email to