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
openSUSE Build Service is sponsored by