diff options
Diffstat (limited to 'nixpkgs/pkgs/applications/misc/calibre')
4 files changed, 215 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/misc/calibre/default.nix b/nixpkgs/pkgs/applications/misc/calibre/default.nix new file mode 100644 index 000000000000..d838cd4e859f --- /dev/null +++ b/nixpkgs/pkgs/applications/misc/calibre/default.nix @@ -0,0 +1,171 @@ +{ lib +, mkDerivation +, fetchurl +, poppler_utils +, pkg-config +, libpng +, imagemagick +, libjpeg +, fontconfig +, podofo +, qtbase +, qmake +, icu +, sqlite +, hunspell +, hyphen +, unrarSupport ? false +, chmlib +, pythonPackages +, libusb1 +, libmtp +, xdg_utils +, makeDesktopItem +, removeReferencesTo +}: + +mkDerivation rec { + pname = "calibre"; + version = "4.23.0"; + + src = fetchurl { + url = "https://download.calibre-ebook.com/${version}/${pname}-${version}.tar.xz"; + sha256 = "sha256-Ft5RRzzw4zb5RqVyUaHk9Pu6H4V/F9j8FKoTLn61lRg="; + }; + + patches = [ + # Patches from Debian that: + # - disable plugin installation (very insecure) + ./disable_plugins.patch + # - switches the version update from enabled to disabled by default + ./no_updates_dialog.patch + # the unrar patch is not from debian + ] ++ lib.optional (!unrarSupport) ./dont_build_unrar_plugin.patch; + + prePatch = '' + sed -i "/pyqt_sip_dir/ s:=.*:= '${pythonPackages.pyqt5}/share/sip/PyQt5':" \ + setup/build_environment.py + + # Remove unneeded files and libs + rm -rf resources/calibre-portable.* \ + src/odf + ''; + + dontUseQmakeConfigure = true; + + enableParallelBuilding = true; + + nativeBuildInputs = [ pkg-config qmake removeReferencesTo ]; + + CALIBRE_PY3_PORT = builtins.toString pythonPackages.isPy3k; + + buildInputs = [ + chmlib + fontconfig + hunspell + hyphen + icu + imagemagick + libjpeg + libmtp + libpng + libusb1 + podofo + poppler_utils + qtbase + sqlite + xdg_utils + ] ++ ( + with pythonPackages; [ + apsw + beautifulsoup4 + css-parser + cssselect + dateutil + dnspython + feedparser + html2text + html5-parser + lxml + markdown + mechanize + msgpack + netifaces + pillow + pyqt5 + pyqtwebengine + python + regex + sip + # the following are distributed with calibre, but we use upstream instead + odfpy + ] ++ lib.optional (unrarSupport) unrardll + ); + + installPhase = '' + runHook preInstall + + export HOME=$TMPDIR/fakehome + export POPPLER_INC_DIR=${poppler_utils.dev}/include/poppler + export POPPLER_LIB_DIR=${poppler_utils.out}/lib + export MAGICK_INC=${imagemagick.dev}/include/ImageMagick + export MAGICK_LIB=${imagemagick.out}/lib + export FC_INC_DIR=${fontconfig.dev}/include/fontconfig + export FC_LIB_DIR=${fontconfig.lib}/lib + export PODOFO_INC_DIR=${podofo.dev}/include/podofo + export PODOFO_LIB_DIR=${podofo.lib}/lib + export SIP_BIN=${pythonPackages.sip}/bin/sip + export XDG_DATA_HOME=$out/share + export XDG_UTILS_INSTALL_MODE="user" + + ${pythonPackages.python.interpreter} setup.py install --root=$out \ + --prefix=$out \ + --libdir=$out/lib \ + --staging-root=$out \ + --staging-libdir=$out/lib \ + --staging-sharedir=$out/share + + PYFILES="$out/bin/* $out/lib/calibre/calibre/web/feeds/*.py + $out/lib/calibre/calibre/ebooks/metadata/*.py + $out/lib/calibre/calibre/ebooks/rtf2xml/*.py" + + sed -i "s/env python[0-9.]*/python/" $PYFILES + sed -i "2i import sys; sys.argv[0] = 'calibre'" $out/bin/calibre + + mkdir -p $out/share + cp -a man-pages $out/share/man + + runHook postInstall + ''; + + # Wrap manually + dontWrapQtApps = true; + dontWrapGApps = true; + + # Remove some references to shrink the closure size. This reference (as of + # 2018-11-06) was a single string like the following: + # /nix/store/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-podofo-0.9.6-dev/include/podofo/base/PdfVariant.h + preFixup = '' + remove-references-to -t ${podofo.dev} \ + $out/lib/calibre/calibre/plugins${lib.optionalString pythonPackages.isPy3k "/3"}/podofo.so + + for program in $out/bin/*; do + wrapProgram $program \ + ''${qtWrapperArgs[@]} \ + ''${gappsWrapperArgs[@]} \ + --prefix PYTHONPATH : $PYTHONPATH \ + --prefix PATH : ${poppler_utils.out}/bin + done + ''; + + disallowedReferences = [ podofo.dev ]; + + meta = with lib; { + description = "Comprehensive e-book software"; + homepage = "https://calibre-ebook.com"; + license = with licenses; if unrarSupport then unfreeRedistributable else gpl3; + maintainers = with maintainers; [ domenkozar pSub AndersonTorres ]; + platforms = platforms.linux; + inherit version; + }; +} diff --git a/nixpkgs/pkgs/applications/misc/calibre/disable_plugins.patch b/nixpkgs/pkgs/applications/misc/calibre/disable_plugins.patch new file mode 100644 index 000000000000..9ef1dd04251d --- /dev/null +++ b/nixpkgs/pkgs/applications/misc/calibre/disable_plugins.patch @@ -0,0 +1,17 @@ +Description: Disable plugin dialog. It uses a totally non-authenticated and non-trusted way of installing arbitrary code. +Author: Martin Pitt <mpitt@debian.org> +Bug-Debian: http://bugs.debian.org/640026 + +Index: calibre-0.8.29+dfsg/src/calibre/gui2/actions/preferences.py +=================================================================== +--- calibre-0.8.29+dfsg.orig/src/calibre/gui2/actions/preferences.py 2011-12-16 05:49:14.000000000 +0100 ++++ calibre-0.8.29+dfsg/src/calibre/gui2/actions/preferences.py 2011-12-20 19:29:04.798468930 +0100 +@@ -28,8 +28,6 @@ + pm.addAction(QIcon(I('config.png')), _('Preferences'), self.do_config) + cm('welcome wizard', _('Run welcome wizard'), + icon='wizard.png', triggered=self.gui.run_wizard) +- cm('plugin updater', _('Get plugins to enhance calibre'), +- icon='plugins/plugin_updater.png', triggered=self.get_plugins) + if not DEBUG: + pm.addSeparator() + cm('restart', _('Restart in debug mode'), icon='debug.png', diff --git a/nixpkgs/pkgs/applications/misc/calibre/dont_build_unrar_plugin.patch b/nixpkgs/pkgs/applications/misc/calibre/dont_build_unrar_plugin.patch new file mode 100644 index 000000000000..5164b80a0bee --- /dev/null +++ b/nixpkgs/pkgs/applications/misc/calibre/dont_build_unrar_plugin.patch @@ -0,0 +1,12 @@ +diff --git a/src/calibre/ebooks/metadata/archive.py b/src/calibre/ebooks/metadata/archive.py +index 938ab24..1e095f8 100644 +--- a/src/calibre/ebooks/metadata/archive.py ++++ b/src/calibre/ebooks/metadata/archive.py +@@ -44,7 +44,7 @@ + description = _('Extract common e-book formats from archive files ' + '(ZIP/RAR). Also try to autodetect if they are actually ' + 'CBZ/CBR files.') +- file_types = {'zip', 'rar'} ++ file_types = {'zip'} + supported_platforms = ['windows', 'osx', 'linux'] + on_import = True diff --git a/nixpkgs/pkgs/applications/misc/calibre/no_updates_dialog.patch b/nixpkgs/pkgs/applications/misc/calibre/no_updates_dialog.patch new file mode 100644 index 000000000000..faaaf2c19949 --- /dev/null +++ b/nixpkgs/pkgs/applications/misc/calibre/no_updates_dialog.patch @@ -0,0 +1,15 @@ +diff -burN calibre-2.9.0.orig/src/calibre/gui2/main.py calibre-2.9.0/src/calibre/gui2/main.py +--- calibre-2.9.0.orig/src/calibre/gui2/main.py 2014-11-09 20:09:54.081231882 +0800 ++++ calibre-2.9.0/src/calibre/gui2/main.py 2014-11-09 20:15:48.193033844 +0800 +@@ -37,8 +37,9 @@ + help=_('Start minimized to system tray.')) + parser.add_option('-v', '--verbose', default=0, action='count', + help=_('Ignored, do not use. Present only for legacy reasons')) +- parser.add_option('--no-update-check', default=False, action='store_true', +- help=_('Do not check for updates')) ++ parser.add_option('--update-check', dest='no_update_check', default=True, ++ action='store_false', ++ help=_('Check for updates')) + parser.add_option('--ignore-plugins', default=False, action='store_true', + help=_('Ignore custom plugins, useful if you installed a plugin' + ' that is preventing calibre from starting')) |