2020-02-21 07:54:53 +00:00
|
|
|
{ stdenv, lib, fetchpatch, fetchurl, fetchFromGitHub, autoconf, automake, libtool, makeWrapper, linuxHeaders
|
2018-09-06 20:40:18 +01:00
|
|
|
, pkgconfig, cmake, gnumake, yasm, python2Packages
|
2017-03-22 06:08:01 +00:00
|
|
|
, libgcrypt, libgpgerror, libunistring
|
|
|
|
, boost, avahi, lame, autoreconfHook
|
2016-04-15 08:57:13 +01:00
|
|
|
, gettext, pcre-cpp, yajl, fribidi, which
|
2020-10-01 11:47:23 +01:00
|
|
|
, openssl, gperf, tinyxml2, taglib, libssh, swig, jre_headless
|
2020-04-04 04:52:33 +01:00
|
|
|
, libxml2, systemd
|
2019-11-07 16:28:41 +00:00
|
|
|
, alsaLib, libGLU, libGL, glew, fontconfig, freetype, ftgl
|
2019-11-17 18:36:29 +00:00
|
|
|
, libjpeg, libpng, libtiff
|
2014-12-24 09:57:34 +00:00
|
|
|
, libmpeg2, libsamplerate, libmad
|
|
|
|
, libogg, libvorbis, flac, libxslt
|
|
|
|
, lzo, libcdio, libmodplug, libass, libbluray
|
2019-08-17 19:24:29 +01:00
|
|
|
, sqlite, libmysqlclient, nasm, gnutls, libva, libdrm
|
2020-04-04 04:52:33 +01:00
|
|
|
, curl, bzip2, zip, unzip, glxinfo
|
2016-02-21 14:31:41 +00:00
|
|
|
, libcec, libcec_platform, dcadec, libuuid
|
2017-03-22 06:08:01 +00:00
|
|
|
, libcrossguid, libmicrohttpd
|
2020-04-04 04:52:33 +01:00
|
|
|
, bluez, doxygen, giflib, glib, harfbuzz, lcms2, libidn, libpthreadstubs, libtasn1
|
2018-10-09 20:17:07 +01:00
|
|
|
, libplist, p11-kit, zlib, flatbuffers, fmt, fstrcmp, rapidjson
|
2020-03-22 08:49:08 +00:00
|
|
|
, lirc
|
2020-04-04 04:52:33 +01:00
|
|
|
, x11Support ? true, libX11, xorgproto, libXt, libXmu, libXext, libXinerama, libXrandr, libXtst, libXfixes, xdpyinfo, libXdmcp
|
2018-07-17 21:11:16 +01:00
|
|
|
, dbusSupport ? true, dbus ? null
|
2017-03-22 06:08:01 +00:00
|
|
|
, joystickSupport ? true, cwiid ? null
|
|
|
|
, nfsSupport ? true, libnfs ? null
|
|
|
|
, pulseSupport ? true, libpulseaudio ? null
|
|
|
|
, rtmpSupport ? true, rtmpdump ? null
|
|
|
|
, sambaSupport ? true, samba ? null
|
|
|
|
, udevSupport ? true, udev ? null
|
2020-04-28 04:29:39 +01:00
|
|
|
, usbSupport ? false, libusb-compat-0_1 ? null
|
2017-03-22 06:08:01 +00:00
|
|
|
, vdpauSupport ? true, libvdpau ? null
|
2019-04-11 19:06:06 +01:00
|
|
|
, useWayland ? false, wayland ? null, wayland-protocols ? null
|
|
|
|
, waylandpp ? null, libxkbcommon ? null
|
2019-12-15 15:05:57 +00:00
|
|
|
, useGbm ? false, mesa ? null, libinput ? null
|
2020-04-04 04:52:33 +01:00
|
|
|
, buildPackages
|
2014-12-24 09:57:34 +00:00
|
|
|
}:
|
|
|
|
|
2018-07-17 21:11:16 +01:00
|
|
|
assert dbusSupport -> dbus != null;
|
2017-03-22 06:08:01 +00:00
|
|
|
assert nfsSupport -> libnfs != null;
|
|
|
|
assert pulseSupport -> libpulseaudio != null;
|
|
|
|
assert rtmpSupport -> rtmpdump != null;
|
|
|
|
assert sambaSupport -> samba != null;
|
2014-12-24 09:57:34 +00:00
|
|
|
assert udevSupport -> udev != null;
|
2020-04-28 04:29:39 +01:00
|
|
|
assert usbSupport -> libusb-compat-0_1 != null && ! udevSupport; # libusb-compat-0_1 won't be used if udev is avaliable
|
2014-12-24 09:57:34 +00:00
|
|
|
assert vdpauSupport -> libvdpau != null;
|
2019-04-11 19:06:06 +01:00
|
|
|
assert useWayland -> wayland != null && wayland-protocols != null && waylandpp != null && libxkbcommon != null;
|
2017-03-22 06:08:01 +00:00
|
|
|
|
2014-12-24 09:57:34 +00:00
|
|
|
let
|
2020-08-08 07:27:47 +01:00
|
|
|
kodiReleaseDate = "20200728";
|
2020-11-09 13:36:21 +00:00
|
|
|
kodiVersion = "18.9";
|
2018-10-09 20:17:07 +01:00
|
|
|
rel = "Leia";
|
2017-03-22 06:08:01 +00:00
|
|
|
|
|
|
|
kodi_src = fetchFromGitHub {
|
|
|
|
owner = "xbmc";
|
|
|
|
repo = "xbmc";
|
|
|
|
rev = "${kodiVersion}-${rel}";
|
2020-11-09 13:36:21 +00:00
|
|
|
sha256 = "0nnf7823pixj6n2fkjc8rbdjwayvhlbglij2by4rnjzzfgmqmw20";
|
2019-07-06 02:10:56 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
cmakeProto = fetchurl {
|
|
|
|
url = "https://raw.githubusercontent.com/pramsey/libght/ca9b1121c352ea10170636e170040e1af015bad1/cmake/modules/CheckPrototypeExists.cmake";
|
|
|
|
sha256 = "1zai82gm5x55n3xvdv7mns3ja6a2k81x9zz0nk42j6s2yb0fkjxh";
|
2014-12-24 09:57:34 +00:00
|
|
|
};
|
2017-03-22 06:08:01 +00:00
|
|
|
|
2019-07-06 02:10:56 +01:00
|
|
|
cmakeProtoPatch = ''
|
|
|
|
# get rid of windows headers as they will otherwise be found first
|
|
|
|
rm -rf msvc
|
|
|
|
|
|
|
|
cp ${cmakeProto} cmake/${cmakeProto.name}
|
|
|
|
# we need to enable support for C++ for check_prototype_exists to do its thing
|
|
|
|
substituteInPlace CMakeLists.txt --replace 'LANGUAGES C' 'LANGUAGES C CXX'
|
|
|
|
if [ -f cmake/CheckHeadersSTDC.cmake ]; then
|
|
|
|
sed -i cmake/CheckHeadersSTDC.cmake \
|
|
|
|
-e '7iinclude(CheckPrototypeExists)'
|
|
|
|
fi
|
|
|
|
'';
|
|
|
|
|
2017-03-22 06:08:01 +00:00
|
|
|
kodiDependency = { name, version, rev, sha256, ... } @attrs:
|
|
|
|
let
|
|
|
|
attrs' = builtins.removeAttrs attrs ["name" "version" "rev" "sha256"];
|
|
|
|
in stdenv.mkDerivation ({
|
|
|
|
name = "kodi-${lib.toLower name}-${version}";
|
|
|
|
src = fetchFromGitHub {
|
|
|
|
owner = "xbmc";
|
|
|
|
repo = name;
|
|
|
|
inherit rev sha256;
|
|
|
|
};
|
|
|
|
} // attrs');
|
|
|
|
|
|
|
|
ffmpeg = kodiDependency rec {
|
|
|
|
name = "FFmpeg";
|
2018-10-09 20:17:07 +01:00
|
|
|
version = "4.0.3";
|
2019-03-23 16:03:56 +00:00
|
|
|
rev = "${version}-${rel}-18.2";
|
|
|
|
sha256 = "1krsjlr949iy5l6ljxancza1yi6w1annxc5s6k283i9mb15qy8cy";
|
2017-03-22 06:08:01 +00:00
|
|
|
preConfigure = ''
|
|
|
|
cp ${kodi_src}/tools/depends/target/ffmpeg/{CMakeLists.txt,*.cmake} .
|
2020-04-04 04:52:33 +01:00
|
|
|
sed -i 's/ --cpu=''${CPU}//' CMakeLists.txt
|
|
|
|
sed -i 's/--strip=''${CMAKE_STRIP}/--strip=''${CMAKE_STRIP} --ranlib=''${CMAKE_RANLIB}/' CMakeLists.txt
|
2017-03-22 06:08:01 +00:00
|
|
|
'';
|
2020-04-04 04:52:33 +01:00
|
|
|
cmakeFlags = lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
|
|
|
|
"-DCROSSCOMPILING=ON"
|
|
|
|
"-DCPU=${stdenv.hostPlatform.parsed.cpu.name}"
|
|
|
|
"-DOS=${stdenv.hostPlatform.parsed.kernel.name}"
|
|
|
|
"-DPKG_CONFIG_EXECUTABLE=pkgconfig"
|
|
|
|
];
|
|
|
|
buildInputs = [ libidn libtasn1 p11-kit zlib libva ]
|
2017-12-23 08:28:53 +00:00
|
|
|
++ lib.optional vdpauSupport libvdpau;
|
2020-04-04 04:52:33 +01:00
|
|
|
nativeBuildInputs = [ cmake nasm pkgconfig gnutls ];
|
2017-04-02 13:12:24 +01:00
|
|
|
};
|
2017-03-22 06:08:01 +00:00
|
|
|
|
2019-07-06 02:10:56 +01:00
|
|
|
# We can build these externally but FindLibDvd.cmake forces us to build it
|
|
|
|
# them, so we currently just use them for the src.
|
2018-10-09 20:17:07 +01:00
|
|
|
libdvdcss = kodiDependency rec {
|
2017-03-22 06:08:01 +00:00
|
|
|
name = "libdvdcss";
|
2018-10-09 20:17:07 +01:00
|
|
|
version = "1.4.2";
|
|
|
|
rev = "${version}-${rel}-Beta-5";
|
|
|
|
sha256 = "0j41ydzx0imaix069s3z07xqw9q95k7llh06fc27dcn6f7b8ydyl";
|
2019-07-06 02:10:56 +01:00
|
|
|
buildInputs = [ linuxHeaders ];
|
|
|
|
nativeBuildInputs = [ cmake pkgconfig ];
|
|
|
|
postPatch = ''
|
|
|
|
rm -rf msvc
|
|
|
|
|
|
|
|
substituteInPlace config.h.cm \
|
|
|
|
--replace '#cmakedefine O_BINARY "''${O_BINARY}"' '#define O_BINARY 0'
|
|
|
|
'';
|
|
|
|
cmakeFlags = [
|
|
|
|
"-DBUILD_SHARED_LIBS=1"
|
|
|
|
"-DHAVE_LINUX_DVD_STRUCT=1"
|
|
|
|
];
|
2017-03-22 06:08:01 +00:00
|
|
|
};
|
|
|
|
|
2018-10-09 20:17:07 +01:00
|
|
|
libdvdnav = kodiDependency rec {
|
2017-03-22 06:08:01 +00:00
|
|
|
name = "libdvdnav";
|
2018-10-09 20:17:07 +01:00
|
|
|
version = "6.0.0";
|
|
|
|
rev = "${version}-${rel}-Alpha-3";
|
|
|
|
sha256 = "0qwlf4lgahxqxk1r2pzl866mi03pbp7l1fc0rk522sc0ak2s9jhb";
|
2019-07-06 02:10:56 +01:00
|
|
|
buildInputs = [ libdvdcss libdvdread ];
|
|
|
|
nativeBuildInputs = [ cmake pkgconfig ];
|
|
|
|
postPatch = cmakeProtoPatch;
|
|
|
|
postInstall = ''
|
|
|
|
mv $out/lib/liblibdvdnav.so $out/lib/libdvdnav.so
|
|
|
|
'';
|
2017-04-02 13:12:24 +01:00
|
|
|
};
|
2017-03-22 06:08:01 +00:00
|
|
|
|
2018-10-09 20:17:07 +01:00
|
|
|
libdvdread = kodiDependency rec {
|
2017-03-22 06:08:01 +00:00
|
|
|
name = "libdvdread";
|
2018-10-09 20:17:07 +01:00
|
|
|
version = "6.0.0";
|
|
|
|
rev = "${version}-${rel}-Alpha-3";
|
|
|
|
sha256 = "1xxn01mhkdnp10cqdr357wx77vyzfb5glqpqyg8m0skyi75aii59";
|
2019-07-06 02:10:56 +01:00
|
|
|
buildInputs = [ libdvdcss ];
|
|
|
|
nativeBuildInputs = [ cmake pkgconfig ];
|
|
|
|
configureFlags = [ "--with-libdvdcss" ];
|
|
|
|
postPatch = cmakeProtoPatch;
|
2017-03-22 06:08:01 +00:00
|
|
|
};
|
|
|
|
|
2019-08-13 22:52:01 +01:00
|
|
|
in stdenv.mkDerivation {
|
2019-04-11 19:06:06 +01:00
|
|
|
name = "kodi-${lib.optionalString useWayland "wayland-"}${kodiVersion}";
|
2014-12-24 09:57:34 +00:00
|
|
|
|
2017-03-22 06:08:01 +00:00
|
|
|
src = kodi_src;
|
2014-12-24 09:57:34 +00:00
|
|
|
|
|
|
|
buildInputs = [
|
2018-02-25 02:23:58 +00:00
|
|
|
gnutls libidn libtasn1 nasm p11-kit
|
2020-04-04 04:52:33 +01:00
|
|
|
libxml2 python2Packages.python
|
2017-05-24 09:03:17 +01:00
|
|
|
boost libmicrohttpd
|
2018-03-25 22:33:23 +01:00
|
|
|
gettext pcre-cpp yajl fribidi libva libdrm
|
2020-04-04 04:52:33 +01:00
|
|
|
openssl gperf tinyxml2 taglib libssh
|
|
|
|
alsaLib libGL libGLU fontconfig freetype ftgl
|
2019-11-17 18:36:29 +00:00
|
|
|
libjpeg libpng libtiff
|
2014-12-24 09:57:34 +00:00
|
|
|
libmpeg2 libsamplerate libmad
|
|
|
|
libogg libvorbis flac libxslt systemd
|
|
|
|
lzo libcdio libmodplug libass libbluray
|
2019-08-17 19:24:29 +01:00
|
|
|
sqlite libmysqlclient avahi lame
|
2020-04-04 04:52:33 +01:00
|
|
|
curl bzip2 zip unzip glxinfo
|
2016-02-21 14:31:41 +00:00
|
|
|
libcec libcec_platform dcadec libuuid
|
2017-03-22 06:08:01 +00:00
|
|
|
libgcrypt libgpgerror libunistring
|
2020-04-04 04:52:33 +01:00
|
|
|
libcrossguid libplist
|
|
|
|
bluez giflib glib harfbuzz lcms2 libpthreadstubs
|
2018-10-09 20:17:07 +01:00
|
|
|
ffmpeg flatbuffers fmt fstrcmp rapidjson
|
2020-03-22 08:49:08 +00:00
|
|
|
lirc
|
2017-03-22 06:08:01 +00:00
|
|
|
# libdvdcss libdvdnav libdvdread
|
2014-12-24 09:57:34 +00:00
|
|
|
]
|
2020-04-04 04:52:33 +01:00
|
|
|
++ lib.optional x11Support [
|
2020-05-16 14:52:20 +01:00
|
|
|
libX11 xorgproto libXt libXmu libXext.dev libXdmcp
|
|
|
|
libXinerama libXrandr.dev libXtst libXfixes
|
2020-04-04 04:52:33 +01:00
|
|
|
]
|
2018-07-17 21:11:16 +01:00
|
|
|
++ lib.optional dbusSupport dbus
|
2020-04-04 04:52:33 +01:00
|
|
|
++ lib.optional joystickSupport cwiid
|
2017-03-22 06:08:01 +00:00
|
|
|
++ lib.optional nfsSupport libnfs
|
|
|
|
++ lib.optional pulseSupport libpulseaudio
|
|
|
|
++ lib.optional rtmpSupport rtmpdump
|
|
|
|
++ lib.optional sambaSupport samba
|
|
|
|
++ lib.optional udevSupport udev
|
2020-04-28 04:29:39 +01:00
|
|
|
++ lib.optional usbSupport libusb-compat-0_1
|
2019-04-11 19:06:06 +01:00
|
|
|
++ lib.optional vdpauSupport libvdpau
|
2019-11-10 00:12:23 +00:00
|
|
|
++ lib.optionals useWayland [
|
2020-08-08 07:27:47 +01:00
|
|
|
wayland
|
|
|
|
waylandpp.dev
|
2020-04-22 16:20:20 +01:00
|
|
|
wayland-protocols
|
2019-04-11 19:06:06 +01:00
|
|
|
# Not sure why ".dev" is needed here, but CMake doesn't find libxkbcommon otherwise
|
|
|
|
libxkbcommon.dev
|
2019-12-15 15:05:57 +00:00
|
|
|
]
|
|
|
|
++ lib.optional useGbm [
|
|
|
|
libxkbcommon.dev
|
|
|
|
mesa.dev
|
|
|
|
libinput.dev
|
2019-04-11 19:06:06 +01:00
|
|
|
];
|
2016-02-29 07:31:58 +00:00
|
|
|
|
2017-05-24 09:03:17 +01:00
|
|
|
nativeBuildInputs = [
|
2017-03-22 06:08:01 +00:00
|
|
|
cmake
|
|
|
|
doxygen
|
|
|
|
makeWrapper
|
|
|
|
which
|
|
|
|
pkgconfig gnumake
|
2019-07-06 02:10:56 +01:00
|
|
|
autoconf automake libtool # still needed for some components. Check if that is the case with 19.0
|
2020-10-01 11:47:23 +01:00
|
|
|
jre_headless yasm gettext python2Packages.python flatbuffers
|
2020-04-04 04:52:33 +01:00
|
|
|
|
|
|
|
# for TexturePacker
|
|
|
|
giflib zlib libpng libjpeg lzo
|
2019-11-01 13:01:02 +00:00
|
|
|
] ++ lib.optionals useWayland [ wayland-protocols waylandpp.bin ];
|
2014-12-24 09:57:34 +00:00
|
|
|
|
2020-04-04 04:52:33 +01:00
|
|
|
depsBuildBuild = [
|
|
|
|
buildPackages.stdenv.cc
|
|
|
|
];
|
|
|
|
|
2017-03-22 06:08:01 +00:00
|
|
|
cmakeFlags = [
|
|
|
|
"-Dlibdvdcss_URL=${libdvdcss.src}"
|
|
|
|
"-Dlibdvdnav_URL=${libdvdnav.src}"
|
|
|
|
"-Dlibdvdread_URL=${libdvdread.src}"
|
|
|
|
"-DGIT_VERSION=${kodiReleaseDate}"
|
|
|
|
"-DENABLE_EVENTCLIENTS=ON"
|
|
|
|
"-DENABLE_INTERNAL_CROSSGUID=OFF"
|
|
|
|
"-DENABLE_OPTICAL=ON"
|
2020-04-04 04:52:33 +01:00
|
|
|
"-DLIRC_DEVICE=/run/lirc/lircd"
|
|
|
|
"-DSWIG_EXECUTABLE=${buildPackages.swig}/bin/swig"
|
|
|
|
"-DFLATBUFFERS_FLATC_EXECUTABLE=${buildPackages.flatbuffers}/bin/flatc"
|
|
|
|
"-DPYTHON_EXECUTABLE=${buildPackages.python2Packages.python}/bin/python"
|
2019-04-11 19:06:06 +01:00
|
|
|
] ++ lib.optional useWayland [
|
|
|
|
"-DCORE_PLATFORM_NAME=wayland"
|
|
|
|
"-DWAYLAND_RENDER_SYSTEM=gl"
|
2020-04-04 04:52:33 +01:00
|
|
|
"-DWAYLANDPP_SCANNER=${buildPackages.waylandpp}/bin/wayland-scanner++"
|
2019-12-15 15:05:57 +00:00
|
|
|
] ++ lib.optional useGbm [
|
|
|
|
"-DCORE_PLATFORM_NAME=gbm"
|
|
|
|
"-DGBM_RENDER_SYSTEM=gles"
|
2017-03-22 06:08:01 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
# 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;
|
2014-12-24 09:57:34 +00:00
|
|
|
|
2020-04-04 04:52:33 +01:00
|
|
|
# Need these tools on the build system when cross compiling,
|
|
|
|
# hacky, but have found no other way.
|
|
|
|
preConfigure = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
|
|
|
|
CXX=c++ LD=ld make -C tools/depends/native/JsonSchemaBuilder
|
|
|
|
cmakeFlags+=" -DWITH_JSONSCHEMABUILDER=$PWD/tools/depends/native/JsonSchemaBuilder/bin"
|
|
|
|
|
|
|
|
CXX=c++ LD=ld make EXTRA_CONFIGURE= -C tools/depends/native/TexturePacker
|
|
|
|
cmakeFlags+=" -DWITH_TEXTUREPACKER=$PWD/tools/depends/native/TexturePacker/bin"
|
|
|
|
'';
|
|
|
|
|
2014-12-24 09:57:34 +00:00
|
|
|
postPatch = ''
|
2018-10-09 20:17:07 +01:00
|
|
|
substituteInPlace xbmc/platform/linux/LinuxTimezone.cpp \
|
2014-12-24 09:57:34 +00:00
|
|
|
--replace 'usr/share/zoneinfo' 'etc/zoneinfo'
|
|
|
|
'';
|
|
|
|
|
|
|
|
postInstall = ''
|
|
|
|
for p in $(ls $out/bin/) ; do
|
|
|
|
wrapProgram $out/bin/$p \
|
2020-04-04 04:52:33 +01:00
|
|
|
--prefix PATH ":" "${lib.makeBinPath ([ python2Packages.python glxinfo ] ++ lib.optional x11Support xdpyinfo)}" \
|
2015-10-06 14:32:17 +01:00
|
|
|
--prefix LD_LIBRARY_PATH ":" "${lib.makeLibraryPath
|
2020-04-04 04:52:33 +01:00
|
|
|
([ curl systemd libmad libvdpau libcec libcec_platform libass ]
|
|
|
|
++ lib.optional nfsSupport libnfs
|
|
|
|
++ lib.optional rtmpSupport rtmpdump)}"
|
2014-12-24 09:57:34 +00:00
|
|
|
done
|
2017-03-22 06:08:01 +00:00
|
|
|
|
|
|
|
substituteInPlace $out/share/xsessions/kodi.desktop \
|
|
|
|
--replace kodi-standalone $out/bin/kodi-standalone
|
2014-12-24 09:57:34 +00:00
|
|
|
'';
|
|
|
|
|
2017-03-22 06:08:01 +00:00
|
|
|
doInstallCheck = true;
|
|
|
|
|
|
|
|
installCheckPhase = "$out/bin/kodi --version";
|
|
|
|
|
2018-09-06 20:40:18 +01:00
|
|
|
passthru = {
|
|
|
|
pythonPackages = python2Packages;
|
|
|
|
};
|
|
|
|
|
2021-01-11 07:54:33 +00:00
|
|
|
meta = with lib; {
|
2014-12-24 09:57:34 +00:00
|
|
|
description = "Media center";
|
2020-04-01 02:11:51 +01:00
|
|
|
homepage = "https://kodi.tv/";
|
2017-03-22 06:08:01 +00:00
|
|
|
license = licenses.gpl2;
|
|
|
|
platforms = platforms.linux;
|
2018-10-09 20:17:07 +01:00
|
|
|
maintainers = with maintainers; [ domenkozar titanous edwtjo peterhoeg sephalon ];
|
2014-12-24 09:57:34 +00:00
|
|
|
};
|
|
|
|
}
|