From 8004a2f6abd62cae53ad41a7bd42b9797d6a1564 Mon Sep 17 00:00:00 2001 From: saundersp Date: Tue, 25 Nov 2025 17:36:04 +0100 Subject: [PATCH] Added app-text/calibre-8.15.0 --- app-text/calibre/Manifest | 8 + app-text/calibre/calibre-8.15.0.ebuild | 256 ++++++++++++++++++ .../files/calibre-7.0.0-jxr-test.patch | 27 ++ .../calibre/files/calibre-8.9.0-piper.patch | 47 ++++ app-text/calibre/files/calibre-server-3.conf | 13 + app-text/calibre/files/calibre-server-3.init | 58 ++++ app-text/calibre/metadata.xml | 17 ++ metadata/md5-cache/app-text/calibre-8.15.0 | 18 ++ 8 files changed, 444 insertions(+) create mode 100644 app-text/calibre/Manifest create mode 100644 app-text/calibre/calibre-8.15.0.ebuild create mode 100644 app-text/calibre/files/calibre-7.0.0-jxr-test.patch create mode 100644 app-text/calibre/files/calibre-8.9.0-piper.patch create mode 100644 app-text/calibre/files/calibre-server-3.conf create mode 100644 app-text/calibre/files/calibre-server-3.init create mode 100644 app-text/calibre/metadata.xml create mode 100644 metadata/md5-cache/app-text/calibre-8.15.0 diff --git a/app-text/calibre/Manifest b/app-text/calibre/Manifest new file mode 100644 index 0000000..3d32214 --- /dev/null +++ b/app-text/calibre/Manifest @@ -0,0 +1,8 @@ +AUX calibre-7.0.0-jxr-test.patch 935 BLAKE2B bc38ea2f2d10ec4859ee03ab5d18048df4cf0af5ce4076efc013013bc975966390d618c43ce621675e3b8ee8f929bfaebaa72cf6bb7d8dea544bca77d9772b60 SHA512 db8da42fdcf5b5d5dfad35c128e394cf8f51e57dda6cd1a482803429738515fc1a8b338c711679a11acb93678f35f10883e1bf282e1443ccaafe2eb470fbbfee +AUX calibre-8.9.0-piper.patch 1592 BLAKE2B e35b1f500e16f00343ff43115bdca2f13e1c2ebffa0c1c0a85ac1a2e8baf0499f2973cb64414bb696152c79ad68434ccc934affbd260616cd5d36a668bca94eb SHA512 1991810c4cba18301689b8d49ebe21d295bf7507ebbefed209b5dd979077f9fceb7a625a22cfc9565320c8dbcaaaa52d22216ab4eca4f9f9ae922793e390ba51 +AUX calibre-server-3.conf 541 BLAKE2B 06593633721e6adf2cf2077dffa83953eea46ccdcdc857ad468a9b74788326e9424f6ab9058be344dbbac8e49d343f5a1e53ddb486f2018b77319a7f8f713cf4 SHA512 12ef793a5b6ffd4413f780a13cad63927a95f15d17d85d4229eb5005ead68e51779abb822f9898ab5ae8c2094affeec1f9e85c34f109499739e6726b7641542a +AUX calibre-server-3.init 1796 BLAKE2B f87d785d6f6fc10fa648d40944ec8538027854bb872d9a3be6b5b35b0abf3cda1e4e93874a9422914da5eb4287f193459733956e3f1e25e61bec0c214c552c99 SHA512 88110ded1b9c6cf8d3bfc3d5889654f77578f9d299e88daea9023767b930082e00fbddbb92a6e43c46d900248f3684232d93396ec1d0e784c7ec14b44783f98a +DIST calibre-8.15.0.tar.xz 45759104 BLAKE2B ce8ca1a0bd9cbbb916a993b4c139efd1ff49d697aef3088322f06f4bac85d9a9e5d648a664fd75ef621c1e6021a67d6696e2a2a3b58a73651097bf3c6a774ca9 SHA512 7713ae8304e887dad320cddd6eceeec79bdb9de88e23ed2d50c0d2da429e25b2d761646259ffda47682ce07ed556bd47129561bd193c7953bd72867b98b0674c +DIST calibre-8.15.0.tar.xz.sig 566 BLAKE2B e994b448ef1f08051d2a4ce254a83d37ec6fe3c99f416c0203b892ac35ee4a26151f07ea838929ed91e4024b6688bff5c26aec587bb39e9bdab185970bced520 SHA512 faff5e863c92e537b19e651aa9082359e530ff3c6412954c6eee339fa5a16614e16e3ee489f2c67e64a08a1c4db55c5dbaae4466caeb694aa8dd63093fd25834 +EBUILD calibre-8.15.0.ebuild 8366 BLAKE2B 9edb871823bbcabb40e18384b529e9af6f04c5e2bfbdd290c4ce04baa11ec810fe787e5143dca80845a9e88b90c8ca6d25ef5c2f33f3c437a34c1efc526f527f SHA512 e78e357014e8e3177831c424576a024956a7059b9c7351b59994e55e2c3cbc9681e6c70022a01822e703eeb66fadf7e325bfc009e7cbe5df96b75a0f420da439 +MISC metadata.xml 662 BLAKE2B 102f4f537d2127c42311951cd5ca73e41a0ab948d85a037ed24c876382ffe628070d96b7310a337ac8efac61b32fd225b840b20fbe3f51e4cbf48ce073e95e7c SHA512 9929c8d731dfa112cf4b2ca67ddb269360a4f2cd84d9c0c0df6adfa2efe04669e1a45d9d7011f1dffe9e7ebf185e348478c2a1afa2bf2351e69b4f7e7c14da32 diff --git a/app-text/calibre/calibre-8.15.0.ebuild b/app-text/calibre/calibre-8.15.0.ebuild new file mode 100644 index 0000000..44add51 --- /dev/null +++ b/app-text/calibre/calibre-8.15.0.ebuild @@ -0,0 +1,256 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +PYTHON_COMPAT=( python3_{11..13} ) +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/pykakasi[${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 + >=media-video/ffmpeg-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}]') + dev-python/pyqt6[multimedia,speech] + ) + 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" + "${FILESDIR}/${PN}-8.9.0-piper.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 privilege dropping for bug #287067 and generally because desktop + # login user != portage. + sed -e "s:SUDO_:__DISABLED_SUDO_:" \ + -i setup/__init__.py || die + + # 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 + # unpackaged TTS backend (optional at runtime): https://github.com/rhasspy/piper + piper + # tests if a completely unused module is bundled + pycryptodome + + $(usev !speech speech_dispatcher) + $(usev !unrar test_unrar) + + # undocumented reasons + test_mem_leaks + test_searching + ) + + # Some of these tests weren't practical to split out into distinct tests, so + # have a different control mechanism + use speech || export SKIP_SPEECH_TESTS=1 + + 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.UTF-8 # 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.0.0-jxr-test.patch b/app-text/calibre/files/calibre-7.0.0-jxr-test.patch new file mode 100644 index 0000000..c37d0cd --- /dev/null +++ b/app-text/calibre/files/calibre-7.0.0-jxr-test.patch @@ -0,0 +1,27 @@ +diff --git a/src/calibre/utils/img.py b/src/calibre/utils/img.py +index b61627b63e..ff51c76e75 100644 +--- a/src/calibre/utils/img.py ++++ b/src/calibre/utils/img.py +@@ -129,8 +129,6 @@ def image_from_data(data): + i = QImage() + if not i.loadFromData(data): + q = what(None, data) +- if q == 'jxr': +- return load_jxr_data(data) + raise NotImage(f'Not a valid image (detected type: {q})') + return i + +@@ -693,13 +691,6 @@ def test(): # {{{ + despeckle_image(img) + remove_borders_from_image(img) + image_to_data(img, fmt='GIF') +- p = subprocess.Popen([get_exe_path('JxrDecApp'), '-h'], +- creationflags=subprocess.DETACHED_PROCESS if iswindows else 0, +- stdout=subprocess.PIPE) +- raw, _ = p.communicate() +- p.wait() +- if b'JPEG XR Decoder Utility' not in raw: +- raise SystemExit('Failed to run JxrDecApp') + # }}} + + diff --git a/app-text/calibre/files/calibre-8.9.0-piper.patch b/app-text/calibre/files/calibre-8.9.0-piper.patch new file mode 100644 index 0000000..149024b --- /dev/null +++ b/app-text/calibre/files/calibre-8.9.0-piper.patch @@ -0,0 +1,47 @@ +piper deps aren't packaged yet, and should be USE conditional anyway + +https://bugs.gentoo.org/961974 + +diff --git a/setup/extensions.json b/setup/extensions.json +index b39ce6d..c105031 100644 +--- a/setup/extensions.json ++++ b/setup/extensions.json +@@ -134,14 +134,6 @@ + "error": "!podofo_error", + "needs_c++": "17" + }, +- { +- "name": "piper", +- "sources": "calibre/utils/tts/piper.cpp", +- "needs_c++": "17", +- "libraries": "!piper_libs", +- "lib_dirs": "!piper_lib_dirs", +- "inc_dirs": "!piper_inc_dirs" +- }, + { + "name": "html_as_json", + "sources": "calibre/srv/html_as_json.cpp", +diff --git a/src/calibre/constants.py b/src/calibre/constants.py +index fa4b211459..7b27768953 100644 +--- a/src/calibre/constants.py ++++ b/src/calibre/constants.py +@@ -258,7 +258,6 @@ def __init__(self): + 'rcc_backend', + 'icu', + 'speedup', +- 'piper', + 'html_as_json', + 'fast_css_transform', + 'fast_html_entities', +diff --git a/src/calibre/utils/run_tests.py b/src/calibre/utils/run_tests.py +index ffd0f95c04..c80a35f83d 100644 +--- a/src/calibre/utils/run_tests.py ++++ b/src/calibre/utils/run_tests.py +@@ -192,6 +192,7 @@ def test_import_of_all_python_modules(self): + } + if 'SKIP_SPEECH_TESTS' in os.environ: + exclude_packages.add('calibre.gui2.tts') ++ exclude_modules.add('calibre.utils.tts.piper') + if not isbsd: + exclude_modules.add('calibre.devices.usbms.hal') + d = os.path.dirname diff --git a/app-text/calibre/files/calibre-server-3.conf b/app-text/calibre/files/calibre-server-3.conf new file mode 100644 index 0000000..bb456e8 --- /dev/null +++ b/app-text/calibre/files/calibre-server-3.conf @@ -0,0 +1,13 @@ +# /etc/conf.d/calibre-server +# Change this to the user you want to run calibre-server as. +# You may specify a group too, after a colon +# NOTE: This must be set and not to root! +CALIBRE_USER= + +# Set the path of the library to serve. +# Defaults to the default location for CALIBRE_USER. +#CALIBRE_LIBRARY='/Calibre Library' + +# Extra options to pass to calibre-server. +# See the calibre-server man page for more options. +#CALIBRE_SERVER_OPTS="--userdb /srv/calibre/users.sqlite --enable-auth --worker-count 10 --port 8080" diff --git a/app-text/calibre/files/calibre-server-3.init b/app-text/calibre/files/calibre-server-3.init new file mode 100644 index 0000000..049d3e4 --- /dev/null +++ b/app-text/calibre/files/calibre-server-3.init @@ -0,0 +1,58 @@ +#!/sbin/openrc-run +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License, v2 or later + +depend() { + need net + need localmount + after bootmisc +} + +checkconfig() { + if [ "${CALIBRE_USER}" = "" -o "${CALIBRE_USER}" = "root" ] ; then + eerror "Please edit /etc/conf.d/calibre-server" + eerror "You have to specify a user to run calibre-server as, as we will not run it as root!" + eerror "Modify CALIBRE_USER to your needs (you can also add a group, after a colon)" + return 1 + fi + if ! getent passwd "${CALIBRE_USER%:*}" >/dev/null ; then + eerror "Please edit /etc/conf.d/calibre-server" + eerror "Your user has to exist!" + return 1 + fi + if [ "${CALIBRE_USER%:*}" != "${CALIBRE_USER}" ] ; then + if ! getent group "${CALIBRE_USER#*:}" >/dev/null ; then + eerror "Please edit /etc/conf.d/calibre-server" + eerror "Your group has to exist too!" + return 1 + fi + fi + if [ "${CALIBRE_LIBRARY}" = "" ] ; then + CALIBRE_USER_HOME=$(getent passwd "${CALIBRE_USER%:*}" | cut -d ':' -f 6) + CALIBRE_LIBRARY="${CALIBRE_USER_HOME}/Calibre Library" + fi + if [ ! -d "${CALIBRE_LIBRARY}" ] ; then + eerror "Please edit /etc/conf.d/calibre-server" + eerror "The Calibre library, '${CALIBRE_LIBRARY},' does not exist." + eerror "Please modify CALIBRE_LIBRARY to point to a valid library." + return 1 + fi + return 0 +} + +start() { + checkconfig || return $? + local pidfile=/var/run/calibre-server.pid + ebegin "Starting calibre-server" + start-stop-daemon --user "${CALIBRE_USER}" \ + --pidfile "${pidfile}" --make-pidfile --background --exec /usr/bin/calibre-server \ + -- ${CALIBRE_OPTS} "${CALIBRE_LIBRARY}" + eend $? +} + +stop() { + ebegin "Stopping calibre-server" + start-stop-daemon --stop --user "${CALIBRE_USER}" \ + --pidfile /var/run/calibre-server.pid + eend $? +} diff --git a/app-text/calibre/metadata.xml b/app-text/calibre/metadata.xml new file mode 100644 index 0000000..7c29e81 --- /dev/null +++ b/app-text/calibre/metadata.xml @@ -0,0 +1,17 @@ + + + + + eschwartz@gentoo.org + Eli Schwartz + + + kovidgoyal/calibre + https://calibre-ebook.com/whats-new + + + Enable font subsetting support + Use a system copy of mathjax + Enable support for comic books compressed with the non-free Rar format + + diff --git a/metadata/md5-cache/app-text/calibre-8.15.0 b/metadata/md5-cache/app-text/calibre-8.15.0 new file mode 100644 index 0000000..a43bbb2 --- /dev/null +++ b/metadata/md5-cache/app-text/calibre-8.15.0 @@ -0,0 +1,18 @@ +BDEPEND=python_single_target_python3_11? ( >=dev-python/pyqt-builder-1.10.3[python_targets_python3_11(-)] >=dev-python/sip-5[python_targets_python3_11(-)] ) python_single_target_python3_12? ( >=dev-python/pyqt-builder-1.10.3[python_targets_python3_12(-)] >=dev-python/sip-5[python_targets_python3_12(-)] ) python_single_target_python3_13? ( >=dev-python/pyqt-builder-1.10.3[python_targets_python3_13(-)] >=dev-python/sip-5[python_targets_python3_13(-)] ) virtual/pkgconfig system-mathjax? ( dev-lang/rapydscript-ng ) verify-sig? ( sec-keys/openpgp-keys-kovidgoyal ) verify-sig? ( || ( app-alternatives/gpg app-crypt/gnupg[-alternatives(-)] ) >=app-portage/gemato-20 ) +DEFINED_PHASES=compile install postinst postrm preinst prepare setup test unpack +DEPEND=python_single_target_python3_11? ( dev-lang/python:3.11[sqlite,ssl] ) python_single_target_python3_12? ( dev-lang/python:3.12[sqlite,ssl] ) python_single_target_python3_13? ( dev-lang/python:3.13[sqlite,ssl] ) 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_single_target_python3_11? ( >=dev-python/apsw-3.25.2_p1[python_targets_python3_11(-)] dev-python/beautifulsoup4[python_targets_python3_11(-)] >=dev-python/css-parser-1.0.4[python_targets_python3_11(-)] dev-python/dnspython[python_targets_python3_11(-)] >=dev-python/feedparser-5.2.1[python_targets_python3_11(-)] >=dev-python/html2text-2019.8.11[python_targets_python3_11(-)] >=dev-python/html5-parser-0.4.9[python_targets_python3_11(-)] dev-python/jeepney[python_targets_python3_11(-)] >=dev-python/lxml-3.8.0[python_targets_python3_11(-)] dev-python/lxml-html-clean[python_targets_python3_11(-)] >=dev-python/markdown-3.0.1[python_targets_python3_11(-)] >=dev-python/mechanize-0.3.5[python_targets_python3_11(-)] >=dev-python/msgpack-0.6.2[python_targets_python3_11(-)] >=dev-python/netifaces-0.10.5[python_targets_python3_11(-)] >=dev-python/pillow-3.2.0[jpeg,truetype,webp,zlib,python_targets_python3_11(-)] >=dev-python/psutil-4.3.0[python_targets_python3_11(-)] >=dev-python/pychm-0.8.6[python_targets_python3_11(-)] dev-python/pykakasi[python_targets_python3_11(-)] >=dev-python/pygments-2.3.1[python_targets_python3_11(-)] >=dev-python/python-dateutil-2.5.3[python_targets_python3_11(-)] dev-python/pyqt6[gui,network,opengl,printsupport,quick,svg,widgets,python_targets_python3_11(-)] dev-python/pyqt6-webengine[widgets,python_targets_python3_11(-)] dev-python/regex[python_targets_python3_11(-)] dev-python/xxhash[python_targets_python3_11(-)] >=dev-python/zeroconf-0.75.0[python_targets_python3_11(-)] ) python_single_target_python3_12? ( >=dev-python/apsw-3.25.2_p1[python_targets_python3_12(-)] dev-python/beautifulsoup4[python_targets_python3_12(-)] >=dev-python/css-parser-1.0.4[python_targets_python3_12(-)] dev-python/dnspython[python_targets_python3_12(-)] >=dev-python/feedparser-5.2.1[python_targets_python3_12(-)] >=dev-python/html2text-2019.8.11[python_targets_python3_12(-)] >=dev-python/html5-parser-0.4.9[python_targets_python3_12(-)] dev-python/jeepney[python_targets_python3_12(-)] >=dev-python/lxml-3.8.0[python_targets_python3_12(-)] dev-python/lxml-html-clean[python_targets_python3_12(-)] >=dev-python/markdown-3.0.1[python_targets_python3_12(-)] >=dev-python/mechanize-0.3.5[python_targets_python3_12(-)] >=dev-python/msgpack-0.6.2[python_targets_python3_12(-)] >=dev-python/netifaces-0.10.5[python_targets_python3_12(-)] >=dev-python/pillow-3.2.0[jpeg,truetype,webp,zlib,python_targets_python3_12(-)] >=dev-python/psutil-4.3.0[python_targets_python3_12(-)] >=dev-python/pychm-0.8.6[python_targets_python3_12(-)] dev-python/pykakasi[python_targets_python3_12(-)] >=dev-python/pygments-2.3.1[python_targets_python3_12(-)] >=dev-python/python-dateutil-2.5.3[python_targets_python3_12(-)] dev-python/pyqt6[gui,network,opengl,printsupport,quick,svg,widgets,python_targets_python3_12(-)] dev-python/pyqt6-webengine[widgets,python_targets_python3_12(-)] dev-python/regex[python_targets_python3_12(-)] dev-python/xxhash[python_targets_python3_12(-)] >=dev-python/zeroconf-0.75.0[python_targets_python3_12(-)] ) python_single_target_python3_13? ( >=dev-python/apsw-3.25.2_p1[python_targets_python3_13(-)] dev-python/beautifulsoup4[python_targets_python3_13(-)] >=dev-python/css-parser-1.0.4[python_targets_python3_13(-)] dev-python/dnspython[python_targets_python3_13(-)] >=dev-python/feedparser-5.2.1[python_targets_python3_13(-)] >=dev-python/html2text-2019.8.11[python_targets_python3_13(-)] >=dev-python/html5-parser-0.4.9[python_targets_python3_13(-)] dev-python/jeepney[python_targets_python3_13(-)] >=dev-python/lxml-3.8.0[python_targets_python3_13(-)] dev-python/lxml-html-clean[python_targets_python3_13(-)] >=dev-python/markdown-3.0.1[python_targets_python3_13(-)] >=dev-python/mechanize-0.3.5[python_targets_python3_13(-)] >=dev-python/msgpack-0.6.2[python_targets_python3_13(-)] >=dev-python/netifaces-0.10.5[python_targets_python3_13(-)] >=dev-python/pillow-3.2.0[jpeg,truetype,webp,zlib,python_targets_python3_13(-)] >=dev-python/psutil-4.3.0[python_targets_python3_13(-)] >=dev-python/pychm-0.8.6[python_targets_python3_13(-)] dev-python/pykakasi[python_targets_python3_13(-)] >=dev-python/pygments-2.3.1[python_targets_python3_13(-)] >=dev-python/python-dateutil-2.5.3[python_targets_python3_13(-)] dev-python/pyqt6[gui,network,opengl,printsupport,quick,svg,widgets,python_targets_python3_13(-)] dev-python/pyqt6-webengine[widgets,python_targets_python3_13(-)] dev-python/regex[python_targets_python3_13(-)] dev-python/xxhash[python_targets_python3_13(-)] >=dev-python/zeroconf-0.75.0[python_targets_python3_13(-)] ) 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 >=media-video/ffmpeg-6:= virtual/libusb:1= x11-misc/shared-mime-info >=x11-misc/xdg-utils-1.0.2-r2 font-subsetting? ( python_single_target_python3_11? ( dev-python/fonttools[python_targets_python3_11(-)] ) python_single_target_python3_12? ( dev-python/fonttools[python_targets_python3_12(-)] ) python_single_target_python3_13? ( dev-python/fonttools[python_targets_python3_13(-)] ) ) ios? ( >=app-pda/usbmuxd-1.0.8 >=app-pda/libimobiledevice-1.2.0 ) speech? ( python_single_target_python3_11? ( app-accessibility/speech-dispatcher[python,python_targets_python3_11(-)] ) python_single_target_python3_12? ( app-accessibility/speech-dispatcher[python,python_targets_python3_12(-)] ) python_single_target_python3_13? ( app-accessibility/speech-dispatcher[python,python_targets_python3_13(-)] ) dev-python/pyqt6[multimedia,speech] ) system-mathjax? ( >=dev-libs/mathjax-3:= ) udisks? ( virtual/libudev ) unrar? ( dev-python/unrardll ) test? ( python_single_target_python3_11? ( >=dev-python/chardet-3.0.3[python_targets_python3_11(-)] ) python_single_target_python3_12? ( >=dev-python/chardet-3.0.3[python_targets_python3_12(-)] ) python_single_target_python3_13? ( >=dev-python/chardet-3.0.3[python_targets_python3_13(-)] ) ) +DESCRIPTION=Ebook management application +EAPI=8 +HOMEPAGE=https://calibre-ebook.com/ +IDEPEND=dev-util/desktop-file-utils x11-misc/shared-mime-info +INHERIT=edo toolchain-funcs python-single-r1 qmake-utils verify-sig xdg +IUSE=+font-subsetting ios speech +system-mathjax test +udisks unrar python_single_target_python3_11 python_single_target_python3_12 python_single_target_python3_13 verify-sig +KEYWORDS=amd64 ~arm64 +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 +RDEPEND=python_single_target_python3_11? ( dev-lang/python:3.11[sqlite,ssl] ) python_single_target_python3_12? ( dev-lang/python:3.12[sqlite,ssl] ) python_single_target_python3_13? ( dev-lang/python:3.13[sqlite,ssl] ) 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_single_target_python3_11? ( >=dev-python/apsw-3.25.2_p1[python_targets_python3_11(-)] dev-python/beautifulsoup4[python_targets_python3_11(-)] >=dev-python/css-parser-1.0.4[python_targets_python3_11(-)] dev-python/dnspython[python_targets_python3_11(-)] >=dev-python/feedparser-5.2.1[python_targets_python3_11(-)] >=dev-python/html2text-2019.8.11[python_targets_python3_11(-)] >=dev-python/html5-parser-0.4.9[python_targets_python3_11(-)] dev-python/jeepney[python_targets_python3_11(-)] >=dev-python/lxml-3.8.0[python_targets_python3_11(-)] dev-python/lxml-html-clean[python_targets_python3_11(-)] >=dev-python/markdown-3.0.1[python_targets_python3_11(-)] >=dev-python/mechanize-0.3.5[python_targets_python3_11(-)] >=dev-python/msgpack-0.6.2[python_targets_python3_11(-)] >=dev-python/netifaces-0.10.5[python_targets_python3_11(-)] >=dev-python/pillow-3.2.0[jpeg,truetype,webp,zlib,python_targets_python3_11(-)] >=dev-python/psutil-4.3.0[python_targets_python3_11(-)] >=dev-python/pychm-0.8.6[python_targets_python3_11(-)] dev-python/pykakasi[python_targets_python3_11(-)] >=dev-python/pygments-2.3.1[python_targets_python3_11(-)] >=dev-python/python-dateutil-2.5.3[python_targets_python3_11(-)] dev-python/pyqt6[gui,network,opengl,printsupport,quick,svg,widgets,python_targets_python3_11(-)] dev-python/pyqt6-webengine[widgets,python_targets_python3_11(-)] dev-python/regex[python_targets_python3_11(-)] dev-python/xxhash[python_targets_python3_11(-)] >=dev-python/zeroconf-0.75.0[python_targets_python3_11(-)] ) python_single_target_python3_12? ( >=dev-python/apsw-3.25.2_p1[python_targets_python3_12(-)] dev-python/beautifulsoup4[python_targets_python3_12(-)] >=dev-python/css-parser-1.0.4[python_targets_python3_12(-)] dev-python/dnspython[python_targets_python3_12(-)] >=dev-python/feedparser-5.2.1[python_targets_python3_12(-)] >=dev-python/html2text-2019.8.11[python_targets_python3_12(-)] >=dev-python/html5-parser-0.4.9[python_targets_python3_12(-)] dev-python/jeepney[python_targets_python3_12(-)] >=dev-python/lxml-3.8.0[python_targets_python3_12(-)] dev-python/lxml-html-clean[python_targets_python3_12(-)] >=dev-python/markdown-3.0.1[python_targets_python3_12(-)] >=dev-python/mechanize-0.3.5[python_targets_python3_12(-)] >=dev-python/msgpack-0.6.2[python_targets_python3_12(-)] >=dev-python/netifaces-0.10.5[python_targets_python3_12(-)] >=dev-python/pillow-3.2.0[jpeg,truetype,webp,zlib,python_targets_python3_12(-)] >=dev-python/psutil-4.3.0[python_targets_python3_12(-)] >=dev-python/pychm-0.8.6[python_targets_python3_12(-)] dev-python/pykakasi[python_targets_python3_12(-)] >=dev-python/pygments-2.3.1[python_targets_python3_12(-)] >=dev-python/python-dateutil-2.5.3[python_targets_python3_12(-)] dev-python/pyqt6[gui,network,opengl,printsupport,quick,svg,widgets,python_targets_python3_12(-)] dev-python/pyqt6-webengine[widgets,python_targets_python3_12(-)] dev-python/regex[python_targets_python3_12(-)] dev-python/xxhash[python_targets_python3_12(-)] >=dev-python/zeroconf-0.75.0[python_targets_python3_12(-)] ) python_single_target_python3_13? ( >=dev-python/apsw-3.25.2_p1[python_targets_python3_13(-)] dev-python/beautifulsoup4[python_targets_python3_13(-)] >=dev-python/css-parser-1.0.4[python_targets_python3_13(-)] dev-python/dnspython[python_targets_python3_13(-)] >=dev-python/feedparser-5.2.1[python_targets_python3_13(-)] >=dev-python/html2text-2019.8.11[python_targets_python3_13(-)] >=dev-python/html5-parser-0.4.9[python_targets_python3_13(-)] dev-python/jeepney[python_targets_python3_13(-)] >=dev-python/lxml-3.8.0[python_targets_python3_13(-)] dev-python/lxml-html-clean[python_targets_python3_13(-)] >=dev-python/markdown-3.0.1[python_targets_python3_13(-)] >=dev-python/mechanize-0.3.5[python_targets_python3_13(-)] >=dev-python/msgpack-0.6.2[python_targets_python3_13(-)] >=dev-python/netifaces-0.10.5[python_targets_python3_13(-)] >=dev-python/pillow-3.2.0[jpeg,truetype,webp,zlib,python_targets_python3_13(-)] >=dev-python/psutil-4.3.0[python_targets_python3_13(-)] >=dev-python/pychm-0.8.6[python_targets_python3_13(-)] dev-python/pykakasi[python_targets_python3_13(-)] >=dev-python/pygments-2.3.1[python_targets_python3_13(-)] >=dev-python/python-dateutil-2.5.3[python_targets_python3_13(-)] dev-python/pyqt6[gui,network,opengl,printsupport,quick,svg,widgets,python_targets_python3_13(-)] dev-python/pyqt6-webengine[widgets,python_targets_python3_13(-)] dev-python/regex[python_targets_python3_13(-)] dev-python/xxhash[python_targets_python3_13(-)] >=dev-python/zeroconf-0.75.0[python_targets_python3_13(-)] ) 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 >=media-video/ffmpeg-6:= virtual/libusb:1= x11-misc/shared-mime-info >=x11-misc/xdg-utils-1.0.2-r2 font-subsetting? ( python_single_target_python3_11? ( dev-python/fonttools[python_targets_python3_11(-)] ) python_single_target_python3_12? ( dev-python/fonttools[python_targets_python3_12(-)] ) python_single_target_python3_13? ( dev-python/fonttools[python_targets_python3_13(-)] ) ) ios? ( >=app-pda/usbmuxd-1.0.8 >=app-pda/libimobiledevice-1.2.0 ) speech? ( python_single_target_python3_11? ( app-accessibility/speech-dispatcher[python,python_targets_python3_11(-)] ) python_single_target_python3_12? ( app-accessibility/speech-dispatcher[python,python_targets_python3_12(-)] ) python_single_target_python3_13? ( app-accessibility/speech-dispatcher[python,python_targets_python3_13(-)] ) dev-python/pyqt6[multimedia,speech] ) system-mathjax? ( >=dev-libs/mathjax-3:= ) udisks? ( virtual/libudev ) unrar? ( dev-python/unrardll ) udisks? ( sys-fs/udisks:2 ) +REQUIRED_USE=^^ ( python_single_target_python3_11 python_single_target_python3_12 python_single_target_python3_13 ) +RESTRICT=!test? ( test ) +SLOT=0 +SRC_URI=https://download.calibre-ebook.com/8.15.0/calibre-8.15.0.tar.xz verify-sig? ( https://calibre-ebook.com/signatures/calibre-8.15.0.tar.xz.sig ) +_eclasses_=edo a5e294016aa84979fcb2459749eb80b2 toolchain-funcs 98d9f464d912ae6b7316fb8a3721f5db multiprocessing 1e32df7deee68372153dca65f4a7c21f python-utils-r1 dbb8c4d794033ad7e7221eaf567a6c90 python-single-r1 47d8ac9be330c9366112b78fd4f8ce57 qmake-utils a8dd17b1d94586164f5e3fc12b1c6b81 eapi9-pipestatus d2c134036ac31c3085aebc9147f572bd verify-sig 2cf23b136af9fd4c3fceadc34d0f98ad xdg-utils 42869b3c8d86a70ef3cf75165a395e09 xdg 3ef49a87c52c8b77c476351195dfe575 +_md5_=0314ba1a568b28514b848c51712a172e