File calibre.spec of Package calibre

# spec file for package calibre
# Copyright (c) 2017 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

Summary:        EBook Management Application
License:        GPL-3.0
Group:          Productivity/Other
Name:           calibre
Version:        2.85.1
Release:        0
Source2:        %{name}.desktop
Source100:      %{name}-rpmlintrc
Patch2:         %{name}
# PATCH-FIX-OPENSUSE: disabling Autoupdate Searcher
Patch3:         %{name}-no-update.diff
Patch99:        asin.patch
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
%if 0%{?suse_version} >= 1330
BuildRequires:  liberation2-fonts
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 >= 0.20.2
BuildRequires:  poppler-tools >= 0.20.2
BuildRequires:  python >= 2.7.9
BuildRequires:  python-apsw >= 3.7.17
BuildRequires:  python-beautifulsoup >= 3.0.5
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
BuildRequires:  python-dnspython >= 1.6.0
BuildRequires:  python-genshi
BuildRequires:  python-lxml >= 3.2.1
BuildRequires:  python-mechanize >= 0.1.11
BuildRequires:  python-odfpy
BuildRequires:  python-psutil >= 0.6.1
BuildRequires:  python-pypdf
BuildRequires:  python-qt5-devel >= 5.3.1
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.0.1
Requires:       python-apsw >= 3.7.17
Requires:       python-beautifulsoup >= 3.0.5
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.6.0
Requires:       python-genshi
Requires:       python-imaging >= 1.1.6
Requires:       python-lxml >= 3.2.1
Requires:       python-mechanize >= 0.1.11
Requires:       python-netifaces >= 0.8
Requires:       python-odfpy
Requires:       python-psutil >= 0.6.1
Requires:       python-pypdf
Requires:       python-qt5 >= 5.3.1
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
%if 0%{?suse_version} >= 1330
Recommends:     liberation2-fonts
Recommends:     liberation-fonts

BuildRoot:      %{_tmppath}/%{name}-%{version}-build

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 to the internet and fetch
metadata for your books. It can download newspapers and convert them
into ebooks for convenient reading. It is cross platform, running on
Linux, Windows and OS X.

%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/
sed -i -e '/^#!\//, 1d' resources/catalog/

# remove the executable flag from files
find src/calibre -name "*.py" -type f  | xargs chmod -x
chmod -x recipes/*

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

cp -v %{SOURCE2}  .

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

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

for i in 24 32 48 64 128 256 512
  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

%suse_update_desktop_file -i -n calibre Office Viewer

%fdupes %{buildroot}

# 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

# add shebangs
sed -i -e '1i#!/usr/bin/python' %{buildroot}%{_libdir}/%{name}/chardet/*.py

# 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}/appdata/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")



# -f %%{name}.lang  -f iso639.lang
%exclude %{_bindir}/calibre-uninstall
%dir %{_datadir}/icons/hicolor/512x512
%dir %{_datadir}/icons/hicolor/512x512/apps
%dir %{_datadir}/appdata

openSUSE Build Service is sponsored by