summary refs log tree commit diff
diff options
context:
space:
mode:
authorRicardo Wurmus <rekado@elephly.net>2023-04-24 21:16:02 +0200
committerRicardo Wurmus <rekado@elephly.net>2023-04-25 06:17:16 +0200
commit8495069bed0d51a21ff609f7036ff40d73ff07a8 (patch)
treef79ef32faa8b73823c89fab25dcc333628427f17
parent7fc2c442c85aefe21e61502f50b27651b043b5cd (diff)
downloadguix-8495069bed0d51a21ff609f7036ff40d73ff07a8.tar.gz
gnu: scribus: Fix build with latest poppler.
* gnu/packages/patches/scribus-1.5.8-poppler-22.03.0.patch,
gnu/packages/patches/scribus-1.5.8-poppler-22.04.0.patch,
gnu/packages/patches/scribus-1.5.8-poppler-22.09.0.patch,
gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-1.patch,
gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-2.patch: New files.
* gnu/local.mk (dist_patch_DATA): Add them.
* gnu/packages/scribus.scm (scribus)[source]: Add patches.
[arguments]: Enable WANT_CPP17 option.
-rw-r--r--gnu/local.mk5
-rw-r--r--gnu/packages/patches/scribus-1.5.8-poppler-22.03.0.patch52
-rw-r--r--gnu/packages/patches/scribus-1.5.8-poppler-22.04.0.patch291
-rw-r--r--gnu/packages/patches/scribus-1.5.8-poppler-22.09.0.patch20
-rw-r--r--gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-1.patch129
-rw-r--r--gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-2.patch28
-rw-r--r--gnu/packages/scribus.scm13
7 files changed, 535 insertions, 3 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 00ef1bfe93..374b0aa359 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1679,6 +1679,11 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-telingo-fix-comparison.patch	\
   %D%/packages/patches/python-typeguard-python3.10.patch	\
   %D%/packages/patches/python-w3lib-fix-test-failure.patch	\
+  %D%/packages/patches/scribus-1.5.8-poppler-22.03.0.patch	\
+  %D%/packages/patches/scribus-1.5.8-poppler-22.04.0.patch	\
+  %D%/packages/patches/scribus-1.5.8-poppler-22.09.0.patch	\
+  %D%/packages/patches/scribus-1.5.8-poppler-22.2.0-1.patch	\
+  %D%/packages/patches/scribus-1.5.8-poppler-22.2.0-2.patch	\
   %D%/packages/patches/sdcc-disable-non-free-code.patch		\
   %D%/packages/patches/sdl-pango-api_additions.patch		\
   %D%/packages/patches/sdl-pango-blit_overflow.patch		\
diff --git a/gnu/packages/patches/scribus-1.5.8-poppler-22.03.0.patch b/gnu/packages/patches/scribus-1.5.8-poppler-22.03.0.patch
new file mode 100644
index 0000000000..f7a0c03fdd
--- /dev/null
+++ b/gnu/packages/patches/scribus-1.5.8-poppler-22.03.0.patch
@@ -0,0 +1,52 @@
+From f19410ac3b27e33dd62105746784e61e85b90a1d Mon Sep 17 00:00:00 2001
+From: Jean Ghali <jghali@libertysurf.fr>
+Date: Wed, 2 Mar 2022 22:22:53 +0000
+Subject: [PATCH] #16764: Build break with poppler 22.03.0
+
+git-svn-id: svn://scribus.net/trunk/Scribus@24982 11d20701-8431-0410-a711-e3c959e3b870
+---
+ scribus/plugins/import/pdf/importpdf.cpp | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/scribus/plugins/import/pdf/importpdf.cpp b/scribus/plugins/import/pdf/importpdf.cpp
+index 154e58a3f0..392dcd9e64 100644
+--- a/scribus/plugins/import/pdf/importpdf.cpp
++++ b/scribus/plugins/import/pdf/importpdf.cpp
+@@ -89,7 +89,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();

+ 

+@@ -342,7 +346,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)

+@@ -361,8 +369,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))

diff --git a/gnu/packages/patches/scribus-1.5.8-poppler-22.04.0.patch b/gnu/packages/patches/scribus-1.5.8-poppler-22.04.0.patch
new file mode 100644
index 0000000000..290484e7e8
--- /dev/null
+++ b/gnu/packages/patches/scribus-1.5.8-poppler-22.04.0.patch
@@ -0,0 +1,291 @@
+https://bugs.gentoo.org/843287
+https://github.com/scribusproject/scribus/commit/f2237b8f0b5cf7690e864a22ef7a63a6d769fa36.patch
+
+From f2237b8f0b5cf7690e864a22ef7a63a6d769fa36 Mon Sep 17 00:00:00 2001
+From: Jean Ghali <jghali@libertysurf.fr>
+Date: Fri, 1 Apr 2022 23:52:32 +0000
+Subject: [PATCH] Fix build with poppler 22.04.0
+
+git-svn-id: svn://scribus.net/trunk/Scribus@25074 11d20701-8431-0410-a711-e3c959e3b870
+---
+ scribus/plugins/import/pdf/slaoutput.cpp | 123 ++++++++++++++---------
+ 1 file changed, 78 insertions(+), 45 deletions(-)
+
+diff --git a/scribus/plugins/import/pdf/slaoutput.cpp b/scribus/plugins/import/pdf/slaoutput.cpp
+index e20a81f99e..5626fe3477 100644
+--- a/scribus/plugins/import/pdf/slaoutput.cpp
++++ b/scribus/plugins/import/pdf/slaoutput.cpp
+@@ -174,8 +174,13 @@ void AnoOutputDev::drawString(GfxState *state, POPPLER_CONST GooString *s)
+ 	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();

+ }

+ 

+@@ -357,7 +362,12 @@ std::unique_ptr<LinkAction> SlaOutputDev::SC_getAdditionalAction(const char *key
+ 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;

+@@ -684,7 +694,12 @@ bool SlaOutputDev::handleWidgetAnnot(Annot* annota, double xCoor, double yCoor,
+ 			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;

+@@ -2916,22 +2931,27 @@ void SlaOutputDev::markPoint(POPPLER_CONST char *name, Dict *properties)
+ 

+ void SlaOutputDev::updateFont(GfxState *state)

+ {

+-	GfxFont *gfxFont;

+-#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)

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

+ 	Object refObj, strObj;

+-	char *tmpBuf = nullptr;

+ 	int tmpBufLen = 0;

+ 	int *codeToGID = nullptr;

+ 	const double *textMat = nullptr;

+@@ -2943,7 +2963,11 @@ void SlaOutputDev::updateFont(GfxState *state)
+ 

+ 	m_font = 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;

+ 

+@@ -2968,15 +2992,23 @@ 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, 2, 0)

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

+@@ -2985,52 +3017,54 @@ void SlaOutputDev::updateFont(GfxState *state)
+ 		}

+ 

+ 		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)

+@@ -3047,24 +3081,17 @@ void SlaOutputDev::updateFont(GfxState *state)
+ 				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;

+@@ -3080,10 +3107,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)");

+@@ -3105,10 +3129,17 @@ 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)

+@@ -3119,13 +3150,9 @@ void SlaOutputDev::updateFont(GfxState *state)
+ 				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;

+@@ -3269,9 +3296,15 @@ void SlaOutputDev::drawChar(GfxState* state, double x, double y, double dx, doub
+ 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;

diff --git a/gnu/packages/patches/scribus-1.5.8-poppler-22.09.0.patch b/gnu/packages/patches/scribus-1.5.8-poppler-22.09.0.patch
new file mode 100644
index 0000000000..106a6f5162
--- /dev/null
+++ b/gnu/packages/patches/scribus-1.5.8-poppler-22.09.0.patch
@@ -0,0 +1,20 @@
+--- a/scribus/plugins/import/pdf/slaoutput.cpp
++++ b/scribus/plugins/import/pdf/slaoutput.cpp
+@@ -3741,9 +3741,16 @@ void SlaOutputDev::getPenState(GfxState *state)
+ 			break;

+ 	}

+ 	double lw = state->getLineWidth();

+-	double *dashPattern;

+ 	int dashLength;

++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 9, 0)

++	const double *dashPattern;

++	const std::vector<double> &dash = state->getLineDash(&DashOffset);

++	dashPattern = dash.data();

++	dashLength = dash.size();

++#else

++	double *dashPattern;

+ 	state->getLineDash(&dashPattern, &dashLength, &DashOffset);

++#endif

+ 	QVector<double> pattern(dashLength);

+ 	for (int i = 0; i < dashLength; ++i)

+ 	{

diff --git a/gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-1.patch b/gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-1.patch
new file mode 100644
index 0000000000..4e0f607c6a
--- /dev/null
+++ b/gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-1.patch
@@ -0,0 +1,129 @@
+From 85c0dff3422fa3c26fbc2e8d8561f597ec24bd92 Mon Sep 17 00:00:00 2001
+From: Jean Ghali <jghali@libertysurf.fr>
+Date: Wed, 2 Feb 2022 23:12:52 +0000
+Subject: [PATCH] #16734: Build break with poppler 22.2.0
+
+git-svn-id: svn://scribus.net/trunk/Scribus@24884 11d20701-8431-0410-a711-e3c959e3b870
+---
+ scribus/plugins/import/pdf/slaoutput.cpp | 47 +++++++++++++++++++-----
+ 1 file changed, 37 insertions(+), 10 deletions(-)
+
+diff --git a/scribus/plugins/import/pdf/slaoutput.cpp b/scribus/plugins/import/pdf/slaoutput.cpp
+index 5894bf2ad6..3650c96f52 100644
+--- a/scribus/plugins/import/pdf/slaoutput.cpp
++++ b/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>

+@@ -3027,18 +3032,24 @@ void SlaOutputDev::markPoint(POPPLER_CONST char *name, Dict *properties)
+ void SlaOutputDev::updateFont(GfxState *state)

+ {

+ 	GfxFont *gfxFont;

+-	GfxFontLoc *fontLoc;

++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)

++	std::optional<GfxFontLoc> fontLoc;

++	const GooString * fileName = nullptr;

++	std::unique_ptr<FoFiTrueType> ff;

++#else

++	GfxFontLoc * fontLoc = nullptr;

++	GooString * fileName = nullptr;

++	FoFiTrueType * ff = nullptr;

++#endif

+ 	GfxFontType fontType;

+ 	SlaOutFontFileID *id;

+ 	SplashFontFile *fontFile;

+ 	SplashFontSrc *fontsrc = nullptr;

+-	FoFiTrueType *ff;

+ 	Object refObj, strObj;

+-	GooString *fileName;

+-	char *tmpBuf;

++	char *tmpBuf = nullptr;

+ 	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,9 +3057,6 @@ void SlaOutputDev::updateFont(GfxState *state)
+ 	SplashCoord matrix[6];

+ 

+ 	m_font = nullptr;

+-	fileName = nullptr;

+-	tmpBuf = nullptr;

+-	fontLoc = nullptr;

+ 

+ 	gfxFont = state->getFont();

+ 	if (!gfxFont)

+@@ -3083,7 +3091,11 @@ void SlaOutputDev::updateFont(GfxState *state)
+ 		}

+ 		else

+ 		{ // gfxFontLocExternal

++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)

++			fileName = fontLoc->pathAsGooString();

++#else

+ 			fileName = fontLoc->path;

++#endif

+ 			fontType = fontLoc->fontType;

+ 		}

+ 

+@@ -3136,9 +3148,14 @@ void SlaOutputDev::updateFont(GfxState *state)
+ 				ff = FoFiTrueType::make(tmpBuf, tmpBufLen);

+ 			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

+ 			{

+@@ -3209,8 +3226,13 @@ void SlaOutputDev::updateFont(GfxState *state)
+ 					ff = FoFiTrueType::make(tmpBuf, tmpBufLen);

+ 				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,

+@@ -3247,14 +3269,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();

diff --git a/gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-2.patch b/gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-2.patch
new file mode 100644
index 0000000000..73beac2d70
--- /dev/null
+++ b/gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-2.patch
@@ -0,0 +1,28 @@
+From f75c1613db67f4067643d0218a2db3235e42ec9f Mon Sep 17 00:00:00 2001
+From: Jean Ghali <jghali@libertysurf.fr>
+Date: Thu, 3 Feb 2022 19:46:13 +0000
+Subject: [PATCH] Small update vs latest code in poppler
+
+git-svn-id: svn://scribus.net/trunk/Scribus@24885 11d20701-8431-0410-a711-e3c959e3b870
+---
+ scribus/plugins/import/pdf/slaoutput.cpp | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/scribus/plugins/import/pdf/slaoutput.cpp b/scribus/plugins/import/pdf/slaoutput.cpp
+index 3650c96f52..a6f4e00fa9 100644
+--- a/scribus/plugins/import/pdf/slaoutput.cpp
++++ b/scribus/plugins/import/pdf/slaoutput.cpp
+@@ -3072,10 +3072,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;

+ 		}

+ 

diff --git a/gnu/packages/scribus.scm b/gnu/packages/scribus.scm
index de598ac2f4..ba32361575 100644
--- a/gnu/packages/scribus.scm
+++ b/gnu/packages/scribus.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2018, 2023 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018, 2021, 2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
@@ -57,12 +57,19 @@
        (uri (string-append "mirror://sourceforge/scribus/scribus-devel/"
                            version "/scribus-" version ".tar.xz"))
        (sha256
-        (base32 "0x3bw58v920akca8jxvsfwf468pzjyglk93ay67ph1bdry7nx0a7"))))
+        (base32 "0x3bw58v920akca8jxvsfwf468pzjyglk93ay67ph1bdry7nx0a7"))
+       (patches
+        (search-patches "scribus-1.5.8-poppler-22.2.0-1.patch"
+                        "scribus-1.5.8-poppler-22.2.0-2.patch"
+                        "scribus-1.5.8-poppler-22.03.0.patch"
+                        "scribus-1.5.8-poppler-22.04.0.patch"
+                        "scribus-1.5.8-poppler-22.09.0.patch"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ;no test target
        #:configure-flags
-       '("-DWANT_GRAPHICSMAGICK=1")))
+       '("-DWANT_GRAPHICSMAGICK=1"
+         "-DWANT_CPP17=ON")))
     (inputs
      (list boost
            cairo