| 1 | # Contributor: Carlo Landmeter <[email protected]> |
| 2 | maintainer="Achill Gilgenast <[email protected]>" |
| 3 | pkgname=kodi |
| 4 | pkgver=21.3 |
| 5 | _realname=Omega |
| 6 | pkgrel=8 |
| 7 | _libdvdcss="1.4.3-Next-Nexus-Alpha2-2" |
| 8 | _libdvdnav="6.1.1-Next-Nexus-Alpha2-2" |
| 9 | _libdvdread="6.1.3-Next-Nexus-Alpha2-2" |
| 10 | _crossguid="ca1bf4b810e2d188d04cb6286f957008ee1b7681" |
| 11 | pkgdesc="Software media player and entertainment hub for digital media" |
| 12 | url="https://kodi.tv/" |
| 13 | # armhf: flatbuffers |
| 14 | # loongarch64: clang is saying the triple-implied ABI is invalid |
| 15 | arch="all !armhf !loongarch64" |
| 16 | license="GPL-2.0-only" |
| 17 | install="kodi-gbm.pre-install" |
| 18 | depends=" |
| 19 | curl |
| 20 | hicolor-icon-theme |
| 21 | py3-bluez |
| 22 | py3-pillow |
| 23 | py3-simplejson |
| 24 | python3 |
| 25 | xdpyinfo |
| 26 | " |
| 27 | # Required dependencies |
| 28 | depends_dev=" |
| 29 | curl-dev |
| 30 | ffmpeg6-dev |
| 31 | flatbuffers-dev |
| 32 | fmt-dev |
| 33 | freetype-dev |
| 34 | fribidi-dev |
| 35 | fstrcmp-dev |
| 36 | giflib-dev |
| 37 | glu-dev |
| 38 | gtest-dev |
| 39 | libass-dev |
| 40 | libcdio-dev |
| 41 | libdisplay-info-dev |
| 42 | libdrm-dev |
| 43 | libjpeg-turbo-dev |
| 44 | libunistring-dev |
| 45 | libvdpau-dev |
| 46 | lzo-dev |
| 47 | mesa-dev |
| 48 | openssl-dev>3 |
| 49 | pcre-dev |
| 50 | rapidjson-dev |
| 51 | spdlog-dev |
| 52 | sqlite-dev |
| 53 | taglib-dev |
| 54 | tinyxml2-dev |
| 55 | tinyxml-dev |
| 56 | zlib-dev |
| 57 | " |
| 58 | # Required for Wayland |
| 59 | depends_dev=" |
| 60 | $depends_dev |
| 61 | libxkbcommon-dev |
| 62 | waylandpp-dev |
| 63 | " |
| 64 | # Required for gbm |
| 65 | depends_dev=" |
| 66 | $depends_dev |
| 67 | libinput-dev |
| 68 | " |
| 69 | # Optional for extra features |
| 70 | depends_dev=" |
| 71 | $depends_dev |
| 72 | alsa-lib-dev |
| 73 | avahi-dev |
| 74 | bluez-dev |
| 75 | dav1d-dev |
| 76 | dbus-dev |
| 77 | eudev-dev |
| 78 | lcms2-dev |
| 79 | libbluray-dev |
| 80 | libcap-dev |
| 81 | libcec-dev |
| 82 | libmicrohttpd-dev |
| 83 | libnfs-dev |
| 84 | libplist-dev |
| 85 | libshairport-dev |
| 86 | libudfread-dev |
| 87 | libva-glx-dev |
| 88 | libva-glx-dev |
| 89 | libxslt-dev |
| 90 | libxslt-dev |
| 91 | mariadb-connector-c-dev |
| 92 | pipewire-dev |
| 93 | pulseaudio-dev |
| 94 | python3-dev |
| 95 | samba-dev |
| 96 | " |
| 97 | makedepends=" |
| 98 | $depends_dev |
| 99 | autoconf |
| 100 | automake |
| 101 | bash |
| 102 | clang |
| 103 | cmake |
| 104 | doxygen |
| 105 | graphviz |
| 106 | libtool |
| 107 | lld |
| 108 | llvm |
| 109 | nasm |
| 110 | samurai |
| 111 | swig |
| 112 | tar |
| 113 | wayland-protocols |
| 114 | xz |
| 115 | " |
| 116 | subpackages=" |
| 117 | $pkgname-dev |
| 118 | $pkgname-doc |
| 119 | $pkgname-openrc |
| 120 | $pkgname-x11 |
| 121 | $pkgname-wayland |
| 122 | $pkgname-gbm |
| 123 | $pkgname-polkit::noarch |
| 124 | " |
| 125 | # TODO: bring back the py3-kodi subpackage |
| 126 | # currently doesn't seem to have any files |
| 127 | # py3-$pkgname:py3 |
| 128 | replaces="xbmc" |
| 129 | options="ldpath-recursive !check" # No testsuite |
| 130 | source="https://github.com/xbmc/xbmc/archive/$pkgver-$_realname.tar.gz |
| 131 | crossguid-$_crossguid.tar.gz::https://mirrors.kodi.tv/build-deps/sources/crossguid-$_crossguid.tar.gz |
| 132 | libdvdcss-$_libdvdcss.tar.gz::https://github.com/xbmc/libdvdcss/archive/$_libdvdcss.tar.gz |
| 133 | libdvdnav-$_libdvdnav.tar.gz::https://github.com/xbmc/libdvdnav/archive/$_libdvdnav.tar.gz |
| 134 | libdvdread-$_libdvdread.tar.gz::https://github.com/xbmc/libdvdread/archive/$_libdvdread.tar.gz |
| 135 | fix-musl-incompability.patch |
| 136 | gcc13.patch |
| 137 | lfs64.patch |
| 138 | sse-build.patch |
| 139 | other-archs.patch |
| 140 | dyn-pagesize.patch |
| 141 | ppc-no-native-endian-swap.patch |
| 142 | gcc15-musl.patch |
| 143 | kodi.initd |
| 144 | 60-kodi.rules |
| 145 | " |
| 146 | builddir="$srcdir/xbmc-$pkgver-$_realname" |
| 147 | |
| 148 | # openjdk8 doesnt support riscv64, and openjdk21 doesnt support 32-bit |
| 149 | # so use openjdk21 otherwise openjdk8 |
| 150 | case $CARCH in |
| 151 | armhf|armv7|x86) makedepends="$makedepends openjdk8-jre-base" ;; |
| 152 | *) makedepends="$makedepends openjdk21-jre-headless" ;; |
| 153 | esac |
| 154 | |
| 155 | # secfixes: |
| 156 | # 18.2-r0: |
| 157 | # - CVE-2018-8831 |
| 158 | |
| 159 | _build() { |
| 160 | local outdir="$1" |
| 161 | shift |
| 162 | |
| 163 | cmake -B "$outdir" -G Ninja -Wno-dev \ |
| 164 | -DCMAKE_BUILD_TYPE=Release \ |
| 165 | -DCMAKE_INSTALL_PREFIX=/usr \ |
| 166 | -DCMAKE_INSTALL_LIBDIR=lib \ |
| 167 | -DENABLE_EGL=ON \ |
| 168 | -DENABLE_EVENTCLIENTS=ON \ |
| 169 | -DENABLE_INTERNAL_CROSSGUID=ON \ |
| 170 | -DENABLE_INTERNAL_FLATBUFFERS=OFF \ |
| 171 | -DENABLE_INTERNAL_RapidJSON=OFF \ |
| 172 | -DENABLE_GOLD=OFF \ |
| 173 | -DENABLE_VAAPI=ON \ |
| 174 | -DENABLE_TESTING=OFF \ |
| 175 | -DCROSSGUID_URL="$srcdir"/crossguid-$_crossguid.tar.gz \ |
| 176 | -Dlibdvdcss_URL="$srcdir"/libdvdcss-$_libdvdcss.tar.gz \ |
| 177 | -Dlibdvdnav_URL="$srcdir"/libdvdnav-$_libdvdnav.tar.gz \ |
| 178 | -Dlibdvdread_URL="$srcdir"/libdvdread-$_libdvdread.tar.gz \ |
| 179 | -DCORE_COMPILE_OPTIONS="" \ |
| 180 | "$@" |
| 181 | # build output doesn't track libcrossguid.a, so ninja fails if we don't build this first |
| 182 | cmake --build "$outdir" --target crossguid |
| 183 | cmake --build "$outdir" |
| 184 | } |
| 185 | |
| 186 | build() { |
| 187 | # use less memory on x86 |
| 188 | [ "$CARCH" = "x86" ] && export LDFLAGS="$LDFLAGS -Wl,--no-keep-memory" |
| 189 | |
| 190 | case "$CARCH" in |
| 191 | armv7) |
| 192 | # thinlto with >8 threads on armv7 doesn't work |
| 193 | export LDFLAGS="$LDFLAGS -Wl,--thinlto-jobs=8" |
| 194 | ;; |
| 195 | esac |
| 196 | |
| 197 | export CC=clang |
| 198 | export CXX=clang++ |
| 199 | export CFLAGS="$CFLAGS -flto=thin -I$PWD/crossguid-root/usr/include/crossguid" |
| 200 | export CXXFLAGS="$CXXFLAGS -flto=thin -I$PWD/crossguid-root/usr/include/crossguid" |
| 201 | export LDFLAGS="$LDFLAGS -fuse-ld=lld -Wl,-z,stack-size=2097152" |
| 202 | export NM=llvm-nm |
| 203 | |
| 204 | case "$CARCH" in |
| 205 | arm*|aarch64) |
| 206 | # not implemented in clang here |
| 207 | export CFLAGS="${CFLAGS/-fstack-clash-protection/}" |
| 208 | export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection/}" |
| 209 | ;; |
| 210 | esac |
| 211 | |
| 212 | _build build-x11 -DCORE_PLATFORM_NAME=x11 -DAPP_RENDER_SYSTEM=gles |
| 213 | _build build-wayland -DCORE_PLATFORM_NAME=wayland -DAPP_RENDER_SYSTEM=gles |
| 214 | _build build-gbm -DCORE_PLATFORM_NAME=gbm -DAPP_RENDER_SYSTEM=gles |
| 215 | } |
| 216 | |
| 217 | package() { |
| 218 | depends="$depends $pkgname-bin" |
| 219 | |
| 220 | DESTDIR="$pkgdir" cmake --install build-x11 |
| 221 | |
| 222 | install -Dm755 "$srcdir"/kodi.initd "$pkgdir"/etc/init.d/kodi |
| 223 | |
| 224 | mkdir -p "$pkgdir"/usr/lib/cmake |
| 225 | mv "$pkgdir"/usr/share/kodi/cmake "$pkgdir"/usr/lib/cmake/kodi |
| 226 | mv "$pkgdir"/usr/lib/kodi/cmake/* "$pkgdir"/usr/lib/cmake/kodi/ |
| 227 | rmdir "$pkgdir"/usr/lib/kodi/cmake/ |
| 228 | |
| 229 | install -Dm644 "$srcdir"/60-kodi.rules \ |
| 230 | "$pkgdir"/usr/share/polkit-1/rules.d/60-kodi.rules |
| 231 | |
| 232 | install -Dm755 \ |
| 233 | build-gbm/kodi-gbm \ |
| 234 | build-wayland/kodi-wayland \ |
| 235 | -t "$pkgdir"/usr/bin/ |
| 236 | } |
| 237 | |
| 238 | x11() { |
| 239 | pkgdesc="X11 Kodi binary" |
| 240 | depends="$pkgname=$pkgver-r$pkgrel" |
| 241 | provides="$pkgname-bin" |
| 242 | provider_priority=5 |
| 243 | |
| 244 | # the "kodi" is just a script that launches the x11 backend |
| 245 | amove \ |
| 246 | usr/bin/kodi \ |
| 247 | usr/lib/kodi/kodi-x11 \ |
| 248 | usr/lib/kodi/kodi-xrandr \ |
| 249 | usr/bin/kodi-standalone |
| 250 | } |
| 251 | |
| 252 | wayland() { |
| 253 | pkgdesc="Wayland Kodi binary" |
| 254 | depends="$pkgname=$pkgver-r$pkgrel" |
| 255 | provides="$pkgname-bin" |
| 256 | provider_priority=4 |
| 257 | |
| 258 | amove usr/bin/kodi-wayland |
| 259 | } |
| 260 | |
| 261 | gbm() { |
| 262 | pkgdesc="GBM Kodi binary" |
| 263 | depends="$pkgname=$pkgver-r$pkgrel" |
| 264 | provides="$pkgname-bin" |
| 265 | provider_priority=2 |
| 266 | |
| 267 | amove usr/bin/kodi-gbm |
| 268 | } |
| 269 | |
| 270 | openrc() { |
| 271 | default_openrc |
| 272 | install_if="$pkgname-gbm=$pkgver-r$pkgrel openrc" |
| 273 | } |
| 274 | |
| 275 | py3() { |
| 276 | pkgdesc="kodi python module" |
| 277 | depends=" |
| 278 | glib |
| 279 | py3-avahi |
| 280 | py3-dbus |
| 281 | py3-gobject3 |
| 282 | py3-udev |
| 283 | python3 |
| 284 | " |
| 285 | |
| 286 | amove usr/lib/python3* |
| 287 | } |
| 288 | |
| 289 | polkit() { |
| 290 | pkgdesc="Polkit rules for Kodi in combination with GBM" |
| 291 | depends="" |
| 292 | install_if="$pkgname-gbm=$pkgver-r$pkgrel polkit" |
| 293 | |
| 294 | amove usr/share/polkit-1/rules.d |
| 295 | } |
| 296 | |
| 297 | sha512sums=" |
| 298 | 4e344f7de95e7f47da413f7aeeef0656837befa89ef8924edf5409ac1c0c8c49e4023682ed236d19c3413e2ca5af8457899fdb13781f19a6208bfeddc69d7602 21.3-Omega.tar.gz |
| 299 | f0a80d8e99b10473bcfdfde3d1c5fd7b766959819f0d1c0595ac84ce46db9007a5fbfde9a55aca60530c46cb7f8ef4c7e472c6191559ded92f868589c141ccaf crossguid-ca1bf4b810e2d188d04cb6286f957008ee1b7681.tar.gz |
| 300 | d3be3bfc13c5ea56d8db745c2aab090c99760684fe4c8f62a13d266feb319e9180ceeecf8116bfd2ed90d9accba2c11dbbf93b61ad00f69a40812ebf4eabcdda libdvdcss-1.4.3-Next-Nexus-Alpha2-2.tar.gz |
| 301 | 51e6fc033121241354a5f0b3fc9a430577ae3ff6bb7f31445aa548ef4893037fb80eea3b2c6774c81e9ebaf9c45e9b490c98c2c65eb38f9f7daba84b236f7e1d libdvdnav-6.1.1-Next-Nexus-Alpha2-2.tar.gz |
| 302 | 629a41157d07b8ec0ea1fe89ae5ec48f63047472a862782b805c531ae31a0376fc4dc15175f8280c3ef91d7fa977bacebb1b51232640034a34bab2293210fc5e libdvdread-6.1.3-Next-Nexus-Alpha2-2.tar.gz |
| 303 | a8394d27eb1f5edabad255ee2afa0a3fb727e7e067a11205395010566d3748e595f4c8237eea7c9e6d7330949c3bff4d9b2cd66c00c94438b11ec9d1dd5d57a7 fix-musl-incompability.patch |
| 304 | f2cd6ec55e44f3a413e2eebeba8b1d591d9ee64b9099578466d19033b620deba8012134aab9017ccb23912518219f725f33b682abf681994c34e160ea07cfa6c gcc13.patch |
| 305 | 2aa75f17ecf65e59770746e436a807f2697ba43278158e5123761c543cba40c2b596c5f5c51cc7ca3a7c79bab81213f81017afa6c1228e51546fe14a8cff13de lfs64.patch |
| 306 | 82c73147c4f4cd369b413eb503e22b5ac0e4c6dc4c5558efb0b093bf9338da74510bf45141cf7a7b2b30c817eaaa0c7dab7d44960de58bfdcdff51b6e1e7652d sse-build.patch |
| 307 | 263b6a2c1ba8c461636e50f982c533c39aa06a9aada944f9baf96dfcaeedf264495d7567d0f8b5dcad9e510c567246aa32391e255f2c6b2068c5911f344483b2 other-archs.patch |
| 308 | 349e8a78508e2f3c2b6928067227540e68f41a0ce665a4f1593e98fa44ab21d235b105cd2f41bfb5678727b0083cb2b7c4572694b1c7b8ab6581f059302d0fc9 dyn-pagesize.patch |
| 309 | 80e2f7b271a9d9b0c72e21c799d02bb267d2851d9fc22f4526e6668f8c7466407f2524f0152409116450736b2b7cb2f5e3a13b331276e805429e232e795b82b1 ppc-no-native-endian-swap.patch |
| 310 | f51dc104717fefb75e442fda7c8f8bb12a87b6f280ad87d77256ce11b19dc2b6caf1512c8563306780d181e0c9442d1c764ceb7a9bfcd12faea8d1ffa51d8dd7 gcc15-musl.patch |
| 311 | c47e90b6bb011092c033705195c8f1e4fcb56be412f12133514f46f5cb52acda7075c8350d78c98b86e0808f3d373ac3735f0fae10e907610b5405ba623cebac kodi.initd |
| 312 | 465a2079d598bf909a458d8e9d0ddd2b2a41dff83ba736542cffec7811c044295d5af092928f20aaa6cd3bc8b13bb03ede5c7ded1783680f890464e103392787 60-kodi.rules |
| 313 | " |