From: "Bernard Cafarelli" <voyageur@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: app-text/paperwork-backend/files/, app-text/paperwork-backend/
Date: Sun, 4 Feb 2024 23:05:50 +0000 (UTC) [thread overview]
Message-ID: <1707087948.d7930585b2eaf14c6e93263898b0f311ce12969a.voyageur@gentoo> (raw)
commit: d7930585b2eaf14c6e93263898b0f311ce12969a
Author: Bernard Cafarelli <voyageur <AT> gentoo <DOT> org>
AuthorDate: Sun Feb 4 23:05:08 2024 +0000
Commit: Bernard Cafarelli <voyageur <AT> gentoo <DOT> org>
CommitDate: Sun Feb 4 23:05:48 2024 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d7930585
app-text/paperwork-backend: fix PDF file segfault
Backport from upstream workaround
Closes: https://bugs.gentoo.org/765526
Signed-off-by: Bernard Cafarelli <voyageur <AT> gentoo.org>
.../paperwork-backend-2.2.1-cairo_workaround.patch | 52 ++++++++++++++++++
.../paperwork-backend-2.2.1-r1.ebuild | 63 ++++++++++++++++++++++
2 files changed, 115 insertions(+)
diff --git a/app-text/paperwork-backend/files/paperwork-backend-2.2.1-cairo_workaround.patch b/app-text/paperwork-backend/files/paperwork-backend-2.2.1-cairo_workaround.patch
new file mode 100644
index 000000000000..01eb2a6154b0
--- /dev/null
+++ b/app-text/paperwork-backend/files/paperwork-backend-2.2.1-cairo_workaround.patch
@@ -0,0 +1,52 @@
+From c9430b844fbcedc9119e3d464f5f0c85feb7b197 Mon Sep 17 00:00:00 2001
+From: Jerome Flesch <jflesch@openpaper.work>
+Date: Sun, 4 Feb 2024 20:33:27 +0100
+Subject: [PATCH] Backend/docexport PDF: Workaround Cairo bug that causes
+ occasional crashes when exporting to generated PDF.
+
+Closes #942
+---
+ .../src/paperwork_backend/docexport/pdf.py | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/paperwork-backend/src/paperwork_backend/docexport/pdf.py b/paperwork-backend/src/paperwork_backend/docexport/pdf.py
+index 160e60710..befded73c 100644
+--- a/paperwork-backend/src/paperwork_backend/docexport/pdf.py
++++ b/paperwork-backend/src/paperwork_backend/docexport/pdf.py
+@@ -115,6 +115,8 @@ class PdfCreator(object):
+ )
+ self.pdf_context = cairo.Context(self.pdf_surface)
+
++ self.gc_protection = [] # WORKAROUND(Jflesch): Cairo crash
++
+ def set_page_size(self, img_size):
+ # portrait or landscape
+ if (img_size[0] < img_size[1]):
+@@ -187,6 +189,16 @@ class PdfCreator(object):
+ "pillow_to_surface", img,
+ intermediate="jpeg", quality=int(self.quality * 100)
+ )
++ # WORKAROUND(Jflesch):
++ # If Cairo supports JPEG embedding, we use
++ # cairo.ImageSurface.set_mime_data() instead of the usual Cairo
++ # surface functions to draw the image. It seems this function does
++ # not increment the ref counter of the surface object
++ # --> the Python GC tends to collect it while Cairo is still going
++ # to use it to generate the PDF.
++ # --> we have to keep a reference on it ourselves, until the page has
++ # been generated.
++ self.gc_protection.append(img_surface)
+
+ self.pdf_context.save()
+ try:
+@@ -199,6 +211,7 @@ class PdfCreator(object):
+
+ def next_page(self):
+ self.pdf_context.show_page()
++ self.gc_protection = [] # WORKAROUND(Jflesch): Cairo crash
+
+ def finish(self):
+ self.pdf_surface.flush()
+--
+GitLab
+
diff --git a/app-text/paperwork-backend/paperwork-backend-2.2.1-r1.ebuild b/app-text/paperwork-backend/paperwork-backend-2.2.1-r1.ebuild
new file mode 100644
index 000000000000..bb7a9c75061b
--- /dev/null
+++ b/app-text/paperwork-backend/paperwork-backend-2.2.1-r1.ebuild
@@ -0,0 +1,63 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{9..12} )
+
+inherit distutils-r1
+
+DESCRIPTION="Backend part of Paperwork (Python API, no UI)"
+HOMEPAGE="https://gitlab.gnome.org/World/OpenPaperwork"
+# Update from release hash at:
+# https://gitlab.gnome.org/World/OpenPaperwork/paperwork/-/tags
+REL_HASH="0bea4054"
+SRC_URI="https://gitlab.gnome.org/World/OpenPaperwork/paperwork/-/archive/${PV}/paperwork-${PV}.tar.bz2
+ https://download.openpaper.work/data/paperwork/master_${REL_HASH}/data.tar.gz -> paperwork-data-${PV}.tar.gz"
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND="
+ app-text/openpaperwork-core[${PYTHON_USEDEP}]
+ app-text/openpaperwork-gtk[${PYTHON_USEDEP}]
+ app-text/poppler[introspection]
+ dev-python/distro[${PYTHON_USEDEP}]
+ dev-python/pillow[${PYTHON_USEDEP}]
+ dev-python/psutil[${PYTHON_USEDEP}]
+ dev-python/pycairo[${PYTHON_USEDEP}]
+ dev-python/pycountry[${PYTHON_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ dev-python/termcolor[${PYTHON_USEDEP}]
+ dev-python/whoosh[${PYTHON_USEDEP}]
+ sci-libs/scikit-learn[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ ${RDEPEND}
+ dev-python/setuptools-scm[${PYTHON_USEDEP}]
+ sys-apps/which
+ sys-devel/gettext
+ test? (
+ dev-python/libpillowfight[${PYTHON_USEDEP}]
+ media-libs/libinsane
+ )
+"
+S=${WORKDIR}/paperwork-${PV}/${PN}
+
+distutils_enable_tests unittest
+
+export SETUPTOOLS_SCM_PRETEND_VERSION=${PV}
+
+src_prepare() {
+ default
+ cd "${WORKDIR}"/paperwork-${PV} || die
+ eapply "${FILESDIR}"/${P}-cairo_workaround.patch
+}
+
+python_compile() {
+ emake l10n_compile
+
+ distutils-r1_python_compile
+}
next reply other threads:[~2024-02-04 23:05 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-04 23:05 Bernard Cafarelli [this message]
-- strict thread matches above, loose matches on Subject: below --
2024-05-06 23:05 [gentoo-commits] repo/gentoo:master commit in: app-text/paperwork-backend/files/, app-text/paperwork-backend/ Bernard Cafarelli
2024-06-14 10:47 Bernard Cafarelli
2024-09-26 9:57 Bernard Cafarelli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1707087948.d7930585b2eaf14c6e93263898b0f311ce12969a.voyageur@gentoo \
--to=voyageur@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox