summary refs log tree commit diff
path: root/pkgs/applications/video/kodi/commons.nix
blob: eff9b7871069b35900f68aad9dc97b799548b23c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
{ stdenv, fetchFromGitHub
, cmake, kodiPlain, libcec_platform, tinyxml }:

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 ];

  };

  mkKodiAPIPlugin = { 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
    '';

  };

  mkKodiPlugin = mkKodiAPIPlugin;

  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}
    '';

  };
}