OK except for REVISION: you need to bump the existing one :-)
— Antoine > On 17 Jul 2023, at 00:06, Matthias Kilian <[email protected]> wrote: > > 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; > + } >
