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;
+ }