File calibre.spec of Package calibre

#
# spec file for package calibre
#
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#


Name:           calibre
Version:        3.23.0
Release:        0
Summary:        EBook Management Application
License:        GPL-3.0-only
Group:          Productivity/Other
Url:            http://calibre-ebook.com
Source0:        http://download.calibre-ebook.com/%{version}/calibre-%{version}.tar.xz
Source2:        %{name}.desktop
Source100:      %{name}-rpmlintrc
Patch2:         %{name}-setup.install.py.diff
# PATCH-FIX-OPENSUSE: disabling Autoupdate Searcher
Patch3:         %{name}-no-update.diff
BuildRequires:  fdupes
BuildRequires:  help2man
BuildRequires:  hicolor-icon-theme
BuildRequires:  update-desktop-files

# A note on BuildRequires and Requires:
#
# Requires should always be a subset of BuildRequires. If there are packages
# that are only Required
# * there is no way to check whether these packages are available in the given
#   repositories unless you install the package (the build environment only
#   contains packages from the given repositories and the project
# * the project's repository might become inconsistent, because Required
#   packages do not block a build. So a package might get published, although
#   a Required package does not build
# For those reasons put Requires also in the BuildRequires list below
BuildRequires:  chmlib-devel >= 0.40
BuildRequires:  dbus-1-python >= 1.2.0
BuildRequires:  libQt5Core-private-headers-devel >= 5.3.2
BuildRequires:  libQt5Gui-private-headers-devel >= 5.3.2
BuildRequires:  libQt5PlatformSupport-private-headers-devel >= 5.3.2
BuildRequires:  liberation-fonts
BuildRequires:  libicu-devel >= 4.4.0
BuildRequires:  libmtp-devel >= 1.1.5
BuildRequires:  libopenssl-devel
BuildRequires:  libpodofo-devel >= 0.8.2
BuildRequires:  libpoppler-devel >= 0.20.2
BuildRequires:  libwmf-devel >= 0.2.8
BuildRequires:  optipng >= 0.7.5
BuildRequires:  podofo >= 0.8.2
BuildRequires:  poppler-tools >= 0.20.2
BuildRequires:  python >= 2.7.9
BuildRequires:  python-apsw >= 3.7.17
BuildRequires:  python-beautifulsoup >= 3.0.5
# upstream use python-chardet 3.0.3
BuildRequires:  python-chardet
BuildRequires:  python-cherrypy
BuildRequires:  python-cssselect >= 0.7.1
BuildRequires:  python-cssutils >= 0.9.9
BuildRequires:  python-dateutil >= 1.4.1
BuildRequires:  python-devel >= 2.7.9
# upstream use python-dnspython 0.14.0
BuildRequires:  python-dnspython >= 1.12.0
BuildRequires:  python-genshi
BuildRequires:  python-html5-parser
BuildRequires:  python-lxml >= 3.8.0
BuildRequires:  python-mechanize >= 0.1.11
# upstream use python-msgpack-python 0.4.8
BuildRequires:  python-msgpack-python >= 0.4.6
BuildRequires:  python-odfpy
BuildRequires:  python-psutil >= 0.6.1
BuildRequires:  python-qt5-devel >= 5.3.1
BuildRequires:  python-regex >= 2017.05.26
BuildRequires:  python-setuptools
BuildRequires:  python-sip-devel >= 4.12
BuildRequires:  sqlite3-devel
BuildRequires:  xdg-utils >= 1.0.2
# calibre no longer depends on ImageMagick
# but keept BuildRequires to convert icon to serveral sizes
BuildRequires:  pkgconfig(ImageMagick) >= 6.5.9
# upstream use for PIL: BuildRequires:  python-imaging >= 1.1.6
BuildRequires:  python-Pillow

Requires:       chmlib >= 0.40
Requires:       dbus-1-python >= 1.2.0
Requires:       libicu >= 4.4
Requires:       libmtp9 >= 1.1.5
Requires:       libwmf >= 0.2.8
Requires:       optipng >= 0.7.5
Requires:       podofo >= 0.8.2
Requires:       poppler-tools >= 0.20.2
Requires:       python >= 2.7.9
Requires:       python-Pygments >= 2.1.3
Requires:       python-apsw >= 3.7.17
Requires:       python-beautifulsoup >= 3.0.5
Requires:       python-chardet
Requires:       python-cherrypy
Requires:       python-cssselect >= 0.7.1
Requires:       python-cssutils >= 0.9.9
Requires:       python-dateutil >= 1.4.1
Requires:       python-dnspython >= 1.12.0
Requires:       python-genshi
Requires:       python-html5-parser
Requires:       python-imaging >= 1.1.6
Requires:       python-lxml >= 3.8.0
Requires:       python-mechanize >= 0.1.11
Requires:       python-msgpack-python >= 0.4.6
Requires:       python-netifaces >= 0.8
Requires:       python-odfpy
Requires:       python-psutil >= 0.6.1
Requires:       python-qt5 >= 5.3.1
Requires:       python-regex >= 2017.05.26
Requires:       python-setuptools
Requires:       python-sip >= 4.12.1
Requires:       sqlite3
Requires:       xdg-utils >= 1.0.2
# upstream use for PIL: Requires:       python-imaging >= 1.1.6
Requires:       python-Pillow
%requires_eq    libQt5Core5
%requires_eq    libQt5Gui5
%requires_eq    python-qt5
%requires_eq    python-sip
Recommends:     liberation-fonts

BuildRoot:      %{_tmppath}/%{name}-%{version}-build
%{py_requires}
# http://lists.opensuse.org/opensuse-packaging/2009-08/msg00110.html

%description
Calibre is an ebook library manager. It can view, convert and catalog
ebooks in most of the major ebook formats. It can also talk to a few
ebook reader devices. It can go out on the Internet and fetch
metadata for books. It can download newspapers and convert them
into ebooks for convenient reading.

%prep
%setup -q
%patch2 -p1
%patch3 -p1 -b .no-update

# dos2unix newline conversion
sed -i 's/\r//' src/calibre/web/feeds/recipes/*

# remove shebangs
sed -i -e '/^#!\//, 1d' src/calibre/*/*/*/*/*.py
sed -i -e '/^#!\//, 1d' src/calibre/*/*/*/*.py
sed -i -e '/^#!\//, 1d' src/calibre/*/*/*.py
sed -i -e '/^#![ ]*\//, 1d' src/calibre/*/*.py
sed -i -e '/^#!\//, 1d' src/calibre/*.py
sed -i -e '/^#!\//, 1d' src/templite/*.py
sed -i -e '/^#!\//, 1d' src/tinycss/*.py
sed -i -e '/^#!\//, 1d' src/tinycss/*/*.py
sed -i -e '/^#!\//, 1d' resources/default_tweaks.py
sed -i -e '/^#!\//, 1d' resources/catalog/section_list_templates.py

# remove the executable flag from files
find src/calibre -name "*.py" -type f -exec chmod -x {} +
chmod -x recipes/*.recipe

# remove bundled beautifulsoup
rm -f src/calibre/ebooks/BeautifulSoup.py
find "." -type f -name \*.py -exec \
    sed -e 's/calibre.ebooks.BeautifulSoup/BeautifulSoup/' -i {} +

# rpmlint: wrong-script-interpreter /usr/bin/env python2
find setup -type f  | xargs sed -i -e 's:#!/usr/bin/env python2:#!/usr/bin/python2:g'

cp -v %{SOURCE2}  .

%build
LANG="en_US.UTF8" \
CFLAGS="%{optflags}" \
CXXFLAGS="%{optflags}" \
OVERRIDE_CFLAGS="%{optflags}" \
python setup.py build

%install
python setup.py install \
   --prefix=%{_prefix} \
   --root=%{buildroot}%{_prefix} \
   --staging-bindir=%{buildroot}%{_bindir} \
   --staging-libdir=%{buildroot}%{_libdir} \
   --staging-sharedir=%{buildroot}%{_datadir} \
   --staging-mandir=%{buildroot}%{_mandir} \
   --libdir=%{_libdir}

# GENERATE AND INSTALL HIRES ICONS INTO HICOLOR DIR (PRESENT ICON LOOKS BLURRED ON HiDPI)
for i in 24 32 48 64 128 256 512
do
  mkdir -p %{buildroot}%{_datadir}/icons/hicolor/${i}x${i}/apps
  convert -strip icons/calibre.png \
          -resize ${i}x${i} %{buildroot}%{_datadir}/icons/hicolor/${i}x${i}/apps/%{name}.png
done

%suse_update_desktop_file -i -n calibre Office Viewer

%fdupes %{buildroot}/%{_prefix}

# packages aren't allowed to register mimetypes like this
rm -f %{buildroot}%{_datadir}/applications/defaults.list

# these are provided as separate packages
rm -rf %{buildroot}%{_libdir}/%{name}/{odf,cherrypy,pyPdf,encutils,cssutils}
rm -rf %{buildroot}%{_libdir}/%{name}/cal/utils/genshi
rm -rf %{buildroot}%{_libdir}/%{name}/cal/trac
# Also the Liberation fonts are provided as separate package
# but need symlink
rm -rf %{buildroot}%{_datadir}/%{name}/fonts/liberation
ln -s %{_datadir}/fonts/truetype/ %{buildroot}%{_datadir}/%{name}/fonts/liberation

# appdata file references calibre-gui.desktop, and .appdata.xml file should necessarily have matching name with .desktop file in order for the app to show up in Software Centres
mv %{buildroot}%{_datadir}/applications/calibre.desktop %{buildroot}%{_datadir}/applications/calibre-gui.desktop

# Remove all appdata.xml files but the main one, we do not install the corresponding .desktop files
rm %{buildroot}%{_datadir}/metainfo/calibre-ebook-{edit,viewer}.appdata.xml

# boo#1022710: fix upgrade from 13.2 to Leap
# liberation has become a symlink in Leap and RPM does not like to overwrite a directory with a symlink
%pretrans -p <lua>
st = posix.stat("%{_datadir}/%{name}/fonts/liberation")
if st and st.type == "directory" then
  os.execute("rm -rf %{_datadir}/%{name}/fonts/liberation")
end

%post
%desktop_database_post
%icon_theme_cache_post

%postun
%desktop_database_postun
%icon_theme_cache_postun

%files
# -f %%{name}.lang  -f iso639.lang
%defattr(-,root,root)
%{_bindir}/*
%exclude %{_bindir}/calibre-uninstall
%{_datadir}/applications/%{name}-gui.desktop
%dir %{_datadir}/icons/hicolor/512x512
%dir %{_datadir}/icons/hicolor/512x512/apps
%{_datadir}/icons/hicolor/*/apps/*.png
%{_datadir}/%{name}/
%{_libdir}/%{name}/
%dir %{_datadir}/metainfo
%{_datadir}/metainfo/%{name}-gui.appdata.xml
%{_datadir}/bash-completion/completions/%{name}
%{python_sitelib}/init_calibre.py

%changelog
openSUSE Build Service is sponsored by