commit:     534905bcf0a78f7604661980d91e15e9505948d5
Author:     Eli Schwartz <eschwartz <AT> gentoo <DOT> org>
AuthorDate: Fri Aug 23 07:05:41 2024 +0000
Commit:     Eli Schwartz <eschwartz <AT> gentoo <DOT> org>
CommitDate: Fri Aug 23 07:19:24 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=534905bc

app-text/calibre: add 7.17.0

There have been some updates to the binary builds for Qt stuff that
basically amount to building PyQt6 with USE=speech. It's not yet active
in live codepaths, so patching it out of the testsuite for now. Will
keep an eye on it in the future with attention paid to the
practicalities of USE=speech. Recheck in future version bumps...

Signed-off-by: Eli Schwartz <eschwartz <AT> gentoo.org>

 app-text/calibre/Manifest                          |   2 +
 app-text/calibre/calibre-7.17.0.ebuild             | 246 +++++++++++++++++++++
 .../files/calibre-7.17.0-qt-texttospeech.patch     |  38 ++++
 3 files changed, 286 insertions(+)

diff --git a/app-text/calibre/Manifest b/app-text/calibre/Manifest
index 2e023d6be5a8..db0341d892c8 100644
--- a/app-text/calibre/Manifest
+++ b/app-text/calibre/Manifest
@@ -2,3 +2,5 @@ DIST calibre-5.44.0.tar.xz 41015696 BLAKE2B 
c7053e728da20fccfa981ed4f56e24a4d5b3
 DIST calibre-5.44.0.tar.xz.sig 566 BLAKE2B 
413b95855d79bdb5b17ca5d760f834006797b4d3e413604f27d351a3392e16d647e772dc063306bf973e1156c34f68cb38152a66164bca849ebed5484e7f6065
 SHA512 
59957bf35a73f218241bf76cc86994d5af87cea11d3b0800e83f157bf0b2cfcaf4b6c1314562e74a1141d0c167fdb1619cb9a90e93b67f55dd55ceed77045059
 DIST calibre-7.16.0.tar.xz 44833684 BLAKE2B 
2b609a0d014d43998f693a69c10f6d8b0165bf97f8c9d388cf4e1e398e7254b300d53b26e5ec24af651e03bb625bb088331dc77aa2ed6edea13de2beb0e75339
 SHA512 
5ea11badd972422299ce143e2aa33f58f7abcfd2837acba47d2a7aa6f0997a711245273205ed043c783e5e82bbaaf7cab44e5c03c00e274a03a4ba29be53a708
 DIST calibre-7.16.0.tar.xz.sig 566 BLAKE2B 
1d09e8dd49ad53c88632dc23573fa9cd5403d45a308598ac4ed7d4f2dd5a84cc3ae6812ac652ff4a98fc5d67589ad1584411f7746b6b98468bf03a35a0585de6
 SHA512 
91f3897d95d234a8d673006273974d32cb6c5aa4953d247700d6d89d511c9b1450dc8e222eabf5d1e4d82de206e425ee440defaff38d1ca83efdbf4bcada7c7c
+DIST calibre-7.17.0.tar.xz 45053400 BLAKE2B 
93149c4fab7a25e1239c4b8c72b766e5ffc71eb27d1206225bc8436f26d2c76f9323e0f0f63d8444291f02a5a7e94d4500715398a71df4ab2a5b16e325e7be73
 SHA512 
916337dc425916110528828bac0fbdc24db9496362c1e8dad67eafdfda42b90174fb6a4352400cd34af0f11268aabed82b166b3e4875f59e317359079e10bf3b
+DIST calibre-7.17.0.tar.xz.sig 566 BLAKE2B 
c041904919ef300f51ba7363daf7d2bc70fc8bb819ffef157e53c28f91b9716be56b1e95465180ecd67069241a5810b70ac08027f4837426a5426792fab05e49
 SHA512 
af88bcbf394ac6ec68c40d661545a17e956b31dd7797d1cc8490e090437206902a64c7a642cf1e34184e379c79066843959e1459eb1836bddbd615febbc85c07

diff --git a/app-text/calibre/calibre-7.17.0.ebuild 
b/app-text/calibre/calibre-7.17.0.ebuild
new file mode 100644
index 000000000000..ba0528419925
--- /dev/null
+++ b/app-text/calibre/calibre-7.17.0.ebuild
@@ -0,0 +1,246 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+PYTHON_REQ_USE="sqlite,ssl"
+
+inherit edo toolchain-funcs python-single-r1 qmake-utils verify-sig xdg
+
+DESCRIPTION="Ebook management application"
+HOMEPAGE="https://calibre-ebook.com/";
+SRC_URI="
+       https://download.calibre-ebook.com/${PV}/${P}.tar.xz
+       verify-sig? ( https://calibre-ebook.com/signatures/${P}.tar.xz.sig )
+"
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/kovidgoyal.gpg
+
+LICENSE="
+       GPL-3+
+       GPL-3
+       GPL-2+
+       GPL-2
+       GPL-1+
+       LGPL-3+
+       LGPL-2.1+
+       LGPL-2.1
+       BSD
+       MIT
+       Old-MIT
+       Apache-2.0
+       public-domain
+       || ( Artistic GPL-1+ )
+       CC-BY-3.0
+       OFL-1.1
+       PSF-2
+"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+IUSE="+font-subsetting ios speech +system-mathjax test +udisks unrar"
+
+RESTRICT="!test? ( test )"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+# Qt slotted dependencies are used because the libheadless.so plugin links to
+# QT_*_PRIVATE_ABI. It only uses core/gui/dbus.
+COMMON_DEPEND="${PYTHON_DEPS}
+       app-i18n/uchardet
+       >=app-text/hunspell-1.7:=
+       >=app-text/podofo-0.10.0:=
+       app-text/poppler[utils]
+       dev-libs/hyphen:=
+       >=dev-libs/icu-57.1:=
+       dev-libs/openssl:=
+       dev-libs/snowball-stemmer:=
+       $(python_gen_cond_dep '
+               >=dev-python/apsw-3.25.2_p1[${PYTHON_USEDEP}]
+               dev-python/beautifulsoup4[${PYTHON_USEDEP}]
+               >=dev-python/css-parser-1.0.4[${PYTHON_USEDEP}]
+               dev-python/dnspython[${PYTHON_USEDEP}]
+               >=dev-python/feedparser-5.2.1[${PYTHON_USEDEP}]
+               >=dev-python/html2text-2019.8.11[${PYTHON_USEDEP}]
+               >=dev-python/html5-parser-0.4.9[${PYTHON_USEDEP}]
+               dev-python/jeepney[${PYTHON_USEDEP}]
+               >=dev-python/lxml-3.8.0[${PYTHON_USEDEP}]
+               dev-python/lxml-html-clean[${PYTHON_USEDEP}]
+               >=dev-python/markdown-3.0.1[${PYTHON_USEDEP}]
+               >=dev-python/mechanize-0.3.5[${PYTHON_USEDEP}]
+               >=dev-python/msgpack-0.6.2[${PYTHON_USEDEP}]
+               >=dev-python/netifaces-0.10.5[${PYTHON_USEDEP}]
+               
>=dev-python/pillow-3.2.0[jpeg,truetype,webp,zlib,${PYTHON_USEDEP}]
+               >=dev-python/psutil-4.3.0[${PYTHON_USEDEP}]
+               >=dev-python/pychm-0.8.6[${PYTHON_USEDEP}]
+               >=dev-python/pygments-2.3.1[${PYTHON_USEDEP}]
+               >=dev-python/python-dateutil-2.5.3[${PYTHON_USEDEP}]
+               
dev-python/PyQt6[gui,network,opengl,printsupport,quick,svg,widgets,${PYTHON_USEDEP}]
+               dev-python/PyQt6-WebEngine[widgets,${PYTHON_USEDEP}]
+               dev-python/regex[${PYTHON_USEDEP}]
+               dev-python/xxhash[${PYTHON_USEDEP}]
+               >=dev-python/zeroconf-0.75.0[${PYTHON_USEDEP}]
+       ')
+       dev-qt/qtbase:6=[gui,widgets]
+       dev-qt/qtimageformats:6
+       dev-util/desktop-file-utils
+       dev-util/gtk-update-icon-cache
+       media-fonts/liberation-fonts
+       media-libs/fontconfig:=
+       >=media-libs/freetype-2:=
+       >=media-libs/libmtp-1.1.11:=
+       >=media-gfx/optipng-0.7.6
+       virtual/libusb:1=
+       x11-misc/shared-mime-info
+       >=x11-misc/xdg-utils-1.0.2-r2
+       font-subsetting? ( $(python_gen_cond_dep 
'dev-python/fonttools[${PYTHON_USEDEP}]') )
+       ios? (
+               >=app-pda/usbmuxd-1.0.8
+               >=app-pda/libimobiledevice-1.2.0
+       )
+       speech? ( $(python_gen_cond_dep 
'app-accessibility/speech-dispatcher[python,${PYTHON_USEDEP}]') )
+       system-mathjax? ( >=dev-libs/mathjax-3:= )
+       udisks? ( virtual/libudev )
+       unrar? ( dev-python/unrardll )
+"
+RDEPEND="${COMMON_DEPEND}
+       udisks? ( sys-fs/udisks:2 )"
+DEPEND="${COMMON_DEPEND}
+       test? ( $(python_gen_cond_dep 
'>=dev-python/chardet-3.0.3[${PYTHON_USEDEP}]') )
+"
+BDEPEND="$(python_gen_cond_dep '
+               >=dev-python/PyQt-builder-1.10.3[${PYTHON_USEDEP}]
+               >=dev-python/sip-5[${PYTHON_USEDEP}]
+       ')
+       virtual/pkgconfig
+       system-mathjax? ( dev-lang/rapydscript-ng )
+       verify-sig? ( sec-keys/openpgp-keys-kovidgoyal )
+"
+
+PATCHES=(
+       # Skip calling a binary (JxrDecApp) from libjxr which is used for tests
+       # We don't (yet?) package libjxr and it seems to be dead upstream
+       # (last commit in 2017)
+       "${FILESDIR}/${PN}-7.0.0-jxr-test.patch"
+       # Don't test availability of PyQt6 tts module, which is not yet used.
+       # Recheck this with future version bumps...
+       "${FILESDIR}"/calibre-7.17.0-qt-texttospeech.patch
+)
+
+src_prepare() {
+       default
+
+       # Warning:
+       #
+       # While it might be rather tempting to add yet another sed here,
+       # please don't. There have been several bugs in Gentoo's packaging
+       # of calibre from seds-which-become-stale. Please consider
+       # creating a patch instead, but in any case, run the test suite
+       # and ensure it passes.
+       #
+       # If in doubt about a problem, checking Fedora's packaging is 
recommended.
+
+       # Disable unnecessary privilege dropping for bug #287067.
+       sed -e "s:if os.geteuid() == 0:if False and os.geteuid() == 0:" \
+               -i setup/install.py || die "sed failed to patch install.py"
+
+       # This is only ever used at build time. It contains a small embedded 
copy
+       # of the rapydscript-ng compiler usable inside of qtwebengine, if you 
don't
+       # have rapydscript-ng (a nodejs package) itself installed. Its only 
purpose
+       # is to build some resources that come bundled in dist tarballs 
already...
+       # and which we may also need to regenerate e.g. to use system-mathjax.
+       #
+       # However, running qtwebengine violates the portage sandbox (among other
+       # things, it tries to create directories in /usr! amazing) so this is a
+       # wash anyway. The only real solution here is to package rapydscript-ng.
+       #
+       # We do not need it at build time, and *no one* needs it at install 
time.
+       # Delete the cruft.
+       rm -r resources/rapydscript/ || die
+}
+
+src_compile() {
+       # TODO: get qmake called by setup.py to respect CC and CXX too
+       tc-export CC CXX
+
+       # bug 821871
+       local MY_LIBDIR="${ESYSROOT}/usr/$(get_libdir)"
+       export FT_LIB_DIR="${MY_LIBDIR}" HUNSPELL_LIB_DIR="${MY_LIBDIR}" 
PODOFO_LIB_DIR="${MY_LIBDIR}"
+       export QMAKE="$(qt6_get_bindir)/qmake"
+
+       edo ${EPYTHON} setup.py build
+       edo ${EPYTHON} setup.py gui
+
+       # A few different resources are bundled in the distfile by default, 
because
+       # not all systems necessarily have them. We un-vendor them, using the
+       # upstream integrated approach if possible. See setup/revendor.py and
+       # consider migrating other resources to this if they do not use it, in
+       # *preference* over manual rm'ing.
+       edo ${EPYTHON} setup.py liberation_fonts \
+               --path-to-liberation_fonts 
"${EPREFIX}"/usr/share/fonts/liberation-fonts \
+               --system-liberation_fonts
+       if use system-mathjax; then
+               edo ${EPYTHON} setup.py mathjax --path-to-mathjax 
"${EPREFIX}"/usr/share/mathjax --system-mathjax
+               edo ${EPYTHON} setup.py rapydscript
+       fi
+}
+
+src_test() {
+       # Skipped tests:
+       local _test_excludes=(
+               # unpackaged Python dependency: py7zr
+               7z
+               # unpackaged Python dependency: pyzstd
+               test_zstd
+               # tests if a completely unused module is bundled
+               pycryptodome
+
+               $(usev !speech speech_dispatcher)
+               $(usev !unrar test_unrar)
+
+               # undocumented reasons
+               test_mem_leaks
+               test_searching
+       )
+
+       edo ${PYTHON} setup.py test 
"${_test_excludes[@]/#/--exclude-test-name=}"
+}
+
+src_install() {
+       # Bug #352625 - Some LANGUAGE values can trigger the following 
ValueError:
+       #   File "/usr/lib/python2.6/locale.py", line 486, in getdefaultlocale
+       #    return _parse_localename(localename)
+       #  File "/usr/lib/python2.6/locale.py", line 418, in _parse_localename
+       #    raise ValueError, 'unknown locale: %s' % localename
+       #ValueError: unknown locale: 46
+       export -n LANG LANGUAGE ${!LC_*}
+       export LC_ALL=C.utf8 # bug #709682
+
+       # Bug #295672 - Avoid sandbox violation in ~/.config by forcing
+       # variables to point to our fake temporary $HOME.
+       export HOME="${T}/fake_homedir"
+       export CALIBRE_CONFIG_DIRECTORY="${HOME}/.config/calibre"
+       mkdir -p "${CALIBRE_CONFIG_DIRECTORY}" || die
+
+       addpredict /dev/dri #665310
+
+       # If this directory doesn't exist, zsh completion won't install
+       dodir /usr/share/zsh/site-functions
+
+       edo "${PYTHON}" setup.py install \
+               --staging-root="${ED}/usr" \
+               --prefix="${EPREFIX}/usr" \
+               --libdir="${EPREFIX}/usr/$(get_libdir)" \
+               --staging-libdir="${ED}/usr/$(get_libdir)" \
+               
--system-plugins-location="${EPREFIX}/usr/share/calibre/system-plugins"
+
+       cp -r man-pages/ "${ED}"/usr/share/man || die
+
+       find "${ED}"/usr/share -type d -empty -delete || die
+
+       python_fix_shebang "${ED}/usr/bin"
+
+       python_optimize "${ED}"/usr/$(get_libdir)/calibre 
"${D}/$(python_get_sitedir)"
+
+       newinitd "${FILESDIR}"/calibre-server-3.init calibre-server
+       newconfd "${FILESDIR}"/calibre-server-3.conf calibre-server
+}

diff --git a/app-text/calibre/files/calibre-7.17.0-qt-texttospeech.patch 
b/app-text/calibre/files/calibre-7.17.0-qt-texttospeech.patch
new file mode 100644
index 000000000000..ff50735e4788
--- /dev/null
+++ b/app-text/calibre/files/calibre-7.17.0-qt-texttospeech.patch
@@ -0,0 +1,38 @@
+From 6d87aa054724155c9413e5692fa1f242f9cc0efc Mon Sep 17 00:00:00 2001
+From: Eli Schwartz <[email protected]>
+Date: Fri, 23 Aug 2024 02:20:00 -0400
+Subject: [PATCH] tests: delete qt TTS assert which is not yet used
+
+It will be used in future versions of calibre, and should likely be
+gated on USE=speech.
+---
+ src/calibre/test_build.py | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/src/calibre/test_build.py b/src/calibre/test_build.py
+index 4f19363680..898caad665 100644
+--- a/src/calibre/test_build.py
++++ b/src/calibre/test_build.py
+@@ -314,7 +314,7 @@ def test_apsw(self):
+     def test_qt(self):
+         if is_sanitized:
+             raise unittest.SkipTest('Skipping Qt build test as sanitizer is 
enabled')
+-        from qt.core import QApplication, QFontDatabase, QImageReader, 
QLoggingCategory, QNetworkAccessManager, QSslSocket, QTextToSpeech, QTimer
++        from qt.core import QApplication, QFontDatabase, QImageReader, 
QLoggingCategory, QNetworkAccessManager, QSslSocket, QTimer
+         QLoggingCategory.setFilterRules('''qt.webenginecontext.debug=true''')
+         if hasattr(os, 'geteuid') and os.geteuid() == 0:
+             # likely a container build, webengine cannot run as root with 
sandbox
+@@ -348,10 +348,6 @@ def test_qt(self):
+         try:
+             ensure_app()
+             self.assertGreaterEqual(len(QFontDatabase.families()), 5, 'The 
QPA headless plugin is not able to locate enough system fonts via fontconfig')
+-            available_tts_engines = tuple(x for x in 
QTextToSpeech.availableEngines() if x != 'mock')
+-            self.assertTrue(available_tts_engines)
+-
+-            self.assertGreaterEqual
+             from calibre.ebooks.oeb.transforms.rasterize import rasterize_svg
+             img = rasterize_svg(as_qimage=True)
+             self.assertFalse(img.isNull())
+-- 
+2.44.2
+

Reply via email to