From acf6abcafcf0282cbc2ea85e10ce759e5203d445 Mon Sep 17 00:00:00 2001 From: Aaron Andersen Date: Tue, 20 Jul 2021 19:58:09 -0400 Subject: [PATCH] kodi: set proper PYTHONPATH for addons --- .../video/kodi-packages/certifi/default.nix | 7 +++++-- .../video/kodi-packages/chardet/default.nix | 7 +++++-- .../video/kodi-packages/dateutil/default.nix | 7 +++++-- .../video/kodi-packages/idna/default.nix | 7 +++++-- .../kodi-packages/inputstreamhelper/default.nix | 7 +++++-- .../video/kodi-packages/kodi-six/default.nix | 7 +++++-- .../video/kodi-packages/myconnpy/default.nix | 7 +++++-- .../video/kodi-packages/pdfreader/default.nix | 2 ++ .../video/kodi-packages/requests/default.nix | 7 +++++-- .../video/kodi-packages/signals/default.nix | 7 +++++-- .../video/kodi-packages/urllib3/default.nix | 7 +++++-- .../video/kodi-packages/websocket/default.nix | 7 +++++-- .../video/kodi-packages/youtube/default.nix | 7 +++++-- pkgs/applications/video/kodi/wrapper.nix | 17 ++++++++++++++--- 14 files changed, 76 insertions(+), 27 deletions(-) diff --git a/pkgs/applications/video/kodi-packages/certifi/default.nix b/pkgs/applications/video/kodi-packages/certifi/default.nix index b99a64f3eec..1088f560adf 100644 --- a/pkgs/applications/video/kodi-packages/certifi/default.nix +++ b/pkgs/applications/video/kodi-packages/certifi/default.nix @@ -9,8 +9,11 @@ buildKodiAddon rec { sha256 = "1z49b8va7wdyr714c8ixb2sldi0igffcjj3xpbmga58ph0z985vy"; }; - passthru.updateScript = addonUpdateScript { - attrPath = "kodi.packages.certifi"; + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.certifi"; + }; }; meta = with lib; { diff --git a/pkgs/applications/video/kodi-packages/chardet/default.nix b/pkgs/applications/video/kodi-packages/chardet/default.nix index cfe3d501cbd..fe482447cfa 100644 --- a/pkgs/applications/video/kodi-packages/chardet/default.nix +++ b/pkgs/applications/video/kodi-packages/chardet/default.nix @@ -9,8 +9,11 @@ buildKodiAddon rec { sha256 = "1jsd165mb1b8jdan2jbjd3y3xa0xam2cxcccmwazkybpa0r6a7dj"; }; - passthru.updateScript = addonUpdateScript { - attrPath = "kodi.packages.chardet"; + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.chardet"; + }; }; meta = with lib; { diff --git a/pkgs/applications/video/kodi-packages/dateutil/default.nix b/pkgs/applications/video/kodi-packages/dateutil/default.nix index 665858d3d57..54a22cedf90 100644 --- a/pkgs/applications/video/kodi-packages/dateutil/default.nix +++ b/pkgs/applications/video/kodi-packages/dateutil/default.nix @@ -14,8 +14,11 @@ buildKodiAddon rec { six ]; - passthru.updateScript = addonUpdateScript { - attrPath = "kodi.packages.dateutil"; + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.dateutil"; + }; }; meta = with lib; { diff --git a/pkgs/applications/video/kodi-packages/idna/default.nix b/pkgs/applications/video/kodi-packages/idna/default.nix index c90f52ffdc9..01f16696fae 100644 --- a/pkgs/applications/video/kodi-packages/idna/default.nix +++ b/pkgs/applications/video/kodi-packages/idna/default.nix @@ -9,8 +9,11 @@ buildKodiAddon rec { sha256 = "0pm86m8kh2p0brps3xzxcmmabvb4izkglzkj8dsn33br3vlc7cm7"; }; - passthru.updateScript = addonUpdateScript { - attrPath = "kodi.packages.idna"; + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.idna"; + }; }; meta = with lib; { diff --git a/pkgs/applications/video/kodi-packages/inputstreamhelper/default.nix b/pkgs/applications/video/kodi-packages/inputstreamhelper/default.nix index 4ca45f8b7b9..fcf53e7a169 100644 --- a/pkgs/applications/video/kodi-packages/inputstreamhelper/default.nix +++ b/pkgs/applications/video/kodi-packages/inputstreamhelper/default.nix @@ -9,8 +9,11 @@ buildKodiAddon rec { sha256 = "0y4xn3ygwv1kb7gya7iwdga0g9sa89snpnram0wwqzqn8wn2lyb4"; }; - passthru.updateScript = addonUpdateScript { - attrPath = "kodi.packages.inputstreamhelper"; + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.inputstreamhelper"; + }; }; meta = with lib; { diff --git a/pkgs/applications/video/kodi-packages/kodi-six/default.nix b/pkgs/applications/video/kodi-packages/kodi-six/default.nix index b4f1169b36d..24404ef349e 100644 --- a/pkgs/applications/video/kodi-packages/kodi-six/default.nix +++ b/pkgs/applications/video/kodi-packages/kodi-six/default.nix @@ -10,8 +10,11 @@ buildKodiAddon rec { sha256 = "14m232p9hx925pbk8knsg994m1nbpa5278zmcrnfblh4z84gjv4x"; }; - passthru.updateScript = addonUpdateScript { - attrPath = "kodi.packages.kodi-six"; + passthru = { + pythonPath = "libs"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.kodi-six"; + }; }; meta = with lib; { diff --git a/pkgs/applications/video/kodi-packages/myconnpy/default.nix b/pkgs/applications/video/kodi-packages/myconnpy/default.nix index bd0c98137a5..e39625545f6 100644 --- a/pkgs/applications/video/kodi-packages/myconnpy/default.nix +++ b/pkgs/applications/video/kodi-packages/myconnpy/default.nix @@ -9,8 +9,11 @@ buildKodiAddon rec { sha256 = "1cx3qdzw9lkkmbyvyrmc2i193is20fihn2sfl7kmv43f708vam0k"; }; - passthru.updateScript = addonUpdateScript { - attrPath = "kodi.packages.myconnpy"; + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.myconnpy"; + }; }; meta = with lib; { diff --git a/pkgs/applications/video/kodi-packages/pdfreader/default.nix b/pkgs/applications/video/kodi-packages/pdfreader/default.nix index 8896a94c9c3..62a5853c796 100644 --- a/pkgs/applications/video/kodi-packages/pdfreader/default.nix +++ b/pkgs/applications/video/kodi-packages/pdfreader/default.nix @@ -11,6 +11,8 @@ buildKodiAddon rec { sha256 = "0nkqhlm1gyagq6xpdgqvd5qxyr2ngpml9smdmzfabc8b972mwjml"; }; + passthru.pythonPath = "lib/api"; + meta = with lib; { homepage = "https://forum.kodi.tv/showthread.php?tid=187421"; description = "A comic book reader"; diff --git a/pkgs/applications/video/kodi-packages/requests/default.nix b/pkgs/applications/video/kodi-packages/requests/default.nix index 0f2d5044f04..c5759fcc325 100644 --- a/pkgs/applications/video/kodi-packages/requests/default.nix +++ b/pkgs/applications/video/kodi-packages/requests/default.nix @@ -16,8 +16,11 @@ buildKodiAddon rec { urllib3 ]; - passthru.updateScript = addonUpdateScript { - attrPath = "kodi.packages.requests"; + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.requests"; + }; }; meta = with lib; { diff --git a/pkgs/applications/video/kodi-packages/signals/default.nix b/pkgs/applications/video/kodi-packages/signals/default.nix index bba7b112e9f..b66b1e99a8b 100644 --- a/pkgs/applications/video/kodi-packages/signals/default.nix +++ b/pkgs/applications/video/kodi-packages/signals/default.nix @@ -9,8 +9,11 @@ buildKodiAddon rec { sha256 = "1qcjbakch8hvx02wc01zv014nmzgn6ahc4n2bj5mzr114ppd3hjs"; }; - passthru.updateScript = addonUpdateScript { - attrPath = "kodi.packages.signals"; + passthru= { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.signals"; + }; }; meta = with lib; { diff --git a/pkgs/applications/video/kodi-packages/urllib3/default.nix b/pkgs/applications/video/kodi-packages/urllib3/default.nix index 12d8e60d67b..de0fbb99765 100644 --- a/pkgs/applications/video/kodi-packages/urllib3/default.nix +++ b/pkgs/applications/video/kodi-packages/urllib3/default.nix @@ -9,8 +9,11 @@ buildKodiAddon rec { sha256 = "1d2k6gbsnhdadcl1xc7igz4m71z2fcnpln5ppfjv455cmkk110vf"; }; - passthru.updateScript = addonUpdateScript { - attrPath = "kodi.packages.urllib3"; + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.urllib3"; + }; }; meta = with lib; { diff --git a/pkgs/applications/video/kodi-packages/websocket/default.nix b/pkgs/applications/video/kodi-packages/websocket/default.nix index 3c83e1f9b00..423dfa73f34 100644 --- a/pkgs/applications/video/kodi-packages/websocket/default.nix +++ b/pkgs/applications/video/kodi-packages/websocket/default.nix @@ -14,8 +14,11 @@ buildKodiAddon rec { six ]; - passthru.updateScript = addonUpdateScript { - attrPath = "kodi.packages.websocket"; + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.websocket"; + }; }; meta = with lib; { diff --git a/pkgs/applications/video/kodi-packages/youtube/default.nix b/pkgs/applications/video/kodi-packages/youtube/default.nix index 65613658e0f..8e57adbfb1a 100644 --- a/pkgs/applications/video/kodi-packages/youtube/default.nix +++ b/pkgs/applications/video/kodi-packages/youtube/default.nix @@ -16,8 +16,11 @@ buildKodiAddon rec { inputstreamhelper ]; - passthru.updateScript = addonUpdateScript { - attrPath = "kodi.packages.youtube"; + passthru = { + pythonPath = "resources/lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.youtube"; + }; }; meta = with lib; { diff --git a/pkgs/applications/video/kodi/wrapper.nix b/pkgs/applications/video/kodi/wrapper.nix index 86164682138..7377e638676 100644 --- a/pkgs/applications/video/kodi/wrapper.nix +++ b/pkgs/applications/video/kodi/wrapper.nix @@ -1,8 +1,19 @@ -{ lib, makeWrapper, buildEnv, kodi, addons }: +{ 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 - requiredPythonPackages = with kodi.pythonPackages; [ pillow pycryptodome] ++ addons; + 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. `` -> 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 { @@ -18,7 +29,7 @@ buildEnv { for exe in kodi{,-standalone} do makeWrapper ${kodi}/bin/$exe $out/bin/$exe \ - --prefix PYTHONPATH : ${kodi.pythonPackages.makePythonPath requiredPythonPackages} \ + --prefix PYTHONPATH : ${requiredPythonPath}:${additionalPythonPath} \ --prefix KODI_HOME : $out/share/kodi \ --prefix LD_LIBRARY_PATH ":" "${lib.makeLibraryPath (lib.concatMap