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

Reply via email to