File kodi.spec of Package kodi
#
# spec file for package kodi
#
# Copyright (c) 2015 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/
#
%{?sle15_python_module_pythons}
%define skip_python310 1
%define skip_python311 1
%define skip_python312 1
%define _git_version %{version}
%define _dav1d_version 1.5.1
%define _python_version 3.13
%define _python_package 313
%define _kodi_addons_dir %{_datadir}/kodi/addons
%ifarch x86_64 i586 i686
%define kodi_sse_opts -DENABLE_SSE=ON \\\
-DENABLE_SSE2=ON \\\
-DENABLE_SSE3=ON \\\
-DENABLE_SSSE3=ON \\\
-DENABLE_SSE4_1=ON \\\
-DENABLE_SSE4_2=ON \\\
-DENABLE_AVX=ON \\\
-DENABLE_AVX2=ON
%else
%define kodi_sse_opts -DENABLE_SSE=OFF \\\
-DENABLE_SSE2=OFF \\\
-DENABLE_SSE3=OFF \\\
-DENABLE_SSSE3=OFF \\\
-DENABLE_SSE4_1=OFF \\\
-DENABLE_SSE4_2=OFF \\\
-DENABLE_AVX=OFF \\\
-DENABLE_AVX2=OFF
%endif
Name: kodi
Version: 22.0a1
Release: 0
Summary: Open source (GPL) software media center
License: GPL-2.0-or-later
Group: Productivity/Multimedia/Video/Players
Url: https://www.kodi.tv
Source0: %{name}-%{version}.tar.xz
Source2: %{name}.service
Source3: %{name}-rpmlintrc
Source4: 30-%{name}-power-options.rules
Source7: system-user-%{name}.conf
Source8: %{name}.logrotate
Source13: https://github.com/xbmc/libdvdnav/archive/refs/tags/6.1.1-Next-Nexus-Alpha2-2.tar.gz
Source14: https://github.com/xbmc/libdvdread/archive/refs/tags/6.1.3-Next-Nexus-Alpha2-2.tar.gz
#Patch21: 021_%{name}_ffmpeg8.patch
Patch22: 022_%{name}_ffmpeg_pkgconfig.patch
Patch50: kodi-995.21-keymaps-change-remote-poweroff-action-to-show-shutdo.patch
Patch100: kodi-100.17-tinker-s-cec-disable-polling.patch
Patch200: kodi-999.16-PR20632-base-m_bFullScreenRoot-setting-on-res-infos-bFullScreen.patch
Patch1000: no-egl.patch
BuildRequires: pkgconfig(libpng)
BuildRequires: pkgconfig(libjpeg)
BuildRequires: pkgconfig(lzo2)
BuildRequires: pkgconfig(flatbuffers)
BuildRequires: pkgconfig(RapidJSON) >= 1.0.2
BuildRequires: pkgconfig(nlohmann_json)
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(avahi-client)
BuildRequires: pkgconfig(avahi-compat-libdns_sd)
BuildRequires: pkgconfig(bluez)
BuildRequires: pkgconfig(dbus-1)
BuildRequires: pkgconfig(fmt) >= 9.1.0
BuildRequires: pkgconfig(libidn2)
BuildRequires: pkgconfig(freetype2)
BuildRequires: pkgconfig(fribidi)
BuildRequires: pkgconfig(lcms2)
BuildRequires: pkgconfig(libass)
BuildRequires: pkgconfig(libbluray)
BuildRequires: pkgconfig(libcap)
BuildRequires: pkgconfig(libcdio)
BuildRequires: pkgconfig(libcec)
BuildRequires: pkgconfig(libcpluff)
BuildRequires: pkgconfig(libcurl)
BuildRequires: crossguid-devel
BuildRequires: ffmpeg-7-libavcodec-devel
BuildRequires: ffmpeg-7-libavdevice-devel
BuildRequires: ffmpeg-7-libavfilter-devel
BuildRequires: ffmpeg-7-libavformat-devel
BuildRequires: ffmpeg-7-libavutil-devel
BuildRequires: ffmpeg-7-libpostproc-devel
BuildRequires: ffmpeg-7-libswresample-devel
BuildRequires: ffmpeg-7-libswscale-devel
BuildRequires: pkgconfig(libdrm) >= 2.4.74
BuildRequires: pkgconfig(libiso9660)
BuildRequires: pkgconfig(libmicrohttpd) >= 0.9.40
BuildRequires: pkgconfig(libnfs) >= 5.0
BuildRequires: pkgconfig(libudfread)
BuildRequires: Mesa-libEGL-devel
BuildRequires: Mesa-libGL-devel
BuildRequires: Mesa-libGLESv2-devel
BuildRequires: Mesa-libGLESv3-devel
BuildRequires: pkgconfig(libdrm)
BuildRequires: pkgconfig(libva)
BuildRequires: pkgconfig(libva-drm)
BuildRequires: pkgconfig(glu)
BuildRequires: pkgconfig(gbm)
BuildRequires: pkgconfig(xkbcommon)
BuildRequires: pkgconfig(libxml-2.0)
BuildRequires: pkgconfig(libxslt)
BuildRequires: pkgconfig(lirc)
BuildRequires: pkgconfig(lzo2)
BuildRequires: pkgconfig(openssl)
BuildRequires: pkgconfig(smbclient)
BuildRequires: pkgconfig(sqlite3)
BuildRequires: pkgconfig(taglib) >= 1.9.0
BuildRequires: pkgconfig(uuid)
BuildRequires: pkgconfig(zlib)
BuildRequires: pkgconfig(libcdio)
BuildRequires: pkgconfig(libinput)
BuildRequires: pkgconfig(libdisplay-info)
BuildRequires: spdlog-devel >= 1.10.0
BuildRequires: libunistring-devel
BuildRequires: giflib-devel
BuildRequires: fstrcmp-devel
BuildRequires: java-devel
BuildRequires: libmariadbd-devel
BuildRequires: sndio-devel
BuildRequires: tinyxml-devel
BuildRequires: pkgconfig(tinyxml2)
BuildRequires: cmake >= 3.18
BuildRequires: automake
BuildRequires: libtool
BuildRequires: ninja
BuildRequires: meson
BuildRequires: clang
BuildRequires: llvm-devel
BuildRequires: lld
BuildRequires: dos2unix
BuildRequires: pkg-config
BuildRequires: doxygen
BuildRequires: graphviz
BuildRequires: swig
BuildRequires: gtest
BuildRequires: polkit
BuildRequires: git
BuildRequires: sysuser-tools
BuildRequires: desktop-file-utils
BuildRequires: nasm
BuildRequires: autoconf
BuildRequires: unzip
BuildRequires: fdupes
BuildRequires: groovy
BuildRequires: apache-commons-lang3
BuildRequires: apache-commons-text
BuildRequires: pkgconfig(libudev)
BuildRequires: pkgconfig(exiv2)
BuildRequires: pkgconfig(dav1d)
BuildRequires: group(audio)
BuildRequires: group(kvm)
BuildRequires: %{python_module devel}
# Required for some addons
Requires: %{python_module mysql-connector-python}
Requires: %{python_module Pillow}
Requires: %{python_module ijson}
Requires: %{python_module requests}
Requires: %{python_module defusedxml}
Requires: %{python_module numpy}
Requires: %{python_module requests-futures}
Requires: %{python_module pycryptodome}
Requires: libnfs >= 5.0
Requires: samba-client
Requires: polkit
Requires: user(kodi) group(kodi) group(audio)
Requires(post): %fillup_prereq
Recommends: kodi-eventclient-hama-mce
Recommends: mariadb
Suggests: logrotate
Conflicts: kodi-gbm kodi-rpi
%{?systemd_requires}
%description
Kodi is an open source (GPL) software media center for playing videos, music, pictures, games, and more.
%package devel
Summary: Header files to build Kodi add-ons
Group: Development/Libraries/C and C++
Requires: cmake >= 3.18
%description devel
Header files to build Kodi add-ons
%package -n system-user-%{name}
Summary: System user and group %{name}
BuildArch: noarch
%if %{with systemd}
%{?sysusers_requires}
%endif
%description -n system-user-%{name}
System user and group used by %{name}
%prep
%autosetup -n %{name}-%{version} -p1
rm -f $(find . -name ".gitignore")
# Update Shebangs
find . -type f -exec sed -i 's|#!/usr/bin/env python3|#!/usr/bin/python3.13|g' {} +
# Remove not needed cacert
rm -rf system/certs
# Fix wrong line encoding
dos2unix addons/service.xbmc.versioncheck/resources/lib/version_check/service.py
dos2unix addons/service.xbmc.versioncheck/resources/lib/version_check/viewer.py
# avoid long delays when powerkit isn't running
sed -i \
-e '/dbus_connection_send_with_reply_and_block/s:-1:3000:' \
xbmc/platform/linux/*.cpp
# Do not build TexturePacker
sed -i 's| BUILD_ALWAYS ON| BUILD_ALWAYS OFF|g' cmake/modules/buildtools/FindTexturePacker.cmake
%sysusers_generate_pre %{SOURCE7} %{name}
%build
export CC=clang
export CXX=clang++
%cmake \
-DVERBOSE=ON \
-DCMAKE_C_FLAGS="%optflags -fPIC" \
-DCMAKE_CXX_FLAGS="%optflags" \
-DCMAKE_EXE_LINKER_FLAGS="%optflags" \
-DCMAKE_BUILD_TYPE=Release \
-DPYTHON_VER=%{_python_version} \
-DPYTHON_EXECUTABLE="%{_bindir}/python%{_python_version}" \
-DENABLE_GOLD=OFF \
-DENABLE_MOLD=OFF \
-DCORE_SYSTEM_NAME=linux \
-DAPP_RENDER_SYSTEM=gles \
-DCORE_PLATFORM_NAME=gbm \
%{kodi_sse_opts} \
-DGIT_VERSION="%{_git_version}" \
-DENABLE_EVENTCLIENTS=ON \
-DENABLE_INTERNAL_FFMPEG=OFF \
-DENABLE_INTERNAL_DAV1D=OFF \
-DENABLE_INTERNAL_CROSSGUID=OFF \
-DENABLE_INTERNAL_UDFREAD=OFF \
-DLIBDVDNAV_URL="%{SOURCE13}" \
-DLIBDVDREAD_URL="%{SOURCE14}" \
-Dgroovy_SOURCE_DIR="%{_datadir}/groovy" \
-Dapache-commons-lang_SOURCE_DIR="%{_javadir}" \
-Dapache-commons-text_SOURCE_DIR="%{_javadir}/apache-commons-text" \
-DENABLE_MARIADBCLIENT=ON \
-DENABLE_OPTICAL=ON \
-DENABLE_BLURAY=ON \
-DENABLE_INTERNAL_GTEST=OFF \
-DENABLE_INTERNAL_TINYXML2=OFF \
-DENABLE_AIRTUNES=OFF \
-DENABLE_DVDCSS=OFF \
-DENABLE_PULSEAUDIO=OFF \
-DENABLE_PIPEWIRE=OFF \
-DENABLE_MYSQLCLIENT=OFF \
-DENABLE_INTERNAL_FLATBUFFERS=OFF \
-DENABLE_INTERNAL_FMT=OFF \
-DENABLE_INTERNAL_FSTRCMP=OFF \
-DENABLE_INTERNAL_NLOHMANNJSON=OFF \
-DENABLE_INTERNAL_SPDLOG=OFF \
-DENABLE_INTERNAL_CEC=OFF \
-DENABLE_INTERNAL_NFS=OFF \
-DENABLE_INTERNAL_PCRE=OFF \
-DENABLE_INTERNAL_TAGLIB=OFF \
-DENABLE_VAAPI=ON \
-DENABLE_VDPAU=OFF \
-DUSE_LTO=ON \
-DENABLE_TESTING=OFF \
-DENABLE_DEBUGFISSION=OFF
%cmake_build
%install
%cmake_install
# remove win32 source files
rm -f %{buildroot}%{_kodi_addons_dir}/library.kodi.addon/dlfcn-win32.cpp
rm -f %{buildroot}%{_kodi_addons_dir}/library.kodi.addon/dlfcn-win32.h
rm -f %{buildroot}%{_kodi_addons_dir}/library.xbmc.addon/dlfcn-win32.cpp
rm -f %{buildroot}%{_kodi_addons_dir}/library.xbmc.addon/dlfcn-win32.h
# remove duplicate header files
rm -f %{buildroot}%{_kodi_addons_dir}/library.kodi.addon/libXBMC_addon.h
rm -f %{buildroot}%{_kodi_addons_dir}/library.xbmc.addon/libXBMC_addon.h
rm -f %{buildroot}%{_kodi_addons_dir}/library.kodi.codec/libXBMC_codec.h
rm -f %{buildroot}%{_kodi_addons_dir}/library.xbmc.codec/libXBMC_codec.h
rm -f %{buildroot}%{_kodi_addons_dir}/library.kodi.gui/libXBMC_gui.h
rm -f %{buildroot}%{_kodi_addons_dir}/library.xbmc.gui/libXBMC_gui.h
rm -f %{buildroot}%{_kodi_addons_dir}/library.kodi.pvr/libXBMC_pvr.h
rm -f %{buildroot}%{_kodi_addons_dir}/library.xbmc.pvr/libXBMC_pvr.h
rm -f %{buildroot}%{_kodi_addons_dir}/library.kodi.guilib/libKODI_guilib.h
# remove the doc files from unversioned /usr/share/doc/xbmc, they should be in versioned docdir
rm -r %{buildroot}/%{_datadir}/doc/
# Stop shipping the duplicate xsession file
rm -f %{buildroot}/%{_datadir}/xsessions/xbmc.desktop
# system-wide service
install -D -m 0644 %{SOURCE2} %{buildroot}/%{_unitdir}/%{name}.service
%if 0%{?suse_version} <= 1600
mkdir -p %{buildroot}%{_sbindir}
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name}
%endif
# Kodi-Home
install -d -m 750 %{buildroot}/var/lib/%{name}
# PolicyKit
install -d -m 750 %{buildroot}/%{_sysconfdir}/polkit-1/rules.d/
install -m 644 %{SOURCE4} %{buildroot}/%{_sysconfdir}/polkit-1/rules.d/
# System user
install -d -m 0755 %{buildroot}%{_sysusersdir}
install -m 644 %{SOURCE7} %{buildroot}%{_sysusersdir}/system-user-%{name}.conf
# Log-Directory
install -d -m 0775 %{buildroot}/var/log/%{name}
# copy manpages
install -m 644 -D docs/manpages/kodi-standalone.1 %{buildroot}%{_mandir}/man1/kodi-standalone.1
install -m 644 -D docs/manpages/kodi.bin.1 %{buildroot}%{_mandir}/man1/kodi.1
# desktop-file
desktop-file-install \
--dir=%{buildroot}%{_datadir}/applications \
%{buildroot}%{_datadir}/applications/kodi.desktop
# Logrotate
install -d -m 0755 %{buildroot}/%{_sysconfdir}/logrotate.d
install -m 644 %{SOURCE8} %{buildroot}/%{_sysconfdir}/logrotate.d/%{name}
%fdupes %{buildroot}/%{_datadir}/%{name}
%fdupes %{buildroot}/%{_libdir}/%{name}
%pre -n system-user-%{name} -f %{name}.pre
%pre
%service_add_pre %{name}.service
%post
%service_add_post %{name}.service
%fillup_only -n %{name}
%preun
%service_del_preun %{name}.service
%postun
%service_del_postun %{name}.service
%files
%defattr(-,root,root,-)
%exclude %{_datadir}/%{name}/cmake/
%exclude %{_libdir}/%{name}/cmake/
%dir %{_datadir}/wayland-sessions
%dir %{_libdir}/%{name}
%dir %{_libdir}/%{name}/system
%dir %{_libdir}/python%{_python_version}/site-packages/%{name}
%dir /usr/lib/firewalld
%dir /usr/lib/firewalld/services
%dir %{_libdir}/%{name}/system/players
%dir %{_libdir}/%{name}/system/players/VideoPlayer
%dir %attr(0750,kodi,kodi) /var/lib/kodi
%dir %attr(0775,root,root) /var/log/%{name}
%{_bindir}/*
%{_datadir}/%{name}
%{_datadir}/applications/*.desktop
%{_datadir}/icons/hicolor
%{_datadir}/pixmaps/*
%{_datadir}/xsessions/*.desktop
%{_datadir}/wayland-sessions/kodi-gbm.desktop
%{_datadir}/metainfo/org.xbmc.kodi.metainfo.xml
%{_libdir}/%{name}/%{name}*
%{_libdir}/%{name}/system/*.so
%{_libdir}/python%{_python_version}/site-packages/%{name}/*
%{_libdir}/%{name}/system/players/VideoPlayer/libdvdnav-x86_64-linux.so
/usr/lib/firewalld/services/%{name}-*.xml
%{_unitdir}/%{name}.service
%if 0%{?suse_version} <= 1600
%{_sbindir}/rc%{name}
%endif
%{_mandir}/man1/kodi.1.gz
%{_mandir}/man1/kodi-standalone.1.gz
%config %{_sysconfdir}/logrotate.d/%{name}
%config %{_sysconfdir}/polkit-1/rules.d/30-%{name}-power-options.rules
%files devel
%defattr(-,root,root,-)
%dir %{_libdir}/%{name}/cmake
%dir %{_datadir}/%{name}/cmake
%{_includedir}/%{name}
%{_datadir}/%{name}/cmake
%{_libdir}/%{name}/cmake/
%files -n system-user-%{name}
%defattr(-,root,root)
%{_sysusersdir}/system-user-%{name}.conf
%changelog