From 9add3bce03c74334e7a27c8f9be8ec54d848d130 Mon Sep 17 00:00:00 2001 From: saundersp Date: Mon, 3 Feb 2025 14:39:44 +0100 Subject: [PATCH] Added app-text/calibre-7.24.0 --- app-text/calibre/Manifest | 2 + app-text/calibre/calibre-7.24.0.ebuild | 254 ++++++++++++++++++ .../files/calibre-7.0.0-jxr-test.patch | 27 ++ 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-7.24.0 | 18 ++ 7 files changed, 389 insertions(+) create mode 100644 app-text/calibre/Manifest create mode 100644 app-text/calibre/calibre-7.24.0.ebuild create mode 100644 app-text/calibre/files/calibre-7.0.0-jxr-test.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-7.24.0 diff --git a/app-text/calibre/Manifest b/app-text/calibre/Manifest new file mode 100644 index 0000000..8ac5c85 --- /dev/null +++ b/app-text/calibre/Manifest @@ -0,0 +1,2 @@ +DIST calibre-7.24.0.tar.xz 42601188 BLAKE2B fd581dcea283e46ddacaa9fccfc4fda45cb96479c915b5216d6103c28a25d217366c128863715dd867daef151164edb4dcabfcd2442b96ba3feeb4827c00c7be SHA512 50e0b25bf0607eeb07d41f7038f48599a30d4a9cb44483fd2eb56c5c2d3bb7d1e70dc2644501519e26104ac984d3998f05394bd3470ef2765c6e524019974f2e +DIST calibre-7.24.0.tar.xz.sig 566 BLAKE2B db9e15e3f4692f5786acce6becf26be00bb52e51acf676323fa15b9a3126441e5a2f83ec6e5d8264daf95be193948d48794b45d737acac8429d59daded92af80 SHA512 5d7ac771fef76d7eba89e05b78b3acc852dfa10603e7d1093d991f30d7ac7c498d65baebb4cdd7f60288829eded231d6a211adb9423aaa3b639141bd3ca7ca44 diff --git a/app-text/calibre/calibre-7.24.0.ebuild b/app-text/calibre/calibre-7.24.0.ebuild new file mode 100644 index 0000000..fa53647 --- /dev/null +++ b/app-text/calibre/calibre-7.24.0.ebuild @@ -0,0 +1,254 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +PYTHON_COMPAT=( python3_{10..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' +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" +) + +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 + # 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.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.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-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..310772c --- /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-7.24.0 b/metadata/md5-cache/app-text/calibre-7.24.0 new file mode 100644 index 0000000..1432be7 --- /dev/null +++ b/metadata/md5-cache/app-text/calibre-7.24.0 @@ -0,0 +1,18 @@ +BDEPEND=python_single_target_python3_10? ( >=dev-python/pyqt-builder-1.10.3[python_targets_python3_10(-)] >=dev-python/sip-5[python_targets_python3_10(-)] ) 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-crypt/gnupg >=app-portage/gemato-20 ) +DEFINED_PHASES=compile install postinst postrm preinst prepare setup test unpack +DEPEND=python_single_target_python3_10? ( dev-lang/python:3.10[sqlite,ssl] ) 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_10? ( >=dev-python/apsw-3.25.2_p1[python_targets_python3_10(-)] dev-python/beautifulsoup4[python_targets_python3_10(-)] >=dev-python/css-parser-1.0.4[python_targets_python3_10(-)] dev-python/dnspython[python_targets_python3_10(-)] >=dev-python/feedparser-5.2.1[python_targets_python3_10(-)] >=dev-python/html2text-2019.8.11[python_targets_python3_10(-)] >=dev-python/html5-parser-0.4.9[python_targets_python3_10(-)] dev-python/jeepney[python_targets_python3_10(-)] >=dev-python/lxml-3.8.0[python_targets_python3_10(-)] dev-python/lxml-html-clean[python_targets_python3_10(-)] >=dev-python/markdown-3.0.1[python_targets_python3_10(-)] >=dev-python/mechanize-0.3.5[python_targets_python3_10(-)] >=dev-python/msgpack-0.6.2[python_targets_python3_10(-)] >=dev-python/netifaces-0.10.5[python_targets_python3_10(-)] >=dev-python/pillow-3.2.0[jpeg,truetype,webp,zlib,python_targets_python3_10(-)] >=dev-python/psutil-4.3.0[python_targets_python3_10(-)] >=dev-python/pychm-0.8.6[python_targets_python3_10(-)] dev-python/pykakasi[python_targets_python3_10(-)] >=dev-python/pygments-2.3.1[python_targets_python3_10(-)] >=dev-python/python-dateutil-2.5.3[python_targets_python3_10(-)] dev-python/pyqt6[gui,network,opengl,printsupport,quick,svg,widgets,python_targets_python3_10(-)] dev-python/pyqt6-webengine[widgets,python_targets_python3_10(-)] dev-python/regex[python_targets_python3_10(-)] dev-python/xxhash[python_targets_python3_10(-)] >=dev-python/zeroconf-0.75.0[python_targets_python3_10(-)] ) 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_10? ( dev-python/fonttools[python_targets_python3_10(-)] ) 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_10? ( app-accessibility/speech-dispatcher[python,python_targets_python3_10(-)] ) 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_10? ( >=dev-python/chardet-3.0.3[python_targets_python3_10(-)] ) 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_10 python_single_target_python3_11 python_single_target_python3_12 python_single_target_python3_13 verify-sig +KEYWORDS=amd64 +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_10? ( dev-lang/python:3.10[sqlite,ssl] ) 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_10? ( >=dev-python/apsw-3.25.2_p1[python_targets_python3_10(-)] dev-python/beautifulsoup4[python_targets_python3_10(-)] >=dev-python/css-parser-1.0.4[python_targets_python3_10(-)] dev-python/dnspython[python_targets_python3_10(-)] >=dev-python/feedparser-5.2.1[python_targets_python3_10(-)] >=dev-python/html2text-2019.8.11[python_targets_python3_10(-)] >=dev-python/html5-parser-0.4.9[python_targets_python3_10(-)] dev-python/jeepney[python_targets_python3_10(-)] >=dev-python/lxml-3.8.0[python_targets_python3_10(-)] dev-python/lxml-html-clean[python_targets_python3_10(-)] >=dev-python/markdown-3.0.1[python_targets_python3_10(-)] >=dev-python/mechanize-0.3.5[python_targets_python3_10(-)] >=dev-python/msgpack-0.6.2[python_targets_python3_10(-)] >=dev-python/netifaces-0.10.5[python_targets_python3_10(-)] >=dev-python/pillow-3.2.0[jpeg,truetype,webp,zlib,python_targets_python3_10(-)] >=dev-python/psutil-4.3.0[python_targets_python3_10(-)] >=dev-python/pychm-0.8.6[python_targets_python3_10(-)] dev-python/pykakasi[python_targets_python3_10(-)] >=dev-python/pygments-2.3.1[python_targets_python3_10(-)] >=dev-python/python-dateutil-2.5.3[python_targets_python3_10(-)] dev-python/pyqt6[gui,network,opengl,printsupport,quick,svg,widgets,python_targets_python3_10(-)] dev-python/pyqt6-webengine[widgets,python_targets_python3_10(-)] dev-python/regex[python_targets_python3_10(-)] dev-python/xxhash[python_targets_python3_10(-)] >=dev-python/zeroconf-0.75.0[python_targets_python3_10(-)] ) 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_10? ( dev-python/fonttools[python_targets_python3_10(-)] ) 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_10? ( app-accessibility/speech-dispatcher[python,python_targets_python3_10(-)] ) 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_10 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/7.24.0/calibre-7.24.0.tar.xz verify-sig? ( https://calibre-ebook.com/signatures/calibre-7.24.0.tar.xz.sig ) +_eclasses_=edo 367e103a74bf77e6a8da7894d999fa3c toolchain-funcs 14648d8795f7779e11e1bc7cf08b7536 multilib b2a329026f2e404e9e371097dda47f96 multiprocessing 1e32df7deee68372153dca65f4a7c21f python-utils-r1 42c5abe4a656a4993a06a4fc61dbdd12 python-single-r1 47d8ac9be330c9366112b78fd4f8ce57 qmake-utils a8dd17b1d94586164f5e3fc12b1c6b81 eapi9-pipestatus d2c134036ac31c3085aebc9147f572bd verify-sig 7433426b6b28bf2737ba4b82c8aa8c53 xdg-utils 42869b3c8d86a70ef3cf75165a395e09 xdg 3ef49a87c52c8b77c476351195dfe575 +_md5_=aff823c2127f4668d5dcf4a28493a6f8