diff options
Diffstat (limited to 'gnu/packages/ebook.scm')
-rw-r--r-- | gnu/packages/ebook.scm | 384 |
1 files changed, 194 insertions, 190 deletions
diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm index 207bbfcdaf..339a72ef91 100644 --- a/gnu/packages/ebook.scm +++ b/gnu/packages/ebook.scm @@ -6,7 +6,7 @@ ;;; Copyright © 2017 Roel Janssen <roel@gnu.org> ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com> -;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net> +;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net> ;;; Copyright © 2020 Zheng Junjie <873216071@qq.com> ;;; Copyright © 2021 la snesne <lasnesne@lagunposprasihopre.org> ;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com> @@ -31,6 +31,7 @@ #:use-module (guix packages) #:use-module (guix download) #:use-module (guix utils) + #:use-module (guix gexp) #:use-module (guix git-download) #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) @@ -39,6 +40,7 @@ #:use-module (guix build-system qt) #:use-module (gnu packages) #:use-module (gnu packages autotools) + #:use-module (gnu packages bash) #:use-module (gnu packages compression) #:use-module (gnu packages curl) #:use-module (gnu packages databases) @@ -56,6 +58,7 @@ #:use-module (gnu packages icu4c) #:use-module (gnu packages image) #:use-module (gnu packages javascript) + #:use-module (gnu packages language) #:use-module (gnu packages libusb) #:use-module (gnu packages libreoffice) #:use-module (gnu packages music) @@ -120,218 +123,218 @@ with Microsoft Compiled HTML (CHM) files") (define-public calibre (package (name "calibre") - (version "5.21.0") + (version "5.36.0") (source - (origin - (method url-fetch) - (uri (string-append "http://download.calibre-ebook.com/" - version "/calibre-" - version ".tar.xz")) - (sha256 - (base32 - "0mq2w8blq6ykaml812axakwkqcw85qcpfwijdikn7kvbrhnnp2s5")) - (modules '((guix build utils))) - (snippet - '(begin - ;; Unbundle python2-odfpy. - (delete-file-recursively "src/odf") - ;; Disable test that attempts to load it. - (substitute* "setup/test.py" - ((".*SRC, 'odf'.*") - "")) - - ;; Remove unneeded resources. - (delete-file "resources/mozilla-ca-certs.pem") - (delete-file "resources/calibre-portable.bat") - (delete-file "resources/calibre-portable.sh") - #t)) - (patches (search-patches "calibre-fix-zeroconf.patch" - "calibre-no-updates-dialog.patch" - "calibre-remove-test-sqlite.patch" ; TODO: fix test. - "calibre-remove-test-unrar.patch")))) + (origin + (method url-fetch) + (uri (string-append "http://download.calibre-ebook.com/" + version "/calibre-" + version ".tar.xz")) + (sha256 + (base32 + "1c036qmn7lxq0899c2xzzs6whz7z0557frnfqisbvfxa13b2sadk")) + (modules '((guix build utils))) + (snippet + '(begin + ;; Unbundle python2-odfpy. + (delete-file-recursively "src/odf") + ;; Disable test that attempts to load it. + (substitute* "setup/test.py" + ((".*SRC, 'odf'.*") "")) + ;; Remove unneeded resources. + (delete-file "resources/mozilla-ca-certs.pem") + (delete-file "resources/calibre-portable.bat") + (delete-file "resources/calibre-portable.sh"))) + (patches (search-patches "calibre-no-updates-dialog.patch" + "calibre-remove-test-sqlite.patch" ; TODO: fix test. + "calibre-remove-test-unrar.patch")))) (build-system python-build-system) (native-inputs - (list pkg-config - qtbase-5 ; for qmake + (list bash-minimal + pkg-config python-flake8 python-pyqt-builder + qtbase-5 ; for qmake xdg-utils)) (inputs - `(("fontconfig" ,fontconfig) - ("font-liberation" ,font-liberation) - ("glib" ,glib) - ("hunspell" ,hunspell) - ("hyphen" ,hyphen) - ("icu4c" ,icu4c) - ("libmtp" ,libmtp) - ("libpng" ,libpng) - ("libjpeg" ,libjpeg-turbo) - ("libjxr" ,libjxr) - ("libusb" ,libusb) - ("openssl" ,openssl) - ("optipng" ,optipng) - ("podofo" ,podofo) - ("poppler" ,poppler) - ("python-apsw" ,python-apsw) - ("python-beautifulsoup4" ,python-beautifulsoup4) - ("python-cchardet" ,python-cchardet) - ("python-css-parser" ,python-css-parser) - ("python-cssselect" ,python-cssselect) - ("python-dateutil" ,python-dateutil) - ("python-dbus" ,python-dbus) - ("python-dnspython" ,python-dnspython-1.16) - ("python-dukpy" ,python-dukpy) - ("python-feedparser" ,python-feedparser) - ("python-html2text" ,python-html2text) - ("python-html5-parser" ,python-html5-parser) - ("python-html5lib" ,python-html5lib) - ("python-lxml" ,python-lxml) - ("python-markdown" ,python-markdown) - ("python-mechanize" ,python-mechanize) - ;; python-msgpack is needed for the network content server to work. - ("python-msgpack" ,python-msgpack) - ("python-netifaces" ,python-netifaces) - ("python-odfpy" ,python-odfpy) - ("python-pillow" ,python-pillow) - ("python-psutil" ,python-psutil) - ("python-py7zr" ,python-py7zr) - ("python-pychm" ,python-pychm) - ("python-pycryptodome" ,python-pycryptodome) - ("python-pygments" ,python-pygments) - ("python-pyqt" ,python-pyqt) - ("python-pyqtwebengine" ,python-pyqtwebengine) - ("python-regex" ,python-regex) - ("python-speechd" ,speech-dispatcher) - ("python-zeroconf" ,python-zeroconf) - ("qtwebengine" ,qtwebengine) - ("sqlite" ,sqlite))) + (list fontconfig + font-liberation + glib + hunspell + hyphen + icu4c + libmtp + libpng + libjpeg-turbo + libjxr + libstemmer + libusb + openssl + optipng + podofo + poppler + python-apsw + python-beautifulsoup4 + python-cchardet + python-css-parser + python-cssselect + python-dateutil + python-dnspython-1.16 + python-feedparser + python-html2text + python-html5-parser + python-html5lib + python-jeepney + python-lxml + python-markdown + python-mechanize + ;; python-msgpack is needed for the network content server to work. + python-msgpack + python-netifaces + python-odfpy + python-pillow + python-psutil + python-py7zr + python-pychm + python-pygments + python-pyqt-without-qtwebkit + python-pyqtwebengine + python-regex + speech-dispatcher + python-zeroconf + qtwebengine + sqlite)) (arguments - `(;; Calibre is using setuptools by itself, but the setup.py is not - ;; compatible with the shim wrapper (taken from pip) we are using. - #:use-setuptools? #f - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'patch-source - (lambda _ - (substitute* "src/calibre/linux.py" - ;; We can't use the uninstaller in Guix. Don't build it. - (("self\\.create_uninstaller()") "")) - #t)) - (add-after 'patch-source-shebangs 'patch-more-shebangs - (lambda _ - ;; Patch various inline shebangs. - (substitute* '("src/calibre/gui2/preferences/tweaks.py" - "src/calibre/gui2/dialogs/custom_recipes.py" - "setup/install.py" - "setup/linux-installer.sh") - (("#!/usr/bin/env python") - (string-append "#!" (which "python"))) - (("#!/bin/sh") - (string-append "#!" (which "sh")))) - #t)) - (add-after 'unpack 'dont-load-remote-icons - (lambda _ - (substitute* "setup/plugins_mirror.py" - (("href=\"//calibre-ebook.com/favicon.ico\"") - "href=\"favicon.ico\"")) - #t)) - (add-before 'build 'configure - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((podofo (assoc-ref inputs "podofo")) - (pyqt (assoc-ref inputs "python-pyqt")) - (python-sip (assoc-ref inputs "python-sip")) - (out (assoc-ref outputs "out"))) + (list + ;; Calibre is using setuptools by itself, but the setup.py is not + ;; compatible with the shim wrapper (taken from pip) we are using. + #:use-setuptools? #f + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-source + (lambda _ + (substitute* "src/calibre/linux.py" + ;; We can't use the uninstaller in Guix. Don't build it. + (("self\\.create_uninstaller()") "")))) + (add-after 'patch-source-shebangs 'patch-more-shebangs + (lambda* (#:key inputs native-inputs #:allow-other-keys) + ;; Patch various inline shebangs. + (substitute* '("src/calibre/gui2/preferences/tweaks.py" + "src/calibre/gui2/dialogs/custom_recipes.py" + "setup/install.py" + "setup/linux-installer.sh") + (("#!/usr/bin/env python") + (string-append "#!" (search-input-file inputs "/bin/python"))) + (("#!/bin/sh") + (string-append "#!" + (search-input-file native-inputs "/bin/sh")))))) + (add-after 'unpack 'dont-load-remote-icons + (lambda _ + (substitute* "setup/plugins_mirror.py" + (("href=\"//calibre-ebook.com/favicon.ico\"") + "href=\"favicon.ico\"")))) + (add-before 'build 'configure + (lambda* (#:key inputs #:allow-other-keys) (substitute* "setup/build.py" (("\\[tool.sip.bindings.pictureflow\\]") "[tool.sip.bindings.pictureflow] tags = [\"WS_X11\"]") (("\\[tool.sip.project\\]") (string-append "[tool.sip.project] -sip-include-dirs = [\"" pyqt "/share/sip" "\"]"))) +sip-include-dirs = [\"" + #$(this-package-input + "python-pyqt-without-qtwebkit") + "/share/sip\"]"))) (substitute* "src/calibre/ebooks/pdf/pdftohtml.py" (("PDFTOHTML = 'pdftohtml'") - (string-append "PDFTOHTML = \"" (assoc-ref inputs "poppler") - "/bin/pdftohtml\""))) - ;; get_exe_path looks in poppler's output for these binaries. Make - ;; it not do that. + (string-append "PDFTOHTML = \"" + (search-input-file inputs "/bin/pdftohtml") + "\""))) + ;; get_exe_path looks in poppler's output for these + ;; binaries. Make it not do that. (substitute* "src/calibre/utils/img.py" - (("get_exe_path..jpegtran..") (string-append "'" (which "jpegtran") "'")) - (("get_exe_path..cjpeg..") (string-append "'" (which "cjpeg") "'")) - (("get_exe_path..optipng..") (string-append "'" (which "optipng") "'")) - (("get_exe_path..JxrDecApp..") (string-append "'" (which "JxrDecApp") "'"))) + (("get_exe_path..jpegtran..") + (string-append "'" + (search-input-file inputs "/bin/jpegtran") + "'")) + (("get_exe_path..cjpeg..") + (string-append "'" + (search-input-file inputs "/bin/cjpeg") + "'")) + (("get_exe_path..optipng..") + (string-append "'" + (search-input-file inputs "/bin/optipng") + "'")) + (("get_exe_path..JxrDecApp..") + (string-append "'" + (search-input-file inputs "/bin/JxrDecApp") + "'"))) ;; Calibre thinks we are installing desktop files into a home ;; directory, but here we butcher the script in to installing ;; to calibres /share directory. - (setenv "XDG_DATA_HOME" (string-append out "/share")) + (setenv "XDG_DATA_HOME" (string-append #$output "/share")) (substitute* "src/calibre/linux.py" (("'~/.local/share'") "''")) - ;; 'python setup.py rapydscript' uses QtWebEngine, which ;; needs to create temporary files in $HOME. (setenv "HOME" "/tmp") - ;; XXX: QtWebEngine will fail if no fonts are available. This ;; can likely be removed when fontconfig has been patched to ;; include TrueType fonts by default. - (symlink (string-append (assoc-ref inputs "font-liberation") + (symlink (string-append #$(this-package-input "font-liberation") "/share/fonts") "/tmp/.fonts") - - (setenv "PODOFO_INC_DIR" (string-append podofo "/include/podofo")) - (setenv "PODOFO_LIB_DIR" (string-append podofo "/lib")) + (let ((podofo #$(this-package-input "podofo"))) + (setenv "PODOFO_INC_DIR" + (string-append podofo "/include/podofo")) + (setenv "PODOFO_LIB_DIR" (string-append podofo "/lib"))) ;; This informs the tests we are a continuous integration ;; environment and thus have no networking. (setenv "CI" "true") - ;; The Qt test complains about being unable to load all image plugins, and I - ;; notice the available plugins list it shows lacks 'svg'. Adding qtsvg doesn't - ;; fix it, so I'm not sure how to fix it. TODO: Fix test and remove this. - (setenv "SKIP_QT_BUILD_TEST" "true") - #t))) - (add-after 'install 'install-rapydscript - (lambda* (#:key inputs #:allow-other-keys) + ;; The Qt test complains about being unable to load all image + ;; plugins, and I notice the available plugins list it shows + ;; lacks 'svg'. Adding qtsvg doesn't fix it, so I'm not sure how + ;; to fix it. TODO: Fix test and remove this. + (setenv "SKIP_QT_BUILD_TEST" "true"))) + (add-after 'install 'install-rapydscript + (lambda _ ;; Unset so QtWebengine doesn't dump temporary files here. - (unsetenv "XDG_DATA_HOME") - (invoke "python" "setup.py" "rapydscript") - #t)) - (add-after 'install 'install-man-pages - (lambda* (#:key outputs #:allow-other-keys) - (copy-recursively - "man-pages" - (string-append (assoc-ref outputs "out") "/share/man")) - #t)) - ;; The font TTF files are used in some miscellaneous tests, so we - ;; unbundle them here to avoid patching the tests. - (add-after 'install 'unbundle-font-liberation - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((font-dest (string-append (assoc-ref outputs "out") - "/share/calibre/fonts/liberation")) - (font-src (string-append (assoc-ref inputs "font-liberation") - "/share/fonts/truetype"))) - (delete-file-recursively font-dest) - (symlink font-src font-dest)) - #t)) - ;; Make run-time dependencies available to the binaries. - (add-after 'wrap 'wrap-program - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (qtwebengine (assoc-ref inputs "qtwebengine"))) - (with-directory-excursion (string-append out "/bin") - (for-each - (lambda (binary) - (wrap-program binary - ;; Make QtWebEngineProcess available. - `("QTWEBENGINEPROCESS_PATH" = - ,(list (string-append - qtwebengine - "/lib/qt5/libexec/QtWebEngineProcess"))))) - ;; Wrap all the binaries shipping with the package, except - ;; for the wrappings created during the 'wrap standard - ;; phase. This extends existing .calibre-real wrappers - ;; rather than create ..calibre-real-real-s. For more - ;; information see: https://issues.guix.gnu.org/43249. - (find-files "." (lambda (file stat) - (not (wrapped-program? file))))))) - #t))))) + (unsetenv "XDG_DATA_HOME") + (invoke "python" "setup.py" "rapydscript"))) + (add-after 'install 'install-man-pages + (lambda _ + (copy-recursively "man-pages" + (string-append #$output "/share/man")))) + ;; The font TTF files are used in some miscellaneous tests, so we + ;; unbundle them here to avoid patching the tests. + (add-after 'install 'unbundle-font-liberation + (lambda _ + (let ((font-dest + (string-append #$output "/share/calibre/fonts/liberation")) + (font-src + (string-append #$(this-package-input "font-liberation") + "/share/fonts/truetype"))) + (delete-file-recursively font-dest) + (symlink font-src font-dest)))) + ;; Make run-time dependencies available to the binaries. + (add-after 'wrap 'wrap-program + (lambda* (#:key inputs #:allow-other-keys) + (with-directory-excursion (string-append #$output "/bin") + (for-each + (lambda (binary) + (wrap-program binary + ;; Make QtWebEngineProcess available. + `("QTWEBENGINEPROCESS_PATH" = + ,(list + (search-input-file + inputs "/lib/qt5/libexec/QtWebEngineProcess"))))) + ;; Wrap all the binaries shipping with the package, except + ;; for the wrappings created during the 'wrap standard + ;; phase. This extends existing .calibre-real wrappers + ;; rather than create ..calibre-real-real-s. For more + ;; information see: https://issues.guix.gnu.org/43249. + (find-files "." (lambda (file stat) + (not (wrapped-program? file))))))))))) (home-page "https://calibre-ebook.com/") (synopsis "E-book library management software") (description "Calibre is an e-book library manager. It can view, convert @@ -515,7 +518,7 @@ following formats: (define-public cozy (package (name "cozy") - (version "1.1.2") + (version "1.2.0") (source (origin (method git-fetch) @@ -524,7 +527,7 @@ following formats: (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "0hifzzhhf0ww6iar9gswjfndy3i54s6jc41zaazlx4scc7r6fhs0")))) + (base32 "0igqf9b77i13sxlk4ziw549h379hmz1slrb3vvf8irk94gxabsaw")))) (build-system meson-build-system) (arguments `(#:glib-or-gtk? #t @@ -559,15 +562,16 @@ following formats: `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path)) `("GUIX_PYTHONPATH" ":" prefix (,python-path ,pylib))))))))) (native-inputs - `(("desktop-file-utils" ,desktop-file-utils) - ("gettext" ,gettext-minimal) - ("glib:bin" ,glib "bin") - ("gobject-introspection" ,gobject-introspection) - ("gtk+:bin" ,gtk+ "bin") - ("pkg-config" ,pkg-config) - ("python" ,python-wrapper))) + (list desktop-file-utils + gettext-minimal + `(,glib "bin") + gobject-introspection + `(,gtk+ "bin") + pkg-config + python-wrapper)) (inputs - (list file + (list bash-minimal + file granite gsettings-desktop-schemas gst-libav @@ -608,7 +612,7 @@ Some of the current features: @item Mpris integration (Media keys & playback info for desktop environment) @end itemize") ;; TODO: Unbundle python-inject. - (license (list license:gpl3+ ;cozy + (license (list license:gpl3+ ;cozy license:asl2.0)))) ;python-inject (bundled dependency) (define-public xchm |