Subject: Re: [bug#28954] [PATCH] Update Scribus to 1.5.3. Re-vamp package.

From: Nicolas Goaziou <[email-masked]>
Date: Tue, 24 Oct 2017 17:34:18 +0200

Hello,

Eric Bavier <[email-masked]> writes:

> Remove the blank line between entries.

Fixed.

> Could you include a url where these patches came from in the patches
> themselves?  You mention in the package definition that they came from
> upstream's trunk.
>
> Or, for large patches, some have experimented with using an origin that
> fetches the patch from upstream rather than pulling the patch into
> Guix.

I cloned project's git mirror and picked two specific commits. There is
no proper URL that I know of.

You can see them at

  https://www.scribus.net/websvn/listing.php?repname=Scribus&peg=22197&rev=22154

and

  https://www.scribus.net/websvn/listing.php?repname=Scribus&peg=22197&rev=22155

although not as patch files.

>> +     `(#:tests? #f                      ;no test target
>
> I see no need for this whitespace-only change.

Considering I rewrote a large part of the package definition, I might as
well fix indentation issues. This one is going to bother anyone editing
the package with Emacs. With this change, the line isn't modified when
re-indenting the whole S-exp.

If you are not convinced, consider this to be a nitpicking of mine.

> Could you move this into an origin snippet instead?  We'd want a fix
> like this included in the source when someone uses 'guix build -S
> scribus'

Done.

> Is boost really a native input?  I'm surprised.  Is it used only for
> build-related things?

I don't know. I think Archlinux put that in the build side. However,
I never know when a package is meant to be a native-input or not. I know
the difference between native inputs and inputs, though.

Thank you for the review.

Regards,

-- 
Nicolas Goaziou                                                0x80A93738
>From 6fdd0727a064cd041d3581eed0f8d2a30d1f8bfe Mon Sep 17 00:00:00 2001
From: Nicolas Goaziou <[email-masked]>
Date: Mon, 23 Oct 2017 12:25:13 +0200
Subject: [PATCH] gnu: scribus: Update to 1.5.3.  Re-vamp package.

* gnu/packages/patches/scribus-fix-poppler-0.58-breakage.patch:
* gnu/packages/patches/scribus-fix-poppler-packaging.patch: New files.
* gnu/local.mk (dist_patch_DATA): Register new files.
* gnu/packages/scribus.scm (scribus): Update to 1.5.3.
[input]: Add fontconfig, harfbuzz, hunspell, icu4c, libcdr, libfreehand,
libmspub, librevenge, libvisio, openssl, podofo, poppler.
[native-input]: Move qttools from inputs.  Add boost.
[home-page]: Fix URL.
---
 gnu/local.mk                                       |   2 +
 .../scribus-fix-poppler-0.58-breakage.patch        | 526 +++++++++++++++++++++
 .../patches/scribus-fix-poppler-packaging.patch    |  95 ++++
 gnu/packages/scribus.scm                           |  56 ++-
 4 files changed, 667 insertions(+), 12 deletions(-)
 create mode 100644 gnu/packages/patches/scribus-fix-poppler-0.58-breakage.patch
 create mode 100644 gnu/packages/patches/scribus-fix-poppler-packaging.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 6b70300ff..ff0e74a0b 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1022,6 +1022,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/rxvt-unicode-escape-sequences.patch	\
   %D%/packages/patches/scheme48-tests.patch			\
   %D%/packages/patches/scotch-test-threading.patch		\
+  %D%/packages/patches/scribus-fix-poppler-0.58-breakage.patch  \
+  %D%/packages/patches/scribus-fix-poppler-packaging.patch      \
   %D%/packages/patches/sdl-libx11-1.6.patch			\
   %D%/packages/patches/seq24-rename-mutex.patch			\
   %D%/packages/patches/shishi-fix-libgcrypt-detection.patch	\
diff --git a/gnu/packages/patches/scribus-fix-poppler-0.58-breakage.patch b/gnu/packages/patches/scribus-fix-poppler-0.58-breakage.patch
new file mode 100644
index 000000000..cd95e9b2a
--- /dev/null
+++ b/gnu/packages/patches/scribus-fix-poppler-0.58-breakage.patch
@@ -0,0 +1,526 @@
+diff --git a/scribus/plugins/import/pdf/importpdf.cpp b/scribus/plugins/import/pdf/importpdf.cpp
+index 4c462bead..1c0bd8a88 100644
+--- a/scribus/plugins/import/pdf/importpdf.cpp
++++ b/scribus/plugins/import/pdf/importpdf.cpp
+@@ -22,6 +22,7 @@ for which a new license (GPL+exception) is in place.
+ #include <poppler/PageTransition.h>
+ #include <poppler/ViewerPreferences.h>
+ #include <poppler/poppler-config.h>
++#include <poppler/cpp/poppler-version.h>
+ #include <poppler/SplashOutputDev.h>
+ #include <poppler/splash/SplashBitmap.h>
+ 
+@@ -59,6 +60,12 @@ for which a new license (GPL+exception) is in place.
+ #include "ui/multiprogressdialog.h"
+ #include "ui/propertiespalette.h"
+ 
++#define POPPLER_VERSION_ENCODE(major, minor, micro) (	\
++	  ((major) * 10000)				\
++	+ ((minor) *   100)				\
++	+ ((micro) *     1))
++#define POPPLER_ENCODED_VERSION POPPLER_VERSION_ENCODE(POPPLER_VERSION_MAJOR, POPPLER_VERSION_MINOR, POPPLER_VERSION_MICRO)
++
+ PdfPlug::PdfPlug(ScribusDoc* doc, int flags)
+ {
+ 	tmpSele = new Selection(this, false);
+@@ -507,12 +514,20 @@ bool PdfPlug::convert(const QString& fn)
+ 							{
+ 								for (int i = 0; i < order->getLength (); ++i)
+ 								{
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++									Object orderItem = order->get(i);
++#else
+ 									Object orderItem;
+ 									order->get(i, &orderItem);
++#endif
+ 									if (orderItem.isDict())
+ 									{
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++										Object ref = order->getNF(i);		
++#else
+ 										Object ref;
+ 										order->getNF(i, &ref);
++#endif
+ 										if (ref.isRef())
+ 										{
+ 											OptionalContentGroup *oc = ocg->findOcgByRef(ref.getRef());
+@@ -523,7 +538,9 @@ bool PdfPlug::convert(const QString& fn)
+ 												ocgNames.append(ocgName);
+ 											}
+ 										}
++#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 58, 0)
+ 										ref.free();
++#endif
+ 									}
+ 									else
+ 									{
+@@ -597,39 +614,71 @@ bool PdfPlug::convert(const QString& fn)
+ 							dev->layersSetByOCG = true;
+ 						}
+ #endif
++
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++						Object info = pdfDoc->getDocInfo();
++						if (info.isDict())
++						{
++							Object obj;
++							Dict *infoDict = info.getDict();
++							obj = infoDict->lookup((char*) "Title");
++							if (obj.isString())
++							{
++								m_Doc->documentInfo().setTitle(UnicodeParsedString(obj.getString()));
++							}
++							obj = infoDict->lookup((char*) "Author");
++							if (obj.isString())
++							{
++								m_Doc->documentInfo().setAuthor(UnicodeParsedString(obj.getString()));
++							}
++							obj = infoDict->lookup((char*) "Subject");
++							if (obj.isString())
++							{
++								m_Doc->documentInfo().setSubject(UnicodeParsedString(obj.getString()));
++							}
++							obj = infoDict->lookup((char*) "Keywords");
++							if (obj.isString())
++							{
++								//		s1 = obj.getString();
++								m_Doc->documentInfo().setKeywords(UnicodeParsedString(obj.getString()));
++							}
++						}
++						info = Object();
++#else
+ 						Object info;
+ 						pdfDoc->getDocInfo(&info);
+ 						if (info.isDict())
+ 						{
+ 							Object obj;
+-						//	GooString *s1;
++							//	GooString *s1;
+ 							Dict *infoDict = info.getDict();
+-							if (infoDict->lookup((char*)"Title", &obj )->isString())
++							if (infoDict->lookup((char*)"Title", &obj)->isString())
+ 							{
+-						//		s1 = obj.getString();
++								//		s1 = obj.getString();
+ 								m_Doc->documentInfo().setTitle(UnicodeParsedString(obj.getString()));
+ 								obj.free();
+ 							}
+-							if (infoDict->lookup((char*)"Author", &obj )->isString())
++							if (infoDict->lookup((char*)"Author", &obj)->isString())
+ 							{
+-						//		s1 = obj.getString();
++								//		s1 = obj.getString();
+ 								m_Doc->documentInfo().setAuthor(UnicodeParsedString(obj.getString()));
+ 								obj.free();
+ 							}
+-							if (infoDict->lookup((char*)"Subject", &obj )->isString())
++							if (infoDict->lookup((char*)"Subject", &obj)->isString())
+ 							{
+-						//		s1 = obj.getString();
++								//		s1 = obj.getString();
+ 								m_Doc->documentInfo().setSubject(UnicodeParsedString(obj.getString()));
+ 								obj.free();
+ 							}
+-							if (infoDict->lookup((char*)"Keywords", &obj )->isString())
++							if (infoDict->lookup((char*)"Keywords", &obj)->isString())
+ 							{
+-						//		s1 = obj.getString();
++								//		s1 = obj.getString();
+ 								m_Doc->documentInfo().setKeywords(UnicodeParsedString(obj.getString()));
+ 								obj.free();
+ 							}
+ 						}
+ 						info.free();
++#endif
+ 						if (cropped)
+ 						{
+ 							QRectF crBox = getCBox(contentRect, pageNs[0]);
+@@ -746,8 +795,13 @@ bool PdfPlug::convert(const QString& fn)
+ 									pdfDoc->displayPage(dev, pp, hDPI, vDPI, rotate, useMediaBox, crop, printing, NULL, NULL, dev->annotations_callback, dev);
+ 							}
+ 							PDFPresentationData ef;
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++							Object trans = pdfDoc->getPage(pp)->getTrans();
++							Object *transi = &trans;
++#else
+ 							Object trans;
+ 							Object *transi = pdfDoc->getPage(pp)->getTrans(&trans);
++#endif
+ 							if (transi->isDict())
+ 							{
+ 								m_Doc->pdfOptions().PresentMode = true;
+@@ -793,32 +847,51 @@ bool PdfPlug::convert(const QString& fn)
+ 								delete pgTrans;
+ 							}
+ 							m_Doc->currentPage()->PresentVals = ef;
++#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 58, 0)
+ 							trans.free();
+ 							transi->free();
++#endif
+ 						}
+ 						int numjs = pdfDoc->getCatalog()->numJS();
+ 						if (numjs > 0)
+ 						{
+ 							NameTree *jsNameTreeP = new NameTree();
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++							Object catDict = pdfDoc->getXRef()->getCatalog();
++#else
+ 							Object catDict;
+ 							pdfDoc->getXRef()->getCatalog(&catDict);
++#endif
+ 							if (catDict.isDict())
+ 							{
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++								Object names = catDict.dictLookup("Names");
++#else
+ 								Object names;
+ 								catDict.dictLookup("Names", &names);
++#endif
+ 								if (names.isDict())
+ 								{
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++									Object obj = names.dictLookup("JavaScript");
++									jsNameTreeP->init(pdfDoc->getXRef(), &obj);
++#else
+ 									Object obj;
+ 									names.dictLookup("JavaScript", &obj);
+ 									jsNameTreeP->init(pdfDoc->getXRef(), &obj);
+ 									obj.free();
++#endif
+ 								}
+ 								for (int a = 0; a < numjs; a++)
+ 								{
+ 									m_Doc->JavaScripts.insert(UnicodeParsedString(jsNameTreeP->getName(a)), UnicodeParsedString(pdfDoc->getCatalog()->getJS(a)));
+ 								}
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++								names = catDict.dictLookup("OpenAction");
++#else
+ 								names.free();
+ 								catDict.dictLookup("OpenAction", &names);
++#endif
+ 								if (names.isDict())
+ 								{
+ 									LinkAction *linkAction = NULL;
+@@ -839,9 +912,13 @@ bool PdfPlug::convert(const QString& fn)
+ 										}
+ 									}
+ 								}
++#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 58, 0)
+ 								names.free();
++#endif
+ 							}
++#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 58, 0)
+ 							catDict.free();
++#endif
+ 							delete jsNameTreeP;
+ 						}
+ 						m_Doc->pdfOptions().Version = (PDFOptions::PDFVersion)qMin(15, qMax(13, pdfDoc->getPDFMajorVersion() * 10 + pdfDoc->getPDFMinorVersion()));
+diff --git a/scribus/plugins/import/pdf/slaoutput.cpp b/scribus/plugins/import/pdf/slaoutput.cpp
+index 32cfed101..ffa417a3b 100644
+--- a/scribus/plugins/import/pdf/slaoutput.cpp
++++ b/scribus/plugins/import/pdf/slaoutput.cpp
+@@ -6,6 +6,7 @@ for which a new license (GPL+exception) is in place.
+ */
+ 
+ #include "slaoutput.h"
++#include <poppler/cpp/poppler-version.h>
+ #include <poppler/GlobalParams.h>
+ #include <poppler/poppler-config.h>
+ #include <poppler/FileSpec.h>
+@@ -19,11 +20,49 @@ for which a new license (GPL+exception) is in place.
+ #include "util_math.h"
+ #include <tiffio.h>
+ 
++#define POPPLER_VERSION_ENCODE(major, minor, micro) (	\
++	  ((major) * 10000)				\
++	+ ((minor) *   100)				\
++	+ ((micro) *     1))
++#define POPPLER_ENCODED_VERSION POPPLER_VERSION_ENCODE(POPPLER_VERSION_MAJOR, POPPLER_VERSION_MINOR, POPPLER_VERSION_MICRO)
++
+ LinkSubmitForm::LinkSubmitForm(Object *actionObj)
+ {
+ 	Object obj1, obj2, obj3;
+ 	fileName = NULL;
+ 	m_flags = 0;
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++	if (actionObj->isDict())
++	{
++		obj1 = actionObj->dictLookup("F");
++		if (!obj1.isNull())
++		{
++			if (obj1.isDict())
++			{
++				obj3 = obj1.dictLookup("FS");
++				if (!obj3.isNull())
++				{
++					if (obj3.isName())
++					{
++						char *name = obj3.getName();
++						if (!strcmp(name, "URL"))
++						{
++							obj2 = obj1.dictLookup("F");
++							if (!obj2.isNull())
++								fileName = obj2.getString()->copy();
++						}
++					}
++				}
++			}
++		}
++		obj1 = actionObj->dictLookup("Flags");
++		if (!obj1.isNull())
++		{
++			if (obj1.isNum())
++				m_flags = obj1.getInt();
++		}
++	}
++#else
+ 	if (actionObj->isDict())
+ 	{
+ 		if (!actionObj->dictLookup("F", &obj1)->isNull())
+@@ -54,6 +93,7 @@ LinkSubmitForm::LinkSubmitForm(Object *actionObj)
+ 		}
+ 		obj1.free();
+ 	}
++#endif
+ }
+ 
+ LinkSubmitForm::~LinkSubmitForm()
+@@ -66,11 +106,25 @@ LinkImportData::LinkImportData(Object *actionObj)
+ {
+ 	Object obj1, obj3;
+ 	fileName = NULL;
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++	if (actionObj->isDict())
++	{
++		obj1 = actionObj->dictLookup("F");
++		if (!obj1.isNull())
++		{
++			obj3 = getFileSpecNameForPlatform(&obj1);
++			if (!obj3.isNull())
++			{
++				fileName = obj3.getString()->copy();
++			}
++		}
++	}
++#else
+ 	if (actionObj->isDict())
+ 	{
+ 		if (!actionObj->dictLookup("F", &obj1)->isNull())
+ 		{
+-			if (getFileSpecNameForPlatform (&obj1, &obj3))
++			if (getFileSpecNameForPlatform(&obj1, &obj3))
+ 			{
+ 				fileName = obj3.getString()->copy();
+ 				obj3.free();
+@@ -78,6 +132,7 @@ LinkImportData::LinkImportData(Object *actionObj)
+ 		}
+ 		obj1.free();
+ 	}
++#endif
+ }
+ 
+ LinkImportData::~LinkImportData()
+@@ -256,6 +311,27 @@ LinkAction* SlaOutputDev::SC_getAction(AnnotWidget *ano)
+ 	Object obj;
+ 	Ref refa = ano->getRef();
+ 	Object additionalActions;
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++	obj = xref->fetch(refa.num, refa.gen);
++	if (obj.isDict())
++	{
++		Dict* adic = obj.getDict();
++		additionalActions = adic->lookupNF("A");
++		Object additionalActionsObject = additionalActions.fetch(pdfDoc->getXRef());
++		if (additionalActionsObject.isDict())
++		{
++			Object actionObject = additionalActionsObject.dictLookup("S");
++			if (actionObject.isName("ImportData"))
++			{
++				linkAction = new LinkImportData(&additionalActionsObject);
++			}
++			else if (actionObject.isName("SubmitForm"))
++			{
++				linkAction = new LinkSubmitForm(&additionalActionsObject);
++			}
++		}
++	}
++#else
+ 	Object *act = xref->fetch(refa.num, refa.gen, &obj);
+ 	if (act)
+ 	{
+@@ -283,6 +359,7 @@ LinkAction* SlaOutputDev::SC_getAction(AnnotWidget *ano)
+ 		}
+ 	}
+ 	obj.free();
++#endif
+ 	return linkAction;
+ }
+ 
+@@ -293,6 +370,22 @@ LinkAction* SlaOutputDev::SC_getAdditionalAction(const char *key, AnnotWidget *a
+ 	Object obj;
+ 	Ref refa = ano->getRef();
+ 	Object additionalActions;
++
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++	obj = xref->fetch(refa.num, refa.gen);
++	if (obj.isDict())
++	{
++		Dict* adic = obj.getDict();
++		additionalActions = adic->lookupNF("AA");
++		Object additionalActionsObject = additionalActions.fetch(pdfDoc->getXRef());
++		if (additionalActionsObject.isDict())
++		{
++			Object actionObject = additionalActionsObject.dictLookup(key);
++			if (actionObject.isDict())
++				linkAction = LinkAction::parseAction(&actionObject, pdfDoc->getCatalog()->getBaseURI());
++		}
++	}
++#else
+ 	Object *act = xref->fetch(refa.num, refa.gen, &obj);
+ 	if (act)
+ 	{
+@@ -313,6 +406,7 @@ LinkAction* SlaOutputDev::SC_getAdditionalAction(const char *key, AnnotWidget *a
+ 		}
+ 	}
+ 	obj.free();
++#endif
+ 	return linkAction;
+ }
+ 
+@@ -838,6 +932,33 @@ bool SlaOutputDev::handleWidgetAnnot(Annot* annota, double xCoor, double yCoor,
+ 	{
+ 		Object obj1;
+ 		Ref refa = annota->getRef();
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++		obj1 = xref->fetch(refa.num, refa.gen);
++		if (obj1.isDict())
++		{
++			Dict* dict = obj1.getDict();
++			Object obj2 = dict->lookup("Kids");
++			//childs
++			if (obj2.isArray())
++			{
++				// Load children
++				QList<int> radList;
++				for (int i = 0; i < obj2.arrayGetLength(); i++)
++				{
++					Object childRef = obj2.arrayGetNF(i);
++					if (!childRef.isRef())
++						continue;
++					Object childObj = obj2.arrayGet(i);
++					if (!childObj.isDict())
++						continue;
++					const Ref ref = childRef.getRef();
++					radList.append(ref.num);
++				}
++				QString tmTxt = UnicodeParsedString(annota->getName());
++				m_radioMap.insert(tmTxt, radList);
++			}
++		}
++#else
+ 		Object *act = xref->fetch(refa.num, refa.gen, &obj1);
+ 		if (act && act->isDict())
+ 		{
+@@ -873,6 +994,7 @@ bool SlaOutputDev::handleWidgetAnnot(Annot* annota, double xCoor, double yCoor,
+ 			obj2.free();
+ 		}
+ 		obj1.free();
++#endif
+ 	}
+ 	return retVal;
+ }
+@@ -3007,6 +3129,23 @@ void SlaOutputDev::beginMarkedContent(char *name, Object *dictRef)
+ 		}
+ 		else
+ 		{
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++			dictObj = dictRef->fetch(xref);
++			if (!dictObj.isDict())
++				return;
++			dict = dictObj.getDict();
++			dictType = dict->lookup("Type");
++			if (dictType.isName("OCG"))
++			{
++				oc = contentConfig->findOcgByRef(dictRef->getRef());
++				if (oc)
++				{
++					//					qDebug() << "Begin OCG Content with Name " << UnicodeParsedString(oc->getName());
++					m_doc->setActiveLayer(UnicodeParsedString(oc->getName()));
++					mSte.ocgName = UnicodeParsedString(oc->getName());
++				}
++			}
++#else
+ 			dictRef->fetch(xref, &dictObj);
+ 			if (!dictObj.isDict())
+ 			{
+@@ -3027,6 +3166,7 @@ void SlaOutputDev::beginMarkedContent(char *name, Object *dictRef)
+ 			}
+ 			dictType.free();
+ 			dictObj.free();
++#endif
+ 		}
+ 	}
+ 	m_mcStack.push(mSte);
+@@ -3046,14 +3186,20 @@ void SlaOutputDev::beginMarkedContent(char *name, Dict *properties)
+ 		{
+ 			if (layersSetByOCG)
+ 				return;
+-			Object obj;
+ 			QString lName = QString("Layer_%1").arg(layerNum + 1);
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++			Object obj = properties->lookup((char*) "Title");
++			if (obj.isString())
++				lName = QString(obj.getString()->getCString());
++#else
++			Object obj;
+ 			if (properties->lookup((char*)"Title", &obj))
+ 			{
+ 				if (obj.isString())
+ 					lName =  QString(obj.getString()->getCString());
+ 				obj.free();
+ 			}
++#endif
+ 			for (ScLayers::iterator it = m_doc->Layers.begin(); it != m_doc->Layers.end(); ++it)
+ 			{
+ 				if (it->Name == lName)
+@@ -3066,6 +3212,29 @@ void SlaOutputDev::beginMarkedContent(char *name, Dict *properties)
+ 			if (!firstLayer)
+ 				currentLayer = m_doc->addLayer(lName, true);
+ 			firstLayer = false;
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
++			obj = properties->lookup((char*) "Visible");
++			if (obj.isBool())
++				m_doc->setLayerVisible(currentLayer, obj.getBool());
++			obj = properties->lookup((char*) "Editable");
++			if (obj.isBool())
++				m_doc->setLayerLocked(currentLayer, !obj.getBool());
++			obj = properties->lookup((char*) "Printed");
++			if (obj.isBool())
++				m_doc->setLayerPrintable(currentLayer, obj.getBool());
++			obj = properties->lookup((char*)"Color");
++			if (obj.isArray())
++			{
++				Object obj1;
++				obj1 = obj.arrayGet(0);
++				int r = obj1.getNum() / 256;
++				obj1 = obj.arrayGet(1);
++				int g = obj1.getNum() / 256;
++				obj1 = obj.arrayGet(2);
++				int b = obj1.getNum() / 256;
++				m_doc->setLayerMarker(currentLayer, QColor(r, g, b));
++			}
++#else
+ 			if (properties->lookup((char*)"Visible", &obj))
+ 			{
+ 				if (obj.isBool())
+@@ -3102,6 +3271,7 @@ void SlaOutputDev::beginMarkedContent(char *name, Dict *properties)
+ 				}
+ 				obj.free();
+ 			}
++#endif
+ 		}
+ 	}
+ }
+-- 
+2.14.2
+
diff --git a/gnu/packages/patches/scribus-fix-poppler-packaging.patch b/gnu/packages/patches/scribus-fix-poppler-packaging.patch
new file mode 100644
index 000000000..2659bafa6
--- /dev/null
+++ b/gnu/packages/patches/scribus-fix-poppler-packaging.patch
@@ -0,0 +1,95 @@
+diff --git a/.travis.yml b/.travis.yml
+index 6e9562b2c..f4273227a 100644
+--- a/.travis.yml
++++ b/.travis.yml
+@@ -31,8 +31,8 @@ before_install:
+       libhyphen-dev liblcms2-dev libpodofo-dev libtiff-dev libxml2-dev
+       python-all-dev zlib1g-dev qt58base qt58declarative
+       qt58tools libgraphicsmagick++1-dev
+-      libopenscenegraph-dev libpoppler-dev libcairo2-dev libwpg-dev libmspub-dev
+-      libcdr-dev libvisio-dev libharfbuzz-dev libharfbuzz-icu0
++      libopenscenegraph-dev libpoppler-dev libpoppler-cpp-dev libcairo2-dev libwpg-dev 
++      libmspub-dev libcdr-dev libvisio-dev libharfbuzz-dev libharfbuzz-icu0
+       coreutils binutils python-tk;
+     fi
+ # OSX
+diff --git a/cmake/modules/FindPOPPLER.cmake b/cmake/modules/FindPOPPLER.cmake
+index d684bd503..899284db6 100644
+--- a/cmake/modules/FindPOPPLER.cmake
++++ b/cmake/modules/FindPOPPLER.cmake
+@@ -1,12 +1,16 @@
+ if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.5)
+ 	include(UsePkgConfig)
+ 	PKGCONFIG(poppler _libPopplerIncDir _libPopplerLinkDir _libPopplerLinkFlags _libPopplerCflags)
+-    set(PKG_POPPLER_INCLUDE_DIRS ${_libPopplerIncDir})
+-    set(PKG_POPPLER_LIBRARIES ${_libPopplerLinkDir})
+- else (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.5)
+-    include(FindPkgConfig)
++	set(PKG_POPPLER_INCLUDE_DIRS ${_libPopplerIncDir})
++	set(PKG_POPPLER_LIBRARIES ${_libPopplerLinkDir})
++else (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.5)
++	include(FindPkgConfig)
+ 	pkg_search_module(POPPLER libpoppler>=0.19.0 poppler>=0.19.0)
+- endif (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.5)
++	if (POPPLER_FOUND)
++		pkg_search_module(POPPLER_CPP REQUIRED libpoppler-cpp>=0.19.0 poppler-cpp>=0.19.0)
++	endif(POPPLER_FOUND)
++endif (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.5)
++ 
+ find_path(POPPLER_INCLUDE_DIR 
+   NAMES poppler-config.h
+   PATHS ${PKG_POPPLER_INCLUDE_DIRS} ${POPPLER_INCLUDE_DIRS} /usr/local/include /usr/include
+@@ -14,16 +18,31 @@ find_path(POPPLER_INCLUDE_DIR
+   NO_DEFAULT_PATH
+ )
+ 
++find_path(POPPLER_CPP_INCLUDE_DIR 
++  NAMES poppler-version.h
++  PATHS ${PKG_POPPLER_CPP_INCLUDE_DIRS} ${POPPLER_CPP_INCLUDE_DIRS} /usr/local/include /usr/include
++  PATH_SUFFIXES poppler
++  NO_DEFAULT_PATH
++)
++
+ find_library(POPPLER_LIBRARY
+   NAMES libpoppler poppler
+   PATHS ${PKG_POPPLER_LIBRARIES} ${POPPLER_LIBRARY_DIRS} /usr/local/lib /usr/lib /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}
+   PATH_SUFFIXES poppler
+   NO_DEFAULT_PATH
+ )
++
++find_library(POPPLER_CPP_LIBRARY
++  NAMES libpoppler-cpp poppler-cpp
++  PATHS ${PKG_POPPLER_CPP_LIBRARIES} ${POPPLER_CPP_LIBRARY_DIRS} /usr/local/lib /usr/lib /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}
++  PATH_SUFFIXES poppler
++  NO_DEFAULT_PATH
++)
++
+ if (POPPLER_LIBRARY)
+-  if (POPPLER_INCLUDE_DIR)
++  if (POPPLER_INCLUDE_DIR AND POPPLER_CPP_INCLUDE_DIR)
+ 	set( FOUND_POPPLER 1 )
+-    set( POPPLER_LIBRARIES ${POPPLER_LIBRARY} )
+-    set( POPPLER_INCLUDES ${POPPLER_INCLUDE_DIR})
+-  endif (POPPLER_INCLUDE_DIR)
++    set( POPPLER_LIBRARIES ${POPPLER_LIBRARY} ${POPPLER_CPP_LIBRARY} )
++    set( POPPLER_INCLUDES ${POPPLER_INCLUDE_DIR} ${POPPLER_CPP_INCLUDE_DIR} )
++  endif (POPPLER_INCLUDE_DIR AND POPPLER_CPP_INCLUDE_DIR)
+ endif (POPPLER_LIBRARY)
+diff --git a/scribus/plugins/import/pdf/CMakeLists.txt b/scribus/plugins/import/pdf/CMakeLists.txt
+index cd1610298..85760d96e 100644
+--- a/scribus/plugins/import/pdf/CMakeLists.txt
++++ b/scribus/plugins/import/pdf/CMakeLists.txt
+@@ -2,9 +2,9 @@ include_directories(
+ 	${CMAKE_SOURCE_DIR}
+ 	${CMAKE_SOURCE_DIR}/scribus
+ 	${POPPLER_INCLUDE_DIR}
++	${POPPLER_CPP_INCLUDE_DIR}
+ )
+ 
+-
+ set(IMPORTPDF_PLUGIN_UI_SRC
+ 	pdfimportoptions.ui
+ )
+-- 
+2.14.2
+
diff --git a/gnu/packages/scribus.scm b/gnu/packages/scribus.scm
index d48051ee3..3c5232ec3 100644
--- a/gnu/packages/scribus.scm
+++ b/gnu/packages/scribus.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Ricardo Wurmus <[email-masked]>
 ;;; Copyright © 2016 Efraim Flashner <[email-masked]>
+;;; Copyright © 2017 Nicolas Goaziou <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,53 +25,84 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system cmake)
   #:use-module (gnu packages)
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cups)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages libreoffice)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages pdf)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages qt)
-  #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages tls)
   #:use-module (gnu packages xml))
 
 (define-public scribus
   (package
     (name "scribus")
-    (version "1.5.2")
+    (version "1.5.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/scribus/scribus-devel/"
                                   version "/scribus-" version ".tar.xz"))
               (sha256
                (base32
-                "1xbl7h4x32y2nfhn57ivjziyvlnwadcbizqwfqx5srfsmqiyqppc"))))
+                "0kyp45vidxa3v35ic9592db4zk3m8al26vck38q5v7z14x3hp8vk"))
+              (patches
+               ;; These patches are necessary to build package with Poppler >=
+               ;; 0.58.  They are extracted from trunk and will be included in
+               ;; Scribus 1.5.4.
+               (search-patches "scribus-fix-poppler-0.58-breakage.patch"
+                               "scribus-fix-poppler-packaging.patch"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; Fix typo.  Patch included in trunk.  See
+               ;; <https://bugs.scribus.net/view.php?id=14850>.
+               '(substitute* "cmake/modules/FindLIBPODOFO.cmake"
+                  (("find_package\\(OPENSSL\\)") "find_package(OpenSSL)")))))
     (build-system cmake-build-system)
     (arguments
-     `(#:tests? #f ; no test target
+     `(#:tests? #f                      ;no test target
        #:configure-flags
-       '("-DCMAKE_CXX_FLAGS=-std=gnu++11")))
+       '("-DWANT_GRAPHICSMAGICK=1")))
     (inputs
-     `(("cairo" ,cairo)
+     `(("boost" ,boost)
+       ("cairo" ,cairo)
        ("cups" ,cups)
+       ("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
        ("graphicsmagick" ,graphicsmagick)
+       ("harfbuzz" ,harfbuzz)
+       ("hunspell" ,hunspell)
+       ("icu4c" ,icu4c)
        ("lcms" ,lcms)
+       ("libcdr" ,libcdr)
+       ("libfreehand" ,libfreehand)
        ("libjpeg" ,libjpeg)
+       ("libmspub" ,libmspub)
+       ("libpagemaker" ,libpagemaker)
+       ("librevenge" ,librevenge)
        ("libtiff" ,libtiff)
+       ("libvisio" ,libvisio)
        ("libxml2" ,libxml2)
-       ("python" ,python-2)
-       ("freetype" ,freetype)
+       ("openssl" ,openssl)
+       ("podofo" ,podofo)
+       ("poppler" ,poppler)
+       ("python" ,python-2)             ;need Python library
        ("qtbase" ,qtbase)
        ("qtdeclarative" ,qtdeclarative)
-       ("qttools" ,qttools)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("util-linux" ,util-linux)
-       ("pkg-config" ,pkg-config)))
-    (home-page "http://scribus.net")
+     `(("pkg-config" ,pkg-config)
+       ("qttools" ,qttools)
+       ("util-linux" ,util-linux)))
+    (home-page "https://www.scribus.net")
     (synopsis "Desktop publishing and page layout program")
     (description
      "Scribus is a @dfn{desktop publishing} (DTP) application and can be used
-- 
2.14.2