uboot: (firmwareOdroidC2/C4) don't invoke patch tool, use patches = [] instead

https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/setup.sh#L948
this can do it nicely.

Signed-off-by: Anton Arapov <anton@deadbeef.mx>
This commit is contained in:
Anton Arapov 2021-04-03 12:58:10 +02:00 committed by Alan Daniels
commit 56de2bcd43
30691 changed files with 3076956 additions and 0 deletions

View file

@ -0,0 +1,88 @@
From 620c3eb38f0dbea6e877e37e97508513e87a0732 Mon Sep 17 00:00:00 2001
From: Jeremy Fleischman <jeremyfleischman@gmail.com>
Date: Sun, 27 Mar 2022 00:44:52 -0700
Subject: [PATCH] Add new KODI_WEBSERVER_EXTRA_WHITELIST cmake var to allow
access to more directories
(This is a backport of
https://github.com/xbmc/xbmc/commit/a6dedce7ba1f03bdd83b019941d1e369a06f7888
to Kodi 19.4 Matrix)
This is useful for NixOS, which often ends up creating a `KODI_HOME`
with symlinks to other files (including the chorus2 interface). Kodi's
webserver cautiously refuses to follow these symlinks, and you end up
getting 404s rather than the web page.
See https://forum.kodi.tv/showthread.php?tid=366338&pid=3079493 for a
discussion of this on the Kodi forum.
---
CMakeLists.txt | 1 +
xbmc/CompileInfo.cpp.in | 5 +++++
xbmc/CompileInfo.h | 1 +
xbmc/utils/FileUtils.cpp | 6 +++++-
4 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2d5369798df23..d5ef6d9390ef0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -243,6 +243,7 @@ add_custom_command(OUTPUT ${CORE_BUILD_DIR}/xbmc/CompileInfo.cpp
-DAPP_BUILD_DATE=${APP_BUILD_DATE}
-DAPP_SHARED_LIBRARY_SUFFIX="${APP_SHARED_LIBRARY_SUFFIX}"
-Dprefix=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}
+ -DKODI_WEBSERVER_EXTRA_WHITELIST="${KODI_WEBSERVER_EXTRA_WHITELIST}"
-P ${CMAKE_SOURCE_DIR}/cmake/scripts/common/GenerateVersionedFiles.cmake
DEPENDS ${CMAKE_SOURCE_DIR}/version.txt
export-files
diff --git a/xbmc/CompileInfo.cpp.in b/xbmc/CompileInfo.cpp.in
index f81fe77902236..4f19203a89cde 100644
--- a/xbmc/CompileInfo.cpp.in
+++ b/xbmc/CompileInfo.cpp.in
@@ -105,3 +105,8 @@ std::vector<std::string> CCompileInfo::GetAvailableWindowSystems()
{
return StringUtils::Split("@CORE_PLATFORM_NAME_LC@", ' ');
}
+
+const std::vector<std::string> CCompileInfo::GetWebserverExtraWhitelist()
+{
+ return StringUtils::Split("@KODI_WEBSERVER_EXTRA_WHITELIST@", ',');
+}
diff --git a/xbmc/CompileInfo.h b/xbmc/CompileInfo.h
index 553a0194ee77f..e2521324e6576 100644
--- a/xbmc/CompileInfo.h
+++ b/xbmc/CompileInfo.h
@@ -32,4 +32,5 @@ class CCompileInfo
static const char* GetVersionCode();
static std::vector<std::string> GetAvailableWindowSystems();
static std::vector<ADDON::RepoInfo> LoadOfficialRepoInfos();
+ static const std::vector<std::string> GetWebserverExtraWhitelist();
};
diff --git a/xbmc/utils/FileUtils.cpp b/xbmc/utils/FileUtils.cpp
index e51f3d631c256..fc717c9608098 100644
--- a/xbmc/utils/FileUtils.cpp
+++ b/xbmc/utils/FileUtils.cpp
@@ -6,6 +6,7 @@
* See LICENSES/README.md for more information.
*/
+#include "CompileInfo.h"
#include "FileUtils.h"
#include "ServiceBroker.h"
#include "guilib/GUIKeyboardFactory.h"
@@ -261,12 +262,15 @@ bool CFileUtils::CheckFileAccessAllowed(const std::string &filePath)
"/.ssh/",
};
// ALLOW kodi paths
- const std::vector<std::string> whitelist = {
+ std::vector<std::string> whitelist = {
CSpecialProtocol::TranslatePath("special://home"),
CSpecialProtocol::TranslatePath("special://xbmc"),
CSpecialProtocol::TranslatePath("special://musicartistsinfo")
};
+ auto kodiExtraWhitelist = CCompileInfo::GetWebserverExtraWhitelist();
+ whitelist.insert(whitelist.end(), kodiExtraWhitelist.begin(), kodiExtraWhitelist.end());
+
// image urls come in the form of image://... sometimes with a / appended at the end
// and can be embedded in a music or video file image://music@...
// strip this off to get the real file path

View file

@ -0,0 +1,26 @@
{ lib, buildKodiAddon, fetchFromGitHub, requests, vfs-libarchive }:
buildKodiAddon rec {
pname = "a4ksubtitles";
namespace = "service.subtitles.a4ksubtitles";
version = "2.8.0";
src = fetchFromGitHub {
owner = "a4k-openproject";
repo = "a4kSubtitles";
rev = "${namespace}/${namespace}-${version}";
sha256 = "0fg5mcvxdc3hqybp1spy7d1nnqirwhcvrblbwksikym9m3qgw2m5";
};
propagatedBuildInputs = [
requests
vfs-libarchive
];
meta = with lib; {
homepage = "https://a4k-openproject.github.io/a4kSubtitles/";
description = "Multi-Source Subtitles Addon";
license = licenses.mit;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,23 @@
{ writeShellScript
, nix
, curl
, gzip
, xmlstarlet
, common-updater-scripts
}:
{ attrPath }:
let
url = "http://mirrors.kodi.tv/addons/matrix/addons.xml.gz";
updateScript = writeShellScript "update.sh" ''
set -ex
attrPath=$1
namespace=$(${nix}/bin/nix-instantiate $systemArg --eval -E "with import ./. {}; $attrPath.namespace" | tr -d '"')
version=$(${curl}/bin/curl -s -L ${url} | ${gzip}/bin/gunzip -c | ${xmlstarlet}/bin/xml select -T -t -m "//addons/addon[@id='$namespace']" -v @version)
${common-updater-scripts}/bin/update-source-version "$attrPath" "$version"
'';
in
[ updateScript attrPath ]

View file

@ -0,0 +1,28 @@
{ lib, buildKodiAddon, fetchFromGitHub, vfs-libarchive }:
buildKodiAddon rec {
pname = "archive_tool";
namespace = "script.module.archive_tool";
version = "2.0.3";
src = fetchFromGitHub {
owner = "zach-morris";
repo = "script.module.archive_tool";
rev = version;
sha256 = "0hbkyk59xxfjv6vzfjplahmqxi5564qjlwyq6k8ijy6jjcwnd3p7";
};
propagatedBuildInputs = [
vfs-libarchive
];
passthru = {
pythonPath = "lib";
};
meta = with lib; {
homepage = "https://github.com/zach-morris/script.module.archive_tool";
description = "A set of common python functions to work with the Kodi archive virtual file system (vfs) binary addons";
license = licenses.gpl3Plus;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,30 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript, dateutil, typing_extensions }:
buildKodiAddon rec {
pname = "arrow";
namespace = "script.module.arrow";
version = "1.0.3.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "0xa16sb2hls59l4gsg1xwb1qbkhcvbykq02l05n5rcm0alg80l3l";
};
propagatedBuildInputs = [
dateutil
typing_extensions
];
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.arrow";
};
};
meta = with lib; {
homepage = "https://github.com/razzeee/script.module.arrow";
description = "Better dates & times for Python";
license = licenses.asl20;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,31 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript, dateutil, requests, xbmcswift2 }:
buildKodiAddon rec {
pname = "arteplussept";
namespace = "plugin.video.arteplussept";
version = "1.1.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
hash = "sha256-IYodi0Uz16Qg4MHCz/K06pEXblrsBxHD25fb6LrW8To=";
};
propagatedBuildInputs = [
dateutil
requests
xbmcswift2
];
passthru = {
updateScript = addonUpdateScript {
attrPath = "kodi.packages.arteplussept";
};
};
meta = with lib; {
homepage = "https://github.com/known-as-bmf/plugin.video.arteplussept";
description = "Watch videos available on Arte+7";
license = licenses.mit;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,25 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "certifi";
namespace = "script.module.certifi";
version = "2020.12.05+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "1z49b8va7wdyr714c8ixb2sldi0igffcjj3xpbmga58ph0z985vy";
};
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.certifi";
};
};
meta = with lib; {
homepage = "https://certifi.io";
description = "Python package for providing Mozilla's CA Bundle";
license = licenses.mpl20;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,25 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "chardet";
namespace = "script.module.chardet";
version = "4.0.0+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "1jsd165mb1b8jdan2jbjd3y3xa0xam2cxcccmwazkybpa0r6a7dj";
};
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.chardet";
};
};
meta = with lib; {
homepage = "https://github.com/Freso/script.module.chardet";
description = "Universal encoding detector";
license = licenses.lgpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,35 @@
{ lib, stdenv, fetchFromGitHub, toKodiAddon, addonDir }:
let
drv = stdenv.mkDerivation {
pname = "controller-topology-project";
version = "unstable-2022-01-22";
src = fetchFromGitHub {
owner = "kodi-game";
repo = "controller-topology-project";
rev = "e2a9bac903f21b2acfeee374070cfc97d03aba2d";
sha256 = "sha256-o6uKxOjEYNAK27drvNOokOFPdjkOEnr49mBre9ycM0w=";
};
postPatch = ''
# remove addons already included in the base kodi package
rm -r addons/game.controller.default
rm -r addons/game.controller.snes
'';
installPhase = ''
runHook preInstall
mkdir -p $out${addonDir}
cp -r addons/* $out${addonDir}
runHook postInstall
'';
meta = with lib; {
homepage = "https://github.com/kodi-game/controller-topology-project";
description = "Models how controllers connect to and map to each other for all gaming history";
license = with licenses; [ odbl ];
maintainers = teams.kodi.members;
};
};
in
toKodiAddon drv

View file

@ -0,0 +1,30 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript, six }:
buildKodiAddon rec {
pname = "dateutil";
namespace = "script.module.dateutil";
version = "2.8.2";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "iQnyS0GjYcPbnBDUxmMrmDxHOA3K8RbTVke/HF4d5u4=";
};
propagatedBuildInputs = [
six
];
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.dateutil";
};
};
meta = with lib; {
homepage = "https://dateutil.readthedocs.io/en/stable/";
description = "Extensions to the standard Python datetime module";
license = with licenses; [ asl20 bsd3 ];
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,26 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "defusedxml";
namespace = "script.module.defusedxml";
version = "0.6.0+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "026i5rx9rmxcc18ixp6qhbryqdl4pn7cbwqicrishivan6apnacd";
};
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.defusedxml";
};
};
meta = with lib; {
homepage = "https://github.com/tiran/defusedxml";
description = "defusing XML bombs and other exploits";
license = licenses.psfl;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,26 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "future";
namespace = "script.module.future";
version = "0.18.2+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "sha256-QBG7V70Dwmfq8ISILxGNvtmQT9fJp2e5gs2C9skRwIw=";
};
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.future";
};
};
meta = with lib; {
homepage = "https://python-future.org";
description = "The missing compatibility layer between Python 2 and Python 3";
license = licenses.mit;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,30 @@
{ lib, buildKodiAddon, fetchFromGitHub, fetchzip, dateutil, requests, routing, vfs-libarchive, archive_tool, youtube }:
buildKodiAddon rec {
pname = "iagl";
namespace = "plugin.program.iagl";
version = "3.0.5";
src = fetchFromGitHub {
owner = "zach-morris";
repo = "plugin.program.iagl";
rev = version;
sha256 = "sha256-Ha9wUHURPql6xew5bUd33DpgRt+8vwIHocxPopmXj4c=";
};
propagatedBuildInputs = [
dateutil
requests
routing
vfs-libarchive
archive_tool
youtube
];
meta = with lib; {
homepage = "https://github.com/zach-morris/plugin.program.iagl";
description = "Launch Games from the Internet using Kodi";
license = licenses.gpl3Plus;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,25 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "idna";
namespace = "script.module.idna";
version = "2.10.0+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "0pm86m8kh2p0brps3xzxcmmabvb4izkglzkj8dsn33br3vlc7cm7";
};
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.idna";
};
};
meta = with lib; {
homepage = "https://github.com/Freso/script.module.idna";
description = "Internationalized Domain Names for Python";
license = licenses.bsd3;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,31 @@
{ stdenv, lib, rel, addonDir, buildKodiBinaryAddon, fetchFromGitHub, expat, glib, nspr, nss, gtest }:
buildKodiBinaryAddon rec {
pname = "inputstream-adaptive";
namespace = "inputstream.adaptive";
version = "19.0.3";
src = fetchFromGitHub {
owner = "xbmc";
repo = "inputstream.adaptive";
rev = "${version}-${rel}";
sha256 = "sha256-YYIPPxM8zVIugqLz0YntVZt1N+dReH+7V1Lkeif2wIY=";
};
extraNativeBuildInputs = [ gtest ];
extraBuildInputs = [ expat ];
extraRuntimeDependencies = [ glib nspr nss stdenv.cc.cc.lib ];
extraInstallPhase = let n = namespace; in ''
ln -s $out/lib/addons/${n}/libssd_wv.so $out/${addonDir}/${n}/libssd_wv.so
'';
meta = with lib; {
homepage = "https://github.com/xbmc/inputstream.adaptive";
description = "Kodi inputstream addon for several manifest types";
platforms = platforms.all;
license = licenses.gpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,24 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, kodi, bzip2, zlib }:
buildKodiBinaryAddon rec {
pname = "inputstream-ffmpegdirect";
namespace = "inputstream.ffmpegdirect";
version = "19.0.1";
src = fetchFromGitHub {
owner = "xbmc";
repo = "inputstream.ffmpegdirect";
rev = "${version}-${rel}";
sha256 = "sha256-yVMo3cRsIww1y0jGrqRag2Bc1x98+e86AHlnY1O9klE=";
};
extraBuildInputs = [ bzip2 zlib kodi.ffmpeg ];
meta = with lib; {
homepage = "https://github.com/xbmc/inputstream.ffmpegdirect/";
description = "InputStream Client for streams that can be opened by either FFmpeg's libavformat or Kodi's cURL";
platforms = platforms.all;
license = licenses.gpl2Plus;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,24 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, openssl, rtmpdump, zlib }:
buildKodiBinaryAddon rec {
pname = "inputstream-rtmp";
namespace = "inputstream.rtmp";
version = "19.0.1";
src = fetchFromGitHub {
owner = "xbmc";
repo = "inputstream.rtmp";
rev = "${version}-${rel}";
sha256 = "sha256-BNc9HJ4Yq1WTxTr7AUHBB9yDz8oefy2EtFRwVYVGcaY=";
};
extraBuildInputs = [ openssl rtmpdump zlib ];
meta = with lib; {
homepage = "https://github.com/xbmc/inputstream.rtmp/";
description = "Client for RTMP streams";
platforms = platforms.all;
license = licenses.gpl2Plus;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,25 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "inputstreamhelper";
namespace = "script.module.inputstreamhelper";
version = "0.5.10+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "FcOktwtOT7kDM+3y9qPDk3xU1qVeCduyAdUzebtJzv4=";
};
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.inputstreamhelper";
};
};
meta = with lib; {
homepage = "https://github.com/emilsvennesson/script.module.inputstreamhelper";
description = "A simple Kodi module that makes life easier for add-on developers relying on InputStream based add-ons and DRM playback";
license = licenses.mit;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,50 @@
{ lib, addonDir, buildKodiAddon, fetchFromGitHub, kodi, requests, dateutil, six, kodi-six, signals, websocket }:
let
python = kodi.pythonPackages.python.withPackages (p: with p; [ pyyaml ]);
in
buildKodiAddon rec {
pname = "jellyfin";
namespace = "plugin.video.jellyfin";
version = "0.7.7";
src = fetchFromGitHub {
owner = "jellyfin";
repo = "jellyfin-kodi";
rev = "v${version}";
sha256 = "06glhnpayldficvvhlkbxg7zizl2wqms66fnc3p63nm3y7mqa9dd";
};
nativeBuildInputs = [
python
];
prePatch = ''
# ZIP does not support timestamps before 1980 - https://bugs.python.org/issue34097
substituteInPlace build.py \
--replace "with zipfile.ZipFile('{}/{}'.format(target, archive_name), 'w') as z:" "with zipfile.ZipFile('{}/{}'.format(target, archive_name), 'w', strict_timestamps=False) as z:"
'';
buildPhase = ''
${python}/bin/python3 build.py --version=py3
'';
postInstall = ''
mv /build/source/addon.xml $out${addonDir}/${namespace}/
'';
propagatedBuildInputs = [
requests
dateutil
six
kodi-six
signals
websocket
];
meta = with lib; {
homepage = "https://jellyfin.org/";
description = "A whole new way to manage and view your media library";
license = licenses.gpl3Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,22 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, tinyxml, udev }:
buildKodiBinaryAddon rec {
pname = namespace;
namespace = "peripheral.joystick";
version = "1.7.1";
src = fetchFromGitHub {
owner = "xbmc";
repo = namespace;
rev = "${version}-${rel}";
sha256 = "1dhj4afr9kj938xx70fq5r409mz6lbw4n581ljvdjj9lq7akc914";
};
extraBuildInputs = [ tinyxml udev ];
meta = with lib; {
description = "Binary addon for raw joystick input.";
platforms = platforms.all;
license = licenses.gpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,24 @@
{ lib, addonDir, buildKodiAddon, fetchzip, defusedxml, kodi-six }:
buildKodiAddon rec {
pname = "keymap";
namespace = "script.keymap";
version = "1.1.3+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "1icrailzpf60nw62xd0khqdp66dnr473m2aa9wzpmkk3qj1ay6jv";
};
propagatedBuildInputs = [
defusedxml
kodi-six
];
meta = with lib; {
homepage = "https://github.com/tamland/xbmc-keymap-editor";
description = "A GUI for configuring mappings for remotes, keyboard and other inputs supported by Kodi";
license = licenses.gpl3Plus;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,15 @@
{ stdenv, fetchFromGitHub, cmake, kodi, libcec_platform, tinyxml }:
stdenv.mkDerivation rec {
pname = "kodi-platform";
version = "17.1";
src = fetchFromGitHub {
owner = "xbmc";
repo = pname;
rev = "c8188d82678fec6b784597db69a68e74ff4986b5";
sha256 = "1r3gs3c6zczmm66qcxh9mr306clwb3p7ykzb70r3jv5jqggiz199";
};
nativeBuildInputs = [ cmake ];
buildInputs = [ kodi libcec_platform tinyxml ];
}

View file

@ -0,0 +1,26 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "kodi-six";
namespace = "script.module.kodi-six";
version = "0.1.3.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "14m232p9hx925pbk8knsg994m1nbpa5278zmcrnfblh4z84gjv4x";
};
passthru = {
pythonPath = "libs";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.kodi-six";
};
};
meta = with lib; {
homepage = "https://github.com/romanvm/kodi.six";
description = "Wrappers around Kodi Python API for seamless Python 2/3 compatibility";
license = licenses.gpl3Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,31 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, libretro, genesis-plus-gx }:
buildKodiBinaryAddon rec {
pname = "kodi-libretro-genplus";
namespace = "game.libretro.genplus";
version = "1.7.4.31";
src = fetchFromGitHub {
owner = "kodi-game";
repo = "game.libretro.genplus";
rev = "${version}-${rel}";
sha256 = "0lcii32wzpswjjkwhv250l238g31akr66dhkbv8gj4v1i4z7hry8";
};
extraCMakeFlags = [
"-DGENPLUS_LIB=${genesis-plus-gx}/lib/retroarch/cores/genesis_plus_gx_libretro.so"
];
extraBuildInputs = [ genesis-plus-gx ];
propagatedBuildInputs = [
libretro
];
meta = with lib; {
homepage = "https://github.com/kodi-game/game.libretro.genplus";
description = "Genesis Plus GX GameClient for Kodi";
platforms = platforms.all;
license = licenses.gpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,31 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, libretro, mgba }:
buildKodiBinaryAddon rec {
pname = "kodi-libretro-mgba";
namespace = "game.libretro.mgba";
version = "0.9.2.31";
src = fetchFromGitHub {
owner = "kodi-game";
repo = "game.libretro.mgba";
rev = "${version}-${rel}";
sha256 = "sha256-eZLuNhLwMTtzpLGkymc9cLC83FQJWZ2ZT0iyz4sY4EA=";
};
extraCMakeFlags = [
"-DMGBA_LIB=${mgba}/lib/retroarch/cores/mgba_libretro.so"
];
extraBuildInputs = [ mgba ];
propagatedBuildInputs = [
libretro
];
meta = with lib; {
homepage = "https://github.com/kodi-game/game.libretro.mgba";
description = "mGBA for Kodi";
platforms = platforms.all;
license = licenses.gpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,31 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, libretro, snes9x }:
buildKodiBinaryAddon rec {
pname = "kodi-libretro-snes9x";
namespace = "game.libretro.snes9x";
version = "1.60.0.29";
src = fetchFromGitHub {
owner = "kodi-game";
repo = "game.libretro.snes9x";
rev = "${version}-${rel}";
sha256 = "1wyfkg4fncc604alnbaqk92fi1h80n7bwiqfkb8479x5517byab1";
};
extraCMakeFlags = [
"-DSNES9X_LIB=${snes9x}/lib/retroarch/cores/snes9x_libretro.so"
];
extraBuildInputs = [ snes9x ];
propagatedBuildInputs = [
libretro
];
meta = with lib; {
homepage = "https://github.com/kodi-game/game.libretro.snes9x";
description = "Snes9X GameClient for Kodi";
platforms = platforms.all;
license = licenses.gpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,24 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, tinyxml }:
buildKodiBinaryAddon rec {
pname = "libretro";
namespace = "game.libretro";
version = "19.0.0";
src = fetchFromGitHub {
owner = "kodi-game";
repo = "game.libretro";
rev = "${version}-${rel}";
sha256 = "1831wbbc4a545lr4mg1fm4sbx75k5lkrfqaa5fh308aar0nm974d";
};
extraBuildInputs = [ tinyxml ];
meta = with lib; {
homepage = "https://github.com/kodi-game/game.libretro";
description = "Libretro wrapper for Kodi's Game API";
platforms = platforms.all;
license = licenses.gpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,25 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "myconnpy";
namespace = "script.module.myconnpy";
version = "8.0.18+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "1cx3qdzw9lkkmbyvyrmc2i193is20fihn2sfl7kmv43f708vam0k";
};
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.myconnpy";
};
};
meta = with lib; {
homepage = "http://dev.mysql.com/doc/connector-python/en/index.html";
description = "MySQL Connector/Python";
license = licenses.gpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,29 @@
{ lib, buildKodiAddon, fetchFromGitHub, signals, inputstream-adaptive, inputstreamhelper, requests, myconnpy }:
buildKodiAddon rec {
pname = "netflix";
namespace = "plugin.video.netflix";
version = "1.18.2";
src = fetchFromGitHub {
owner = "CastagnaIT";
repo = namespace;
rev = "v${version}";
sha256 = "sha256-nunjcVapWWTxYtILEcrkfJiWvSz71zyxSCbWQ4aCfLM=";
};
propagatedBuildInputs = [
signals
inputstream-adaptive
inputstreamhelper
requests
myconnpy
];
meta = with lib; {
homepage = "https://github.com/CastagnaIT/plugin.video.netflix";
description = "Netflix VOD Services Add-on";
license = licenses.mit;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,28 @@
{ lib, buildKodiAddon, fetchFromGitHub, future, kodi-six, simplejson, inputstreamhelper }:
buildKodiAddon rec {
pname = "orftvthek";
namespace = "plugin.video.orftvthek";
version = "0.12.3+matrix.1";
src = fetchFromGitHub {
owner = "s0faking";
repo = namespace;
rev = version;
sha256 = "sha256-GB9VkC9Vbi7TJXl/vF3ViF/tAcHGH0KxYQ0zkfMLZCY=";
};
propagatedBuildInputs = [
future
kodi-six
simplejson
inputstreamhelper
];
meta = with lib; {
homepage = "https://github.com/s0faking/plugin.video.orftvthek";
description = "An addon that gives you access to the ORF TVthek Video Platform";
license = licenses.gpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,21 @@
{ lib, buildKodiAddon, fetchFromGitHub }:
buildKodiAddon rec {
pname = "osmc-skin";
namespace = "skin.osmc";
version = "18.0.0";
src = fetchFromGitHub {
owner = "osmc";
repo = namespace;
rev = "40a6c318641e2cbeac58fb0e7dde9c2beac737a0";
sha256 = "1l7hyfj5zvjxjdm94y325bmy1naak455b9l8952sb0gllzrcwj6s";
};
meta = with lib; {
homepage = "https://github.com/osmc/skin.osmc";
description = "The default skin for OSMC";
platforms = platforms.all;
maintainers = with maintainers; [ ];
license = licenses.cc-by-nc-sa-30;
};
}

View file

@ -0,0 +1,22 @@
{ lib, buildKodiAddon, fetchFromGitHub }:
buildKodiAddon rec {
pname = "pdfreader";
namespace = "plugin.image.pdf";
version = "2.0.2";
src = fetchFromGitHub {
owner = "i96751414";
repo = "plugin.image.pdfreader";
rev = "v${version}";
sha256 = "0nkqhlm1gyagq6xpdgqvd5qxyr2ngpml9smdmzfabc8b972mwjml";
};
passthru.pythonPath = "lib/api";
meta = with lib; {
homepage = "https://forum.kodi.tv/showthread.php?tid=187421";
description = "A comic book reader";
license = licenses.gpl2Plus;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,23 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, jsoncpp, libhdhomerun }:
buildKodiBinaryAddon rec {
pname = "pvr-hdhomerun";
namespace = "pvr.hdhomerun";
version = "19.1.0";
src = fetchFromGitHub {
owner = "kodi-pvr";
repo = "pvr.hdhomerun";
rev = "${version}-${rel}";
sha256 = "sha256-sYVb4nhUz2j19yv3/cyLyUAC+1K0c05+iAMEfpPifjs=";
};
extraBuildInputs = [ jsoncpp libhdhomerun ];
meta = with lib; {
homepage = "https://github.com/kodi-pvr/pvr.hdhomerun";
description = "Kodi's HDHomeRun PVR client addon";
platforms = platforms.all;
license = licenses.gpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,21 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub }:
buildKodiBinaryAddon rec {
pname = "pvr-hts";
namespace = "pvr.hts";
version = "19.0.6";
src = fetchFromGitHub {
owner = "kodi-pvr";
repo = "pvr.hts";
rev = "${version}-${rel}";
sha256 = "sha256-Lc3B1TdQ4oQIEIyKuQju+5cpInF5i2u4WFe3okFhe+I=";
};
meta = with lib; {
homepage = "https://github.com/kodi-pvr/pvr.hts";
description = "Kodi's Tvheadend HTSP client addon";
platforms = platforms.all;
license = licenses.gpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,36 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub
, xz, pugixml, zlib
, inputstream-adaptive, inputstream-ffmpegdirect, inputstream-rtmp
}:
buildKodiBinaryAddon rec {
pname = "pvr-iptvsimple";
namespace = "pvr.iptvsimple";
version = "19.1.0";
src = fetchFromGitHub {
owner = "kodi-pvr";
repo = "pvr.iptvsimple";
rev = "${version}-${rel}";
sha256 = "sha256-APRj/Z/GtRXNSVX5kB0o09FTa9me2ESzrZ/Q+QNrw0w=";
};
extraBuildInputs = [
xz
pugixml
zlib
];
propagatedBuildInputs = [
inputstream-adaptive
inputstream-ffmpegdirect
inputstream-rtmp
];
meta = with lib; {
homepage = "https://github.com/kodi-pvr/pvr.iptvsimple";
description = "Kodi's IPTV Simple client addon";
platforms = platforms.all;
license = licenses.gpl2Plus;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,29 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript, requests }:
buildKodiAddon rec {
pname = "requests-cache";
namespace = "script.module.requests-cache";
version = "0.5.2+matrix.2";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "0fgl4jayq6hbhqxg16nfy9qizwf54c8nvg0icv93knaj13zfzkz8";
};
propagatedBuildInputs = [
requests
];
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.requests-cache";
};
};
meta = with lib; {
homepage = "https://github.com/reclosedev/requests-cache";
description = "Persistent cache for requests library";
license = licenses.bsd2;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,32 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript, certifi, chardet, idna, urllib3 }:
buildKodiAddon rec {
pname = "requests";
namespace = "script.module.requests";
version = "2.25.1+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "00qhykizvspzfwgl7qz9cyxrazs54jgin40g49v5nzmjq3qf62hb";
};
propagatedBuildInputs = [
certifi
chardet
idna
urllib3
];
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.requests";
};
};
meta = with lib; {
homepage = "http://python-requests.org";
description = "Python HTTP for Humans";
license = licenses.asl20;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,25 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "routing";
namespace = "script.module.routing";
version = "0.2.3+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "1qhp40xd8mbcvzwlamqw1j5l224ry086593948g24drpqiiyc8x6";
};
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.routing";
};
};
meta = with lib; {
homepage = "https://github.com/tamland/kodi-plugin-routing";
description = "A routing module for kodi plugins";
license = licenses.gpl3Plus;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,25 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "signals";
namespace = "script.module.addon.signals";
version = "0.0.6+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "1qcjbakch8hvx02wc01zv014nmzgn6ahc4n2bj5mzr114ppd3hjs";
};
passthru= {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.signals";
};
};
meta = with lib; {
homepage = "https://github.com/ruuk/script.module.addon.signals";
description = "Provides signal/slot mechanism for inter-addon communication";
license = licenses.lgpl21Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,26 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "simplejson";
namespace = "script.module.simplejson";
version = "3.17.0+matrix.2";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "sha256-XLE4x0qr3CFwWqh1BfSg9q+w6pWgFBXG7TyVJWeGQIs=";
};
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.simplejson";
};
};
meta = with lib; {
homepage = "https://github.com/simplejson/simplejson";
description = "Simple, fast, extensible JSON encoder/decoder for Python";
license = licenses.mit;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,23 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "six";
namespace = "script.module.six";
version = "1.15.0+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "0c8vb0c4vhknkqqgvzj8l2ddgcm4iah0ca686slxbxbp800cydnf";
};
passthru.updateScript = addonUpdateScript {
attrPath = "kodi.packages.six";
};
meta = with lib; {
homepage = "https://pypi.org/project/six/";
description = "Python 2 and 3 compatibility utilities";
license = licenses.mit;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,21 @@
{ lib, buildKodiBinaryAddon, fetchFromGitHub, libusb1 }:
buildKodiBinaryAddon rec {
pname = namespace;
namespace = "peripheral.steamcontroller";
version = "0.11.0";
src = fetchFromGitHub {
owner = "kodi-game";
repo = namespace;
rev = "f68140ca44f163a03d3a625d1f2005a6edef96cb";
sha256 = "09lm8i119xlsxxk0c64rnp8iw0crr90v7m8iwi9r31qdmxrdxpmg";
};
extraBuildInputs = [ libusb1 ];
meta = with lib; {
description = "Binary addon for steam controller.";
platforms = platforms.all;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,29 @@
{ lib, buildKodiAddon, fetchFromGitHub, steam }:
buildKodiAddon {
pname = "steam-launcher";
namespace = "script.steam.launcher";
version = "3.5.1";
src = fetchFromGitHub rec {
owner = "teeedubb";
repo = owner + "-xbmc-repo";
rev = "8260bf9b464846a1f1965da495d2f2b7ceb81d55";
sha256 = "1fj3ry5s44nf1jzxk4bmnpa4b9p23nrpmpj2a4i6xf94h7jl7p5k";
};
propagatedBuildInputs = [ steam ];
meta = with lib; {
homepage = "https://forum.kodi.tv/showthread.php?tid=157499";
description = "Launch Steam in Big Picture Mode from Kodi";
longDescription = ''
This add-on will close/minimise Kodi, launch Steam in Big
Picture Mode and when Steam BPM is exited (either by quitting
Steam or returning to the desktop) Kodi will
restart/maximise. Running pre/post Steam scripts can be
configured via the addon.
'';
license = licenses.gpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,27 @@
{ lib, buildKodiAddon, fetchFromGitHub, requests, requests-cache, routing }:
buildKodiAddon rec {
pname = "steam-library";
namespace = "plugin.program.steam.library";
version = "0.8.1";
src = fetchFromGitHub {
owner = "aanderse";
repo = namespace;
rev = "v${version}";
sha256 = "1ai8k55bamzkx7awk3dl8ksw93pan3h9b1xlylcldy7a0ddldzdg";
};
propagatedBuildInputs = [
requests
requests-cache
routing
];
meta = with lib; {
homepage = "https://github.com/aanderse/plugin.program.steam.library";
description = "View your entire Steam library right from Kodi";
license = licenses.gpl3Plus;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,27 @@
{ lib, buildKodiAddon, fetchFromGitHub }:
buildKodiAddon rec {
pname = "svtplay";
namespace = "plugin.video.svtplay";
version = "5.1.12";
src = fetchFromGitHub {
owner = "nilzen";
repo = "xbmc-" + pname;
rev = "v${version}";
sha256 = "04j1nhm7mh9chs995lz6bv1vsq5xzk7a7c0lmk4bnfv8jrfpj0w6";
};
meta = with lib; {
homepage = "https://forum.kodi.tv/showthread.php?tid=67110";
description = "Watch content from SVT Play";
longDescription = ''
With this addon you can stream content from SVT Play
(svtplay.se). The plugin fetches the video URL from the SVT
Play website and feeds it to the Kodi video player. HLS (m3u8)
is the preferred video format by the plugin.
'';
platforms = platforms.all;
license = licenses.gpl3Plus;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,31 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript, requests, six, arrow }:
buildKodiAddon rec {
pname = "trakt-module";
namespace = "script.module.trakt";
version = "4.4.0+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "19kjhrykx92sy67cajxjckzdwgq47ipwml0bx9vmdr9d191h14p8";
};
propagatedBuildInputs = [
requests
six
arrow
];
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.trakt-module";
};
};
meta = with lib; {
homepage = "https://github.com/Razzeee/script.module.trakt";
description = "Python trakt.py library packed for Kodi";
license = licenses.mit;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,30 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript, trakt-module, dateutil }:
buildKodiAddon rec {
pname = "trakt";
namespace = "script.trakt";
version = "3.5.0";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "07fb0wjcr8ggidswrjs1r1hzi6grykiyi855bgm7pjzzk95kl99v";
};
propagatedBuildInputs = [
dateutil
trakt-module
];
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.trakt";
};
};
meta = with lib; {
homepage = "https://kodi.wiki/view/Add-on:Trakt";
description = "Trakt.tv movie and TV show scrobbler for Kodi";
license = licenses.gpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,25 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "typing_extensions";
namespace = "script.module.typing_extensions";
version = "3.7.4.3";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "0p28hchj05hmccs6b2836kh4vqdqnl169409f2845d0nw9y4wkqq";
};
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.typing_extensions";
};
};
meta = with lib; {
homepage = "https://github.com/python/typing/tree/master/typing_extensions";
description = "Python typing extensions";
license = licenses.psfl;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,25 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "urllib3";
namespace = "script.module.urllib3";
version = "1.26.4+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "1d2k6gbsnhdadcl1xc7igz4m71z2fcnpln5ppfjv455cmkk110vf";
};
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.urllib3";
};
};
meta = with lib; {
homepage = "https://urllib3.readthedocs.io/en/latest/";
description = "HTTP library with thread-safe connection pooling, file post, and more";
license = licenses.mit;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,22 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, libarchive, xz, bzip2, zlib, lz4, lzo, openssl }:
buildKodiBinaryAddon rec {
pname = namespace;
namespace = "vfs.libarchive";
version = "2.0.0";
src = fetchFromGitHub {
owner = "xbmc";
repo = namespace;
rev = "${version}-${rel}";
sha256 = "1q62p1i6rvqk2zv6f1cpffkh95lgclys2xl4dwyhj3acmqdxd9i5";
};
extraBuildInputs = [ libarchive xz bzip2 zlib lz4 lzo openssl ];
meta = with lib; {
description = "LibArchive Virtual Filesystem add-on for Kodi";
license = licenses.gpl2Plus;
platforms = platforms.all;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,22 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, openssl, libssh, zlib }:
buildKodiBinaryAddon rec {
pname = namespace;
namespace = "vfs.sftp";
version = "2.0.0";
src = fetchFromGitHub {
owner = "xbmc";
repo = namespace;
rev = "${version}-${rel}";
sha256 = "06w74sh8yagrrp7a7rjaz3xrh1j3wdqald9c4b72c33gpk5997dk";
};
extraBuildInputs = [ openssl libssh zlib ];
meta = with lib; {
description = "SFTP Virtual Filesystem add-on for Kodi";
license = licenses.gpl2Plus;
platforms = platforms.all;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,30 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript, six, addonDir }:
buildKodiAddon rec {
pname = "websocket";
namespace = "script.module.websocket";
version = "0.58.0+matrix.2";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "0j2fcrn3hc6207g0k0gx5ypj4j3ww9pd7rnlzq1fgdig00laa8y7";
};
propagatedBuildInputs = [
six
];
passthru = {
pythonPath = "lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.websocket";
};
};
meta = with lib; {
homepage = "https://github.com/websocket-client/websocket-client";
description = "A WebSocket client for Python";
license = licenses.lgpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,25 @@
{ lib, buildKodiAddon, fetchFromGitHub }:
buildKodiAddon rec {
pname = "xbmcswift2";
namespace = "script.module.xbmcswift2";
version = "19.0.7";
src = fetchFromGitHub {
owner = "XBMC-Addons";
repo = namespace;
rev = version;
sha256 = "sha256-Z+rHz3wncoNvV1pwhRzJFB/X0H6wdfwg88otVh27wg8=";
};
passthru = {
pythonPath = "lib";
};
meta = with lib; {
homepage = "https://github.com/XBMC-Addons/script.module.xbmcswift2";
description = "Framework to ease development of Kodi addons";
license = licenses.gpl3Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,41 @@
{ lib, buildKodiAddon, fetchpatch, fetchzip, addonUpdateScript, six, requests, inputstreamhelper }:
buildKodiAddon rec {
pname = "youtube";
namespace = "plugin.video.youtube";
version = "6.8.18+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "F950rnE/YxwWI0ieHC2TdGNSfrQDHlStnxLbA6UjEaM=";
};
propagatedBuildInputs = [
six
requests
inputstreamhelper
];
passthru = {
pythonPath = "resources/lib";
updateScript = addonUpdateScript {
attrPath = "kodi.packages.youtube";
};
};
patches = [
# This patch can be removed once https://github.com/anxdpanic/plugin.video.youtube/pull/260 has been merged.
(fetchpatch {
name = "fix-addon-path";
url = "https://patch-diff.githubusercontent.com/raw/anxdpanic/plugin.video.youtube/pull/260.patch";
sha256 = "11c9sfwl5kvfll2jws5b4i46s60v6gkfns4al13p4m5ch9rk06hs";
})
];
meta = with lib; {
homepage = "https://github.com/anxdpanic/plugin.video.youtube";
description = "YouTube is one of the biggest video-sharing websites of the world";
license = licenses.gpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,25 @@
{ stdenv, toKodiAddon, addonDir }:
{ name ? "${attrs.pname}-${attrs.version}"
, namespace
, sourceDir ? ""
, ... } @ attrs:
toKodiAddon (stdenv.mkDerivation ({
name = "kodi-" + name;
dontStrip = true;
extraRuntimeDependencies = [ ];
installPhase = ''
runHook preInstall
cd ./$sourceDir
d=$out${addonDir}/${namespace}
mkdir -p $d
sauce="."
[ -d ${namespace} ] && sauce=${namespace}
cp -R "$sauce/"* $d
runHook postInstall
'';
} // attrs))

View file

@ -0,0 +1,40 @@
{ stdenv, toKodiAddon, addonDir, cmake, kodi, kodi-platform, libcec_platform }:
{ name ? "${attrs.pname}-${attrs.version}"
, namespace
, version
, extraNativeBuildInputs ? []
, extraBuildInputs ? []
, extraRuntimeDependencies ? []
, extraCMakeFlags ? []
, extraInstallPhase ? "", ... } @ attrs:
toKodiAddon (stdenv.mkDerivation ({
name = "kodi-" + name;
dontStrip = true;
nativeBuildInputs = [ cmake ] ++ extraNativeBuildInputs;
buildInputs = [ kodi kodi-platform libcec_platform ] ++ extraBuildInputs;
inherit extraRuntimeDependencies;
# disables check ensuring install prefix is that of kodi
cmakeFlags = [
"-DOVERRIDE_PATHS=1"
] ++ extraCMakeFlags;
# kodi checks for addon .so libs existance in the addon folder (share/...)
# and the non-wrapped kodi lib/... folder before even trying to dlopen
# them. Symlinking .so, as setting LD_LIBRARY_PATH is of no use
installPhase = let n = namespace; in ''
runHook preInstall
make install
[[ -f $out/lib/addons/${n}/${n}.so ]] && ln -s $out/lib/addons/${n}/${n}.so $out${addonDir}/${n}/${n}.so || true
[[ -f $out/lib/addons/${n}/${n}.so.${version} ]] && ln -s $out/lib/addons/${n}/${n}.so.${version} $out${addonDir}/${n}/${n}.so.${version} || true
${extraInstallPhase}
runHook postInstall
'';
} // attrs))

View file

@ -0,0 +1,14 @@
{ callPackage, ... } @ args:
let
unwrapped = callPackage ./unwrapped.nix (removeAttrs args [ "callPackage" ]);
kodiPackages = callPackage ../../../top-level/kodi-packages.nix { kodi = unwrapped; };
in
unwrapped.overrideAttrs (oldAttrs: {
passthru = oldAttrs.passthru // {
packages = kodiPackages;
withPackages = func: callPackage ./wrapper.nix {
kodi = unwrapped;
addons = kodiPackages.requiredKodiAddons (func kodiPackages);
};
};
})

View file

@ -0,0 +1,259 @@
{ stdenv, lib, fetchFromGitHub, autoconf, automake, libtool, makeWrapper
, pkg-config, cmake, yasm, python3Packages
, libgcrypt, libgpg-error, libunistring
, boost, avahi, lame
, gettext, pcre-cpp, yajl, fribidi, which
, openssl, gperf, tinyxml2, taglib, libssh, swig, jre_headless
, gtest, ncurses, spdlog
, libxml2, systemd
, alsa-lib, libGLU, libGL, fontconfig, freetype, ftgl
, libjpeg, libpng, libtiff
, libmpeg2, libsamplerate, libmad
, libogg, libvorbis, flac, libxslt
, lzo, libcdio, libmodplug, libass, libbluray, libudfread
, sqlite, libmysqlclient, nasm, gnutls, libva, libdrm
, curl, bzip2, zip, unzip, glxinfo
, libcec, libcec_platform, dcadec, libuuid
, libcrossguid, libmicrohttpd
, bluez, doxygen, giflib, glib, harfbuzz, lcms2, libidn, libpthreadstubs, libtasn1
, libplist, p11-kit, zlib, flatbuffers, fstrcmp, rapidjson
, lirc
, x11Support ? true, libX11, xorgproto, libXt, libXmu, libXext, libXinerama, libXrandr, libXtst, libXfixes, xdpyinfo, libXdmcp
, dbusSupport ? true, dbus
, joystickSupport ? true, cwiid
, nfsSupport ? true, libnfs
, pulseSupport ? true, libpulseaudio
, rtmpSupport ? true, rtmpdump
, sambaSupport ? true, samba
, udevSupport ? true, udev
, usbSupport ? false, libusb-compat-0_1
, vdpauSupport ? true, libvdpau
, waylandSupport ? false, wayland, wayland-protocols
, waylandpp ? null, libxkbcommon
, gbmSupport ? false, mesa, libinput
, buildPackages
}:
assert usbSupport -> !udevSupport; # libusb-compat-0_1 won't be used if udev is avaliable
assert gbmSupport || waylandSupport || x11Support;
let
kodiReleaseDate = "20220303";
kodiVersion = "19.4";
rel = "Matrix";
kodi_src = fetchFromGitHub {
owner = "xbmc";
repo = "xbmc";
rev = "${kodiVersion}-${rel}";
sha256 = "sha256-XDtmY3KthiD91kvueQRSamBcdM7fBpRntmZX6KRsCzE=";
};
ffmpeg = stdenv.mkDerivation rec {
pname = "kodi-ffmpeg";
version = "4.3.2"; # see https://github.com/xbmc/xbmc/blob/${kodiVersion}-${rel}/tools/depends/target/ffmpeg/FFMPEG-VERSION
src = fetchFromGitHub {
owner = "xbmc";
repo = "FFmpeg";
rev = "${version}-${rel}-19.2";
sha256 = "14s215sgc93ds1mrdbkgb7fvy94lpgv2ldricyxzis0gbzqfgs4f";
};
preConfigure = ''
cp ${kodi_src}/tools/depends/target/ffmpeg/{CMakeLists.txt,*.cmake} .
sed -i 's/ --cpu=''${CPU}//' CMakeLists.txt
sed -i 's/--strip=''${CMAKE_STRIP}/--strip=''${CMAKE_STRIP} --ranlib=''${CMAKE_RANLIB}/' CMakeLists.txt
'';
cmakeFlags = lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
"-DCROSSCOMPILING=ON"
"-DCPU=${stdenv.hostPlatform.parsed.cpu.name}"
"-DOS=${stdenv.hostPlatform.parsed.kernel.name}"
"-DPKG_CONFIG_EXECUTABLE=pkg-config"
];
buildInputs = [ libidn libtasn1 p11-kit zlib libva ]
++ lib.optional vdpauSupport libvdpau;
nativeBuildInputs = [ cmake nasm pkg-config gnutls ];
};
# We can build these externally but FindLibDvd.cmake forces us to build it
# them, so we currently just use them for the src.
libdvdcss = fetchFromGitHub {
owner = "xbmc";
repo = "libdvdcss";
rev = "1.4.2-Leia-Beta-5";
sha256 = "0j41ydzx0imaix069s3z07xqw9q95k7llh06fc27dcn6f7b8ydyl";
};
libdvdnav = fetchFromGitHub {
owner = "xbmc";
repo = "libdvdnav";
rev = "6.0.0-Leia-Alpha-3";
sha256 = "0qwlf4lgahxqxk1r2pzl866mi03pbp7l1fc0rk522sc0ak2s9jhb";
};
libdvdread = fetchFromGitHub {
owner = "xbmc";
repo = "libdvdread";
rev = "6.0.0-Leia-Alpha-3";
sha256 = "1xxn01mhkdnp10cqdr357wx77vyzfb5glqpqyg8m0skyi75aii59";
};
kodi_platforms = lib.optional gbmSupport "gbm"
++ lib.optional waylandSupport "wayland"
++ lib.optional x11Support "x11";
in stdenv.mkDerivation {
pname = "kodi";
version = kodiVersion;
src = kodi_src;
# This is a backport of
# https://github.com/xbmc/xbmc/commit/a6dedce7ba1f03bdd83b019941d1e369a06f7888
# to Kodi 19.4 Matrix.
# This can be removed once a new release of Kodi comes out and we upgrade
# to it.
patches = [
./add-KODI_WEBSERVER_EXTRA_WHITELIST.patch
];
buildInputs = [
gnutls libidn libtasn1 nasm p11-kit
libxml2 python3Packages.python
boost libmicrohttpd
gettext pcre-cpp yajl fribidi libva libdrm
openssl gperf tinyxml2 taglib libssh
gtest ncurses spdlog
alsa-lib libGL libGLU fontconfig freetype ftgl
libjpeg libpng libtiff
libmpeg2 libsamplerate libmad
libogg libvorbis flac libxslt systemd
lzo libcdio libmodplug libass libbluray libudfread
sqlite libmysqlclient avahi lame
curl bzip2 zip unzip glxinfo
libcec libcec_platform dcadec libuuid
libgcrypt libgpg-error libunistring
libcrossguid libplist
bluez giflib glib harfbuzz lcms2 libpthreadstubs
ffmpeg flatbuffers fstrcmp rapidjson
lirc
mesa # for libEGL
]
++ lib.optional x11Support [
libX11 xorgproto libXt libXmu libXext.dev libXdmcp
libXinerama libXrandr.dev libXtst libXfixes
]
++ lib.optional dbusSupport dbus
++ lib.optional joystickSupport cwiid
++ lib.optional nfsSupport libnfs
++ lib.optional pulseSupport libpulseaudio
++ lib.optional rtmpSupport rtmpdump
++ lib.optional sambaSupport samba
++ lib.optional udevSupport udev
++ lib.optional usbSupport libusb-compat-0_1
++ lib.optional vdpauSupport libvdpau
++ lib.optionals waylandSupport [
wayland
waylandpp.dev
wayland-protocols
# Not sure why ".dev" is needed here, but CMake doesn't find libxkbcommon otherwise
libxkbcommon.dev
]
++ lib.optional gbmSupport [
libxkbcommon.dev
mesa.dev
libinput.dev
];
nativeBuildInputs = [
cmake
doxygen
makeWrapper
which
pkg-config
autoconf automake libtool # still needed for some components. Check if that is the case with 19.0
jre_headless yasm gettext python3Packages.python flatbuffers
# for TexturePacker
giflib zlib libpng libjpeg lzo
] ++ lib.optionals waylandSupport [ wayland-protocols waylandpp.bin ];
depsBuildBuild = [
buildPackages.stdenv.cc
];
cmakeFlags = [
"-DAPP_RENDER_SYSTEM=${if gbmSupport then "gles" else "gl"}"
"-Dlibdvdcss_URL=${libdvdcss}"
"-Dlibdvdnav_URL=${libdvdnav}"
"-Dlibdvdread_URL=${libdvdread}"
"-DGIT_VERSION=${kodiReleaseDate}"
"-DENABLE_EVENTCLIENTS=ON"
"-DENABLE_INTERNAL_CROSSGUID=OFF"
"-DENABLE_OPTICAL=ON"
"-DLIRC_DEVICE=/run/lirc/lircd"
"-DSWIG_EXECUTABLE=${buildPackages.swig}/bin/swig"
"-DFLATBUFFERS_FLATC_EXECUTABLE=${buildPackages.flatbuffers}/bin/flatc"
"-DPYTHON_EXECUTABLE=${buildPackages.python3Packages.python}/bin/python"
# When wrapped KODI_HOME will likely contain symlinks to static assets
# that Kodi's built in webserver will cautiously refuse to serve up
# (because their realpaths are outside of KODI_HOME and the other
# whitelisted directories). This adds the entire nix store to the Kodi
# webserver whitelist to avoid this problem.
"-DKODI_WEBSERVER_EXTRA_WHITELIST=${builtins.storeDir}"
] ++ lib.optional waylandSupport [
"-DWAYLANDPP_SCANNER=${buildPackages.waylandpp}/bin/wayland-scanner++"
];
# 14 tests fail but the biggest issue is that every test takes 30 seconds -
# I'm guessing there is a thing waiting to time out
doCheck = false;
preConfigure = ''
cmakeFlagsArray+=("-DCORE_PLATFORM_NAME=${lib.concatStringsSep " " kodi_platforms}")
'' + lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
# Need these tools on the build system when cross compiling,
# hacky, but have found no other way.
CXX=$CXX_FOR_BUILD LD=ld make -C tools/depends/native/JsonSchemaBuilder
cmakeFlags+=" -DWITH_JSONSCHEMABUILDER=$PWD/tools/depends/native/JsonSchemaBuilder/bin"
CXX=$CXX_FOR_BUILD LD=ld make EXTRA_CONFIGURE= -C tools/depends/native/TexturePacker
cmakeFlags+=" -DWITH_TEXTUREPACKER=$PWD/tools/depends/native/TexturePacker/bin"
'';
postPatch = ''
substituteInPlace xbmc/platform/posix/PosixTimezone.cpp \
--replace 'usr/share/zoneinfo' 'etc/zoneinfo'
'';
postInstall = ''
for p in $(ls $out/bin/) ; do
wrapProgram $out/bin/$p \
--prefix PATH ":" "${lib.makeBinPath ([ python3Packages.python glxinfo ]
++ lib.optional x11Support xdpyinfo ++ lib.optional sambaSupport samba)}" \
--prefix LD_LIBRARY_PATH ":" "${lib.makeLibraryPath
([ curl systemd libmad libvdpau libcec libcec_platform libass ]
++ lib.optional nfsSupport libnfs
++ lib.optional rtmpSupport rtmpdump)}"
done
substituteInPlace $out/share/xsessions/kodi.desktop \
--replace kodi-standalone $out/bin/kodi-standalone
'';
doInstallCheck = true;
installCheckPhase = "$out/bin/kodi --version";
passthru = {
pythonPackages = python3Packages;
ffmpeg = ffmpeg;
};
meta = with lib; {
description = "Media center";
homepage = "https://kodi.tv/";
license = licenses.gpl2Plus;
platforms = platforms.linux;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,39 @@
{ lib, makeWrapper, buildEnv, kodi, addons, callPackage }:
let
kodiPackages = callPackage ../../../top-level/kodi-packages.nix { inherit kodi; };
# linux distros are supposed to provide pillow and pycryptodome
requiredPythonPath = with kodi.pythonPackages; makePythonPath ([ pillow pycryptodome ]);
# each kodi addon can potentially export a python module which should be included in PYTHONPATH
# see any addon which supplies `passthru.pythonPath` and the corresponding entry in the addons `addon.xml`
# eg. `<extension point="xbmc.python.module" library="lib" />` -> pythonPath = "lib";
additionalPythonPath =
let
addonsWithPythonPath = lib.filter (addon: addon ? pythonPath) addons;
in
lib.concatMapStringsSep ":" (addon: "${addon}${kodiPackages.addonDir}/${addon.namespace}/${addon.pythonPath}") addonsWithPythonPath;
in
buildEnv {
name = "${kodi.name}-env";
paths = [ kodi ] ++ addons;
pathsToLink = [ "/share" ];
nativeBuildInputs = [ makeWrapper ];
postBuild = ''
mkdir $out/bin
for exe in kodi{,-standalone}
do
makeWrapper ${kodi}/bin/$exe $out/bin/$exe \
--prefix PYTHONPATH : ${requiredPythonPath}:${additionalPythonPath} \
--prefix KODI_HOME : $out/share/kodi \
--prefix LD_LIBRARY_PATH ":" "${lib.makeLibraryPath
(lib.concatMap
(plugin: plugin.extraRuntimeDependencies or []) addons)}"
done
'';
}