From 34f5618bcacfec9f0c810856d2286b8a01229a25 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 16 Nov 2015 22:31:26 -0500 Subject: [PATCH] gnu: Add kodi. * gnu/packages/kodi.scm: New file. * gnu-system.am (GNU_SYSTEM_MODULES): Add it. --- gnu-system.am | 1 + gnu/packages/kodi.scm | 223 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 224 insertions(+) create mode 100644 gnu/packages/kodi.scm diff --git a/gnu-system.am b/gnu-system.am index 8865df5110..f69645ba1a 100644 --- a/gnu-system.am +++ b/gnu-system.am @@ -172,6 +172,7 @@ GNU_SYSTEM_MODULES = \ gnu/packages/kde.scm \ gnu/packages/kde-frameworks.scm \ gnu/packages/key-mon.scm \ + gnu/packages/kodi.scm \ gnu/packages/language.scm \ gnu/packages/less.scm \ gnu/packages/lesstif.scm \ diff --git a/gnu/packages/kodi.scm b/gnu/packages/kodi.scm new file mode 100644 index 0000000000..f0c372bc29 --- /dev/null +++ b/gnu/packages/kodi.scm @@ -0,0 +1,223 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2015 David Thompson +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu packages kodi) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix utils) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module (gnu packages algebra) + #:use-module (gnu packages audio) + #:use-module (gnu packages autotools) + #:use-module (gnu packages avahi) + #:use-module (gnu packages base) + #:use-module (gnu packages boost) + #:use-module (gnu packages cdrom) + #:use-module (gnu packages cmake) + #:use-module (gnu packages compression) + #:use-module (gnu packages curl) + #:use-module (gnu packages databases) + #:use-module (gnu packages doxygen) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages fribidi) + #:use-module (gnu packages gettext) + #:use-module (gnu packages ghostscript) + #:use-module (gnu packages gawk) + #:use-module (gnu packages gl) + #:use-module (gnu packages glib) + #:use-module (gnu packages gperf) + #:use-module (gnu packages gnunet) + #:use-module (gnu packages gnupg) + #:use-module (gnu packages image) + #:use-module (gnu packages java) + #:use-module (gnu packages libusb) + #:use-module (gnu packages linux) + #:use-module (gnu packages mp3) + #:use-module (gnu packages pcre) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages pulseaudio) + #:use-module (gnu packages python) + #:use-module (gnu packages samba) + #:use-module (gnu packages sdl) + #:use-module (gnu packages ssh) + #:use-module (gnu packages swig) + #:use-module (gnu packages textutils) + #:use-module (gnu packages tls) + #:use-module (gnu packages video) + #:use-module (gnu packages web) + #:use-module (gnu packages xdisorg) + #:use-module (gnu packages xiph) + #:use-module (gnu packages xml) + #:use-module (gnu packages xorg) + #:use-module (gnu packages yasm) + #:use-module (gnu packages zip)) + +(define-public kodi + (package + (name "kodi") + (version "15.2") + (source (origin + (method url-fetch) + (uri (string-append "http://mirrors.kodi.tv/releases/source/" + version "-Isengard.tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "043i0f1crx9glwxil4xm45z5kxpkrx316gi4ir4d3rbd5safp2nx")) + (snippet + ;; Delete bundled ffmpeg. + ;; TODO: Delete every other bundled library. + '(begin + (use-modules (guix build utils)) + (delete-file-recursively "tools/depends/target/ffmpeg"))) + (modules '((guix build utils))))) + (build-system gnu-build-system) + (arguments + '(#:configure-flags '("--with-ffmpeg=shared") ; don't use bundled ffmpeg + #:phases + (modify-phases %standard-phases + ;; JsonSchemaBuilder is a small tool needed by the build system that + ;; comes bundled with the source. The build system tries to build it + ;; during the bootstrapping phase, which causes serious issues + ;; because there's no time for shebangs to be patched. So, we + ;; bootstrap it on our own instead. + (add-after 'unpack 'bootstrap-jsonschemabuilder + (lambda* (#:key inputs #:allow-other-keys) + (let ((dir "tools/depends/native/JsonSchemaBuilder/src")) + (with-directory-excursion dir + (zero? (system* "sh" "autogen.sh")))))) + ;; Now we can do the regular bootstrapping process, but only after + ;; the first round of shebang patching. We must repeat the patching + ;; after bootstrapping so that all of the files generated by the + ;; Autotools et al. are patched appropriately. + (add-after 'patch-source-shebangs 'bootstrap + (lambda* (#:key inputs #:allow-other-keys) + ;; We bootstrapped JsonSchemaBuilder in the previous phase, so we + ;; need to make sure it isn't done a second time. Otherwise, it + ;; would undo the shebang patching that we worked so hard for. + (substitute* '("tools/depends/native/JsonSchemaBuilder/Makefile") + (("\\./autogen\\.sh") "")) + ;; This essentially does what their 'bootstrap' script does, but + ;; additionally passes the correct CONFIG_SHELL. + (let ((bash (string-append (assoc-ref inputs "bash") "/bin/sh"))) + (define (run-make makefile) + (zero? (system* "make" "-f" makefile + "BOOTSTRAP_STANDALONE=1" + (string-append "CONFIG_SHELL=" bash)))) + (and (run-make "bootstrap.mk") + (run-make "codegenerator.mk"))))) + (add-after 'bootstrap 'patch-source-shebangs-again + (assoc-ref %standard-phases 'patch-source-shebangs)) + ;; 3 tests fail that appear harmless, so we disable them. + (add-before 'check 'disable-some-tests + (lambda _ + (substitute* '("xbmc/utils/test/TestSystemInfo.cpp") + (("TEST_F\\(TestSystemInfo, GetOsPrettyNameWithVersion\\)") + "TEST_F(TestSystemInfo, DISABLED_GetOsPrettyNameWithVersion)") + (("TEST_F\\(TestSystemInfo, GetOsName\\)") + "TEST_F(TestSystemInfo, DISABLED_GetOsName)") + (("TEST_F\\(TestSystemInfo, GetOsVersion\\)") + "TEST_F(TestSystemInfo, DISABLED_GetOsVersion)"))))))) + ;; TODO: Add dependencies for: + ;; - vdpau + ;; - nfs + ;; + ;; FIXME: libusb detection fails. + ;; + ;; FIXME: As you can see, we use a lot of external libraries, but it seems + ;; that a few bundled ones are still being used. + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("cmake" ,cmake) + ("doxygen" ,doxygen) + ("gawk" ,gawk) + ("gettext" ,gnu-gettext) + ("icedtea7" ,icedtea7) ; needed at build-time only, mandatory + ("libtool" ,libtool) + ("pkg-config" ,pkg-config) + ("swig" ,swig) + ("which" ,which) + ("yasm" ,yasm))) + (inputs + `(("alsa-lib" ,alsa-lib) + ("avahi" ,avahi) + ("bluez" ,bluez) + ("boost" ,boost) + ("bzip2" ,bzip2) + ("curl" ,curl) + ("dbus" ,dbus) + ("enca" ,enca) + ("eudev" ,eudev) + ("ffmpeg" ,ffmpeg) + ("flac" ,flac) + ("fontconfig" ,fontconfig) + ("freetype" ,freetype) + ("fribidi" ,fribidi) + ("glew" ,glew) + ("gnutls" ,gnutls) + ("gperf" ,gperf) + ("jasper" ,jasper) + ("lame" ,lame) + ("libass" ,libass) + ("libbluray" ,libbluray) + ("libcap" ,libcap) + ("libcdio" ,libcdio) + ("libgcrypt" ,libgcrypt) + ("libjpeg" ,libjpeg) + ("libltdl" ,libltdl) + ("libmad" ,libmad) + ("libmicrohttpd" ,libmicrohttpd) + ("libmodplug" ,libmodplug) + ("libmpeg2" ,libmpeg2) + ("libogg" ,libogg) + ("libpng" ,libpng) + ("libsamplerate" ,libsamplerate) + ("libssh" ,libssh) + ("libtiff" ,libtiff) + ("libva" ,libva) + ("libvorbis" ,libvorbis) + ("libxml2" ,libxml2) + ("libxmu" ,libxmu) + ("libxrandr" ,libxrandr) + ("libxrender" ,libxrender) + ("libxslt" ,libxslt) + ("libxt" ,libxt) + ("libyajl" ,libyajl) + ("lzo" ,lzo) + ("mesa-utils" ,mesa-utils) + ("mysql" ,mysql) + ("openssl" ,openssl) + ("pcre" ,pcre) + ("pulseaudio" ,pulseaudio) + ("python" ,python-2) + ("samba" ,samba) + ("sdl2" ,sdl2) + ("sqlite" ,sqlite) + ("taglib" ,taglib) + ("tinyxml" ,tinyxml) + ("unzip" ,unzip) + ("zip" ,zip) + ("zlib" ,zlib))) + (synopsis "Media center for home theater computers") + (description "Kodi is a media center application for playing videos, +music, games, etc. Kodi is highly customizable and features a theme and +plug-in system.") + (home-page "http://kodi.tv") + (license license:gpl2+)))