about summary refs log tree commit diff
path: root/pkgs/applications/video/kodi/plugins.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/video/kodi/plugins.nix')
-rw-r--r--pkgs/applications/video/kodi/plugins.nix78
1 files changed, 76 insertions, 2 deletions
diff --git a/pkgs/applications/video/kodi/plugins.nix b/pkgs/applications/video/kodi/plugins.nix
index 2ba23e72a2ed..e2e4dd28f8f5 100644
--- a/pkgs/applications/video/kodi/plugins.nix
+++ b/pkgs/applications/video/kodi/plugins.nix
@@ -1,10 +1,84 @@
 { stdenv, callPackage, fetchurl, fetchFromGitHub, unzip
+, cmake, kodiPlain, libcec_platform, tinyxml
 , steam, libusb, pcre-cpp, jsoncpp, libhdhomerun, zlib }:
 
-with (callPackage ./commons.nix {});
-
 rec {
 
+  pluginDir = "/share/kodi/addons";
+
+  kodi-platform = stdenv.mkDerivation rec {
+    project = "kodi-platform";
+    version = "17.1";
+    name = "${project}-${version}";
+
+    src = fetchFromGitHub {
+      owner = "xbmc";
+      repo = project;
+      rev = "c8188d82678fec6b784597db69a68e74ff4986b5";
+      sha256 = "1r3gs3c6zczmm66qcxh9mr306clwb3p7ykzb70r3jv5jqggiz199";
+    };
+
+    buildInputs = [ cmake kodiPlain libcec_platform tinyxml ];
+  };
+
+  mkKodiPlugin = { plugin, namespace, version, src, meta, sourceDir ? null, ... }:
+  stdenv.lib.makeOverridable stdenv.mkDerivation rec {
+
+    inherit src meta sourceDir;
+
+    name = "kodi-plugin-${plugin}-${version}";
+
+    passthru = {
+      kodiPlugin = pluginDir;
+      namespace = namespace;
+    };
+
+    dontStrip = true;
+
+    installPhase = ''
+      ${if isNull sourceDir then "" else "cd $src/$sourceDir"}
+      d=$out${pluginDir}/${namespace}
+      mkdir -p $d
+      sauce="."
+      [ -d ${namespace} ] && sauce=${namespace}
+      cp -R "$sauce/"* $d
+    '';
+
+  };
+
+  mkKodiABIPlugin = { plugin, namespace, version, src, meta
+                    , extraBuildInputs ? [], sourceDir ? null, ... }:
+  stdenv.lib.makeOverridable stdenv.mkDerivation rec {
+
+    inherit src meta sourceDir;
+
+    name = "kodi-plugin-${plugin}-${version}";
+
+    passthru = {
+      kodiPlugin = pluginDir;
+      namespace = namespace;
+    };
+
+    dontStrip = true;
+
+    buildInputs = [ cmake kodiPlain kodi-platform libcec_platform ]
+               ++ extraBuildInputs;
+
+    # disables check ensuring install prefix is that of kodi
+    cmakeFlags = [
+      "-DOVERRIDE_PATHS=1"
+    ];
+
+    # kodi checks for plugin .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 ''
+      make install
+      ln -s $out/lib/addons/${n}/${n}.so.${version} $out${pluginDir}/${n}/${n}.so.${version}
+    '';
+
+  };
+
   advanced-launcher = mkKodiPlugin rec {
 
     plugin = "advanced-launcher";