diff --git a/community/xbmc/0001-rtmp-check-m_rtmp-for-non-NULL-fixes-crashes-with-mi.patch b/community/xbmc/0001-rtmp-check-m_rtmp-for-non-NULL-fixes-crashes-with-mi.patch new file mode 100644 index 000000000..20d8e0250 --- /dev/null +++ b/community/xbmc/0001-rtmp-check-m_rtmp-for-non-NULL-fixes-crashes-with-mi.patch @@ -0,0 +1,75 @@ +From a58bcbb0a35ac8e26a880be477705d833330ecc5 Mon Sep 17 00:00:00 2001 +From: Jonathan Marshall +Date: Tue, 6 May 2014 19:40:17 +1200 +Subject: [PATCH 1/7] [rtmp] check m_rtmp for non-NULL - fixes crashes with + missing librtmp + +--- + .../dvdplayer/DVDInputStreams/DVDInputStreamRTMP.cpp | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamRTMP.cpp b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamRTMP.cpp +index b02792a..93fc6f0 100644 +--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamRTMP.cpp ++++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamRTMP.cpp +@@ -104,7 +104,8 @@ CDVDInputStreamRTMP::~CDVDInputStreamRTMP() + m_sStreamPlaying = NULL; + + Close(); +- m_libRTMP.Free(m_rtmp); ++ if (m_rtmp) ++ m_libRTMP.Free(m_rtmp); + m_rtmp = NULL; + m_bPaused = false; + } +@@ -139,7 +140,7 @@ bool CDVDInputStreamRTMP::Open(const char* strFile, const std::string& content) + m_sStreamPlaying = NULL; + } + +- if (!CDVDInputStream::Open(strFile, "video/x-flv")) ++ if (!m_rtmp || !CDVDInputStream::Open(strFile, "video/x-flv")) + return false; + + CSingleLock lock(m_RTMPSection); +@@ -181,7 +182,8 @@ void CDVDInputStreamRTMP::Close() + CSingleLock lock(m_RTMPSection); + CDVDInputStream::Close(); + +- m_libRTMP.Close(m_rtmp); ++ if (m_rtmp) ++ m_libRTMP.Close(m_rtmp); + + m_optionvalues.clear(); + m_eof = true; +@@ -190,6 +192,9 @@ void CDVDInputStreamRTMP::Close() + + int CDVDInputStreamRTMP::Read(uint8_t* buf, int buf_size) + { ++ if (!m_rtmp) ++ return -1; ++ + int i = m_libRTMP.Read(m_rtmp, (char *)buf, buf_size); + if (i < 0) + m_eof = true; +@@ -210,7 +215,7 @@ bool CDVDInputStreamRTMP::SeekTime(int iTimeInMsec) + CLog::Log(LOGNOTICE, "RTMP Seek to %i requested", iTimeInMsec); + CSingleLock lock(m_RTMPSection); + +- if (m_libRTMP.SendSeek(m_rtmp, iTimeInMsec)) ++ if (m_rtmp && m_libRTMP.SendSeek(m_rtmp, iTimeInMsec)) + return true; + + return false; +@@ -229,7 +234,8 @@ bool CDVDInputStreamRTMP::Pause(double dTime) + + CLog::Log(LOGNOTICE, "RTMP Pause %s requested", m_bPaused ? "TRUE" : "FALSE"); + +- m_libRTMP.Pause(m_rtmp, m_bPaused); ++ if (m_rtmp) ++ m_libRTMP.Pause(m_rtmp, m_bPaused); + + return true; + } +-- +1.9.1 + diff --git a/community/xbmc/PKGBUILD b/community/xbmc/PKGBUILD index 90ccc7823..645475331 100644 --- a/community/xbmc/PKGBUILD +++ b/community/xbmc/PKGBUILD @@ -17,46 +17,56 @@ _prefix=/usr pkgname=xbmc pkgver=13.0 -_codename=Gotham -pkgrel=2 +_codename=Gotham_r2 +pkgrel=3 pkgdesc="A software media player and entertainment hub for digital media" arch=('i686' 'x86_64') url="http://xbmc.org" license=('GPL' 'custom') -depends=('hicolor-icon-theme' 'fribidi' 'lzo2' 'smbclient' 'libtiff' 'libva' - 'libpng' 'libcdio' 'yajl' 'libmysqlclient' 'libjpeg-turbo' 'libsamplerate' - 'glew' 'libssh' 'libmicrohttpd' 'libxrandr' 'sdl_mixer' 'sdl_image' - 'python2' 'libass' 'libmpeg2' 'libmad' 'libmodplug' 'jasper' 'rtmpdump' - 'unzip' 'mesa-demos' 'xorg-xdpyinfo' 'libbluray' 'libnfs' 'afpfs-ng' - 'avahi' 'bluez-libs' 'tinyxml' 'libcap' 'swig' 'taglib' 'libpulse' - 'java-runtime-headless' 'glu' 'mesa' 'shairplay' 'libxslt' 'ffmpeg') -makedepends=('boost' 'cmake' 'gperf' 'nasm' 'libxinerama' 'zip' 'libcec' - 'udisks' 'upower' 'mesa' 'doxygen' 'swig' 'java-environment') -optdepends=('libcec: support for Pulse-Eight USB-CEC adapter' - 'lirc: remote controller support' - 'udisks: automount external drives' - 'upower: used to trigger power management functionality' - 'unrar: access compressed files without unpacking them' - 'xorg-xinit: autostart xbmc' - 'pulseaudio: for pulseaudio support') +depends=( +'avahi' 'ffmpeg' 'hicolor-icon-theme' 'libcdio' 'libmad' 'libmicrohttpd' +'libmpeg2' 'libmysqlclient' 'libsamplerate' 'libssh' 'libxrandr' 'libxslt' +'lzo2' 'mesa' 'mesa-demos' 'python2' 'sdl_image' 'sdl_mixer' 'smbclient' +'taglib' 'tinyxml' 'unzip' 'xorg-xdpyinfo' 'yajl' +) +makedepends=( +'afpfs-ng' 'libnfs' 'libplist' 'shairplay' 'libcec' 'boost' 'cmake' 'doxygen' +'gperf' 'jasper' 'java-runtime-headless' 'nasm' 'swig' 'taglib' 'udisks' +'upower' 'zip' +) +optdepends=( +'afpfs-ng: Apple File Protocol suport' +'libnfs: NFS Share support' +'libplist: AirPlay support' +'shairplay: AirPlay support' +'libcec: Pulse-Eight USB-CEC adapter support' +'pulseaudio: for pulseaudio support' +'lirc: remote controller support' +'unrar: access compressed files without unpacking them' +'xorg-xinit: autostart xbmc' +'udisks: automount external drives' +'upower: used to trigger power management functionality' +) install="${pkgname}.install" -source=("xbmc-$pkgver.tar.gz::https://github.com/xbmc/xbmc/archive/13.0-Gotham.tar.gz" - "xbmc.service" - "polkit.rules" - "enable-external-ffmpeg.patch") -md5sums=('54fafd985b5209859ba6faeb50b8f142' - 'de331663cc8adc94f2fe44a262cfff58' - '02f7951824ee13103344f36009c0ef2a' - '9f9b41cfc1e21b1e7d0bb10d6e85b3c6') +source=("xbmc-$pkgver.tar.gz::https://github.com/xbmc/xbmc/archive/$pkgver-$_codename.tar.gz" + 'xbmc.service' + 'polkit.rules' + 'enable-external-ffmpeg.patch' + '0001-rtmp-check-m_rtmp-for-non-NULL-fixes-crashes-with-mi.patch') +sha256sums=('663b99f3e196ead51d90f06ccfa864b4e5ade385dfc5972acb0f854d525f2903' + 'f83097388e6c9b301cac78de95cf1797d4aaa11e4021734c28d643320e76d919' + '4ea78374a08e13a64dcf6a424b111b8bfc11de03ed5829744fc6d9b5fc1ec96e' + '0239e33e87292c7340ed2092f2b5f1e82f5e283b1f763fb125b3aee78f50c355' + '4d643f1bc5a0f9a6bba36c8c2c2d220351acb58172c57d86417b67c02d39fa2b') prepare() { - cd "${srcdir}/xbmc-$pkgver-$_codename" - - patch -p1 -i ../enable-external-ffmpeg.patch + cd "$srcdir/xbmc-$pkgver-$_codename" + patch -p1 -i "$srcdir/enable-external-ffmpeg.patch" + patch -p1 -i "$srcdir/0001-rtmp-check-m_rtmp-for-non-NULL-fixes-crashes-with-mi.patch" } build() { - cd "${srcdir}/xbmc-$pkgver-$_codename" + cd "$srcdir/xbmc-$pkgver-$_codename" # Bootstrapping XBMC ./bootstrap @@ -100,12 +110,13 @@ build() { } package() { - cd "${srcdir}/xbmc-$pkgver-$_codename" + cd "$srcdir/xbmc-$pkgver-$_codename" # Running make install - make DESTDIR="${pkgdir}" install + make DESTDIR="$pkgdir" install - # run feh with python2 - sed -i -e 's/python/python2/g' ${pkgdir}${_prefix}/bin/xbmc + # Python2 + sed 's/python/python2/g' -i \ + "$pkgdir"/usr/{bin/xbmc,share/xbmc/addons/service.xbmc.versioncheck/service.py} # Tools #install -D -m 0755 "${srcdir}/xbmc-$pkgver-$_codename/xbmc-xrandr" "${pkgdir}${_prefix}/share/xbmc/xbmc-xrandr" @@ -113,11 +124,16 @@ package() { #install -D -m 0755 "${srcdir}/xbmc-$pkgver-$_codename/tools/TexturePacker/TexturePacker" "${pkgdir}${_prefix}/share/xbmc/" # Licenses - install -d -m 0755 "${pkgdir}${_prefix}/share/licenses/${pkgname}" + install -dm755 "${pkgdir}$_prefix/share/licenses/$pkgname" for licensef in LICENSE.GPL copying.txt; do - mv "${pkgdir}${_prefix}/share/doc/xbmc/${licensef}" "${pkgdir}${_prefix}/share/licenses/${pkgname}" + mv "${pkgdir}$_prefix/share/doc/xbmc/$licensef" \ + "${pkgdir}$_prefix/share/licenses/$pkgname" done - install -Dm0644 $srcdir/xbmc.service $pkgdir/usr/lib/systemd/system/xbmc.service - install -Dm0644 $srcdir/polkit.rules $pkgdir/etc/polkit-1/rules.d/10-xbmc.rules + # install systemd service + install -Dm0644 "$srcdir/xbmc.service" "$pkgdir/usr/lib/systemd/system/xbmc.service" + + # install polkit rules + install -dm700 "$pkgdir/user/share/polkit-1/rules.d" + install -Dm0644 "$srcdir/polkit.rules" "$pkgdir/user/share/polkit-1/rules.d/10-xbmc.rules" }