aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app-arch/hardlink/ChangeLog13
-rw-r--r--app-arch/hardlink/Manifest4
-rw-r--r--app-arch/hardlink/hardlink-0.1.2.ebuild17
-rw-r--r--app-arch/hardlink/metadata.xml7
-rw-r--r--app-arch/rarcrack/Manifest2
-rw-r--r--app-arch/rarcrack/rarcrack-0.2.ebuild25
-rw-r--r--app-editors/gedit-collaboration/Manifest1
-rw-r--r--app-editors/gedit-collaboration/gedit-collaboration-9999.ebuild35
-rw-r--r--mail-client/thunderbird/ChangeLog1785
-rw-r--r--mail-client/thunderbird/Manifest69
-rw-r--r--mail-client/thunderbird/files/1001-xulrunner_fix_jemalloc_vs_aslr.patch55
-rw-r--r--mail-client/thunderbird/files/1002_fix-system-hunspell-dict-detections.patch112
-rw-r--r--mail-client/thunderbird/files/2000-thunderbird_gentoo_install_dirs.patch22
-rw-r--r--mail-client/thunderbird/files/bug-606109.patch48
-rw-r--r--mail-client/thunderbird/files/cups-1.4.4-fixup.patch161
-rw-r--r--mail-client/thunderbird/files/enigmail-1.1.2-20110124-locale-fixup.diff8
-rw-r--r--mail-client/thunderbird/files/icon/thunderbird-icon-unbranded.pngbin0 -> 13280 bytes
-rw-r--r--mail-client/thunderbird/files/icon/thunderbird-icon.pngbin0 -> 6499 bytes
-rw-r--r--mail-client/thunderbird/files/icon/thunderbird-unbranded.desktop8
-rw-r--r--mail-client/thunderbird/files/icon/thunderbird.desktop8
-rw-r--r--mail-client/thunderbird/files/libnotify-0.7.patch56
-rw-r--r--mail-client/thunderbird/files/thunderbird-3.1-gcc45.patch37
-rw-r--r--mail-client/thunderbird/files/thunderbird-3.1-noalsa-fixup.patch26
-rw-r--r--mail-client/thunderbird/files/thunderbird-3.3-gconf-config-update.patch50
-rw-r--r--mail-client/thunderbird/files/thunderbird-gentoo-default-prefs-1.js9
-rw-r--r--mail-client/thunderbird/files/thunderbird-gentoo-default-prefs.js14
-rw-r--r--mail-client/thunderbird/files/thunderbird-respect-ldflags.patch28
-rw-r--r--mail-client/thunderbird/files/thunderbird-xul-1.9.2-arm-fixes.patch35
-rw-r--r--mail-client/thunderbird/files/xulrunner-1.9.2-gtk+-2.21.patch23
-rw-r--r--mail-client/thunderbird/metadata.xml16
-rw-r--r--mail-client/thunderbird/thunderbird-3.1.10-r1.ebuild266
-rw-r--r--media-libs/jackcpp/Manifest2
-rw-r--r--media-libs/jackcpp/files/destdir.patch22
-rw-r--r--media-libs/jackcpp/jackcpp-9999.ebuild26
-rw-r--r--media-libs/portmidi/Manifest4
-rw-r--r--media-libs/portmidi/files/portmidi-217-cmake-libdir-java-opts.patch212
-rw-r--r--media-libs/portmidi/files/portmidi-217-python-setup.py.patch13
-rw-r--r--media-libs/portmidi/portmidi-217.ebuild145
-rw-r--r--media-sound/amarok/ChangeLog2034
-rw-r--r--media-sound/amarok/Manifest11
-rw-r--r--media-sound/amarok/amarok-2.6.0-r1.ebuild124
-rw-r--r--media-sound/amarok/files/amarok-2.3.2-fix-qt-regression.patch83
-rw-r--r--media-sound/amarok/files/amarok-2.3.2-flac-fix.patch21
-rw-r--r--media-sound/amarok/files/amarok-2.4.0.90-fix-plugin-detection.patch19
-rw-r--r--media-sound/amarok/files/amarok-2.5.0-fix-context-view-on-startup.patch28
-rw-r--r--media-sound/amarok/files/amarok-2.5.0-kde48.patch62
-rw-r--r--media-sound/amarok/files/amarok-2.5.0-qtdebug.patch55
-rw-r--r--media-sound/amarok/files/amarok-fix-upnp-dep.patch37
-rw-r--r--media-sound/amarok/metadata.xml38
-rw-r--r--media-sound/mixxx/ChangeLog41
-rw-r--r--media-sound/mixxx/Manifest21
-rw-r--r--media-sound/mixxx/files/.svn/entries198
-rw-r--r--media-sound/mixxx/files/.svn/text-base/mixxx-1.6.0_beta4-debug.patch.svn-base10
-rw-r--r--media-sound/mixxx/files/.svn/text-base/mixxx-1.9.0-flags.patch.svn-base24
-rw-r--r--media-sound/mixxx/files/.svn/text-base/mixxx-1.9.0-libsoundtouch.patch.svn-base68
-rw-r--r--media-sound/mixxx/files/.svn/text-base/mixxx-1.9.0-linux3.patch.svn-base23
-rw-r--r--media-sound/mixxx/files/.svn/text-base/mixxx-9999-flags.patch.svn-base13
-rw-r--r--media-sound/mixxx/files/.svn/text-base/mixxx-9999-libsoundtouch.patch.svn-base68
-rw-r--r--media-sound/mixxx/files/.svn/text-base/mixxx-9999-qt4_paths.patch.svn-base22
-rw-r--r--media-sound/mixxx/files/mixxx-1.11.9999-cflags.patch13
-rw-r--r--media-sound/mixxx/files/mixxx-1.11.9999-docs.patch10
-rw-r--r--media-sound/mixxx/files/mixxx-1.11.9999-no-bzr.patch38
-rw-r--r--media-sound/mixxx/files/mixxx-1.11.9999-system-libs.patch150
-rw-r--r--media-sound/mixxx/files/mixxx-1.6.0_beta4-debug.patch10
-rw-r--r--media-sound/mixxx/files/mixxx-1.9.0-flags.patch24
-rw-r--r--media-sound/mixxx/files/mixxx-1.9.0-libsoundtouch.patch68
-rw-r--r--media-sound/mixxx/files/mixxx-1.9.0-linux3.patch23
-rw-r--r--media-sound/mixxx/files/mixxx-1.9.2-flags.patch13
-rw-r--r--media-sound/mixxx/files/mixxx-1.9.2-libsoundtouch.patch68
-rw-r--r--media-sound/mixxx/files/mixxx-9999-cflags.patch13
-rw-r--r--media-sound/mixxx/files/mixxx-9999-docs.patch10
-rw-r--r--media-sound/mixxx/files/mixxx-9999-flags.patch13
-rw-r--r--media-sound/mixxx/files/mixxx-9999-libsoundtouch.patch43
-rw-r--r--media-sound/mixxx/files/mixxx-9999-no-bzr.patch38
-rw-r--r--media-sound/mixxx/files/mixxx-9999-qt4_paths.patch22
-rw-r--r--media-sound/mixxx/files/mixxx-9999-system-libs.patch150
-rw-r--r--media-sound/mixxx/metadata.xml9
-rw-r--r--media-sound/mixxx/mixxx-9999-sunrise.ebuild.vorlage85
-rw-r--r--media-sound/mixxx/mixxx-9999.ebuild90
-rw-r--r--media-sound/mumble/Manifest6
-rw-r--r--media-sound/mumble/files/mumble-jack-support-r2.patch454
-rw-r--r--media-sound/mumble/files/mumble-jack-support.patch454
-rw-r--r--media-sound/mumble/mumble-1.2.2-r1.ebuild117
-rw-r--r--media-sound/mumble/mumble-1.2.3-r2.ebuild118
-rw-r--r--media-sound/pyjama/Manifest2
-rw-r--r--media-sound/pyjama/pyjama-0.3.0.1.ebuild53
-rw-r--r--media-tv/xbmc/ChangeLog426
-rw-r--r--media-tv/xbmc/Manifest14
-rw-r--r--media-tv/xbmc/files/xbmc-10.0-python-2.7.patch768
-rw-r--r--media-tv/xbmc/files/xbmc-10.1-gcc-4.6.patch100
-rw-r--r--media-tv/xbmc/files/xbmc-10.1-headers.patch10
-rw-r--r--media-tv/xbmc/files/xbmc-10.1-libpng-1.5.patch596
-rw-r--r--media-tv/xbmc/files/xbmc-10.1~beta1-jack.patch1715
-rw-r--r--media-tv/xbmc/files/xbmc-10.1~beta1-jack.patch.bkp1738
-rw-r--r--media-tv/xbmc/files/xbmc-9.11~beta1-jack.patch1738
-rw-r--r--media-tv/xbmc/files/xbmc-99999~beta1-jack.patch1739
-rw-r--r--media-tv/xbmc/metadata.xml18
-rw-r--r--media-tv/xbmc/xbmc-10.1-r1.ebuild206
-rw-r--r--media-tv/xbmc/xbmc-10.1.ebuild205
-rw-r--r--media-tv/xbmc/xbmc-99999.ebuild206
-rw-r--r--media-video/dvdstyler/ChangeLog276
-rw-r--r--media-video/dvdstyler/Manifest7
-rw-r--r--media-video/dvdstyler/dvdstyler-2.3.ebuild65
-rw-r--r--media-video/dvdstyler/files/dvdstyler-1.7.4-autoconf.patch77
-rw-r--r--media-video/dvdstyler/files/dvdstyler-1.8.1-cast.patch11
-rw-r--r--media-video/dvdstyler/files/dvdstyler-1.8.1-fix_enum_error.patch11
-rw-r--r--media-video/dvdstyler/metadata.xml5
-rw-r--r--media-video/makemkv/Manifest9
-rw-r--r--media-video/makemkv/makemkv-1.6.16.ebuild65
-rw-r--r--media-video/makemkv/makemkv-1.7.4.ebuild65
-rw-r--r--media-video/makemkv/makemkv-1.7.7.ebuild65
-rw-r--r--net-misc/yacy/Manifest4
-rwxr-xr-xnet-misc/yacy/files/yacy-1.04.confd18
-rwxr-xr-xnet-misc/yacy/files/yacy-1.04.rc74
-rwxr-xr-xnet-misc/yacy/yacy-1.04.20120709.9000.ebuild47
-rw-r--r--profiles/repo_name1
-rw-r--r--repositories.xml3
-rw-r--r--www-apps/mumble-django/mumble-django-2.4.ebuild134
118 files changed, 18874 insertions, 0 deletions
diff --git a/app-arch/hardlink/ChangeLog b/app-arch/hardlink/ChangeLog
new file mode 100644
index 0000000..7e6f7cb
--- /dev/null
+++ b/app-arch/hardlink/ChangeLog
@@ -0,0 +1,13 @@
+# ChangeLog for app-arch/hardlink
+# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/app-arch/hardlink/ChangeLog,v 1.2 2009/10/23 09:18:39 robbat2 Exp $
+
+ 23 Oct 2009; Robin H. Johnson <robbat2@gentoo.org> hardlink-0.1.1.ebuild:
+ Build fixup.
+
+*hardlink-0.1.1 (22 Oct 2009)
+
+ 22 Oct 2009; Robin H. Johnson <robbat2@gentoo.org> +hardlink-0.1.1.ebuild,
+ +metadata.xml:
+ Initial commit. Ebuild by Robin H. Johnson <robbat2@gentoo.org>.
+
diff --git a/app-arch/hardlink/Manifest b/app-arch/hardlink/Manifest
new file mode 100644
index 0000000..72c6d18
--- /dev/null
+++ b/app-arch/hardlink/Manifest
@@ -0,0 +1,4 @@
+DIST hardlink_0.1.2.tar.gz 6840 RMD160 c5d10211cdcff03617e50fadc49d6e5e91454f4c SHA1 55fa3d69d48c059315eaaf2df5621ecd1d0c1ac5 SHA256 76181794b41c4dbdb418a91d18c5d5e627df1ace7799e088685632e20fc60d1c
+EBUILD hardlink-0.1.2.ebuild 531 RMD160 b2475e6ce15a1d47674cf7bb8e576d00c09c0b30 SHA1 af12f406e3149f8144b20dcd7c839827d0a1dc6e SHA256 3e366009d4f58b9c605bf2c01dccbad85430cde785e0b3f31d061f2dc46cd6d9
+MISC ChangeLog 493 RMD160 93d6ffdf6c913cba97153d5bca2d2ede8959a315 SHA1 1193df31873234cb55e867e3e05b4f2441fb56b6 SHA256 22157bf388bcf39a290b01702f5f89501fdbe7a8d3d505c5dd06f5cb8efeb039
+MISC metadata.xml 202 RMD160 ca69c6e7044d6681415f1e86a1c084f890ff08ef SHA1 62ab18bf0e1da311494ca0912e5a79daeceb46ad SHA256 76dbb4a720140d78f0ddfb2b2782c03852169c201c1f507eb17ef4d2a82f212a
diff --git a/app-arch/hardlink/hardlink-0.1.2.ebuild b/app-arch/hardlink/hardlink-0.1.2.ebuild
new file mode 100644
index 0000000..541b7a2
--- /dev/null
+++ b/app-arch/hardlink/hardlink-0.1.2.ebuild
@@ -0,0 +1,17 @@
+# Copyright 1999-2009 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/app-arch/hardlink/hardlink-0.1.1.ebuild,v 1.2 2009/10/23 09:18:39 robbat2 Exp $
+
+DESCRIPTION="replace file copies using hardlinks"
+HOMEPAGE="http://jak-linux.org/projects/hardlink/"
+SRC_URI="${HOMEPAGE}/${P/-/_}.tar.gz"
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~x86 ~amd64"
+IUSE=""
+DEPEND=""
+RDEPEND="dev-lang/python"
+
+src_install() {
+ emake DESTDIR="${D}" install || die "Failed emake install"
+}
diff --git a/app-arch/hardlink/metadata.xml b/app-arch/hardlink/metadata.xml
new file mode 100644
index 0000000..c6d8628
--- /dev/null
+++ b/app-arch/hardlink/metadata.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<maintainer>
+ <email>robbat2@gentoo.org</email>
+</maintainer>
+</pkgmetadata>
diff --git a/app-arch/rarcrack/Manifest b/app-arch/rarcrack/Manifest
new file mode 100644
index 0000000..0acd9e7
--- /dev/null
+++ b/app-arch/rarcrack/Manifest
@@ -0,0 +1,2 @@
+DIST rarcrack-0.2.tar.bz2 34964 RMD160 7e147604a701c9a6abf55d565c17ff51a4d26394 SHA1 413c70dc3ed57dfbdd7d618aa81f0ab925334b02 SHA256 34c85cb7b94733544320605386a3632e8e3c59c905a2f4bedba926fee2f5cbbf
+EBUILD rarcrack-0.2.ebuild 489 RMD160 9ca208a415331ed44489c4de2767d053b23e2f36 SHA1 dec40f18e9f227565b053ec38225fe0536f7ade2 SHA256 a30fea11fc391346f6a9b4ba2431c675f9eccc154d1fec05934726c2f2f09364
diff --git a/app-arch/rarcrack/rarcrack-0.2.ebuild b/app-arch/rarcrack/rarcrack-0.2.ebuild
new file mode 100644
index 0000000..7fb10e3
--- /dev/null
+++ b/app-arch/rarcrack/rarcrack-0.2.ebuild
@@ -0,0 +1,25 @@
+# Copyright 1999-2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=3
+
+DESCRIPTION="Password recovery for 7zip, rar and zip archives"
+HOMEPAGE="http://rarcrack.sourceforge.net"
+SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="7zip rar zip"
+
+DEPEND=""
+RDEPEND="${DEPEND}
+ rar? ( app-arch/unrar )
+ zip? ( app-arch/unzip )
+ 7zip? ( app-arch/p7zip )
+"
+
+src_install() {
+ dobin ${PN}
+}
diff --git a/app-editors/gedit-collaboration/Manifest b/app-editors/gedit-collaboration/Manifest
new file mode 100644
index 0000000..b9f12d8
--- /dev/null
+++ b/app-editors/gedit-collaboration/Manifest
@@ -0,0 +1 @@
+EBUILD gedit-collaboration-9999.ebuild 778 SHA256 eee0b354387b66fd492d5f2b51f1a33e766230148defc98fcd5838f075a5b7f1 SHA512 99fcc99256742c7394298219df6295ccc0349b05382bfa97918426841ef74cee144b8560c15b673ccb771178008b8e11ab71ec1cf1545111cd8d979fcec7a873 WHIRLPOOL 97fe23b7222e1e0a58503f0b6ba2909d13736fa5a6c76270b825ae5ddb3993a9dd7586f8b2050e200c8b119fe46a8a6ecd3ec33af812b6afbd41e233af800b9c
diff --git a/app-editors/gedit-collaboration/gedit-collaboration-9999.ebuild b/app-editors/gedit-collaboration/gedit-collaboration-9999.ebuild
new file mode 100644
index 0000000..7b57eb2
--- /dev/null
+++ b/app-editors/gedit-collaboration/gedit-collaboration-9999.ebuild
@@ -0,0 +1,35 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=4
+
+EGIT_REPO_URI="git://git.gnome.org/gedit-collaboration"
+
+inherit eutils git-2
+
+DESCRIPTION="GNOME Text Editor Collaboration Plugin"
+HOMEPAGE="http://git.gnome.org/browse/gedit-collaboration"
+SRC_URI=""
+
+LICENSE="GPLv3"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE=""
+
+DEPEND=">=net-libs/libinfinity-0.5[gtk]
+ >=app-editors/gedit-3.0
+ >=x11-libs/gtk+-3.3.15
+ dev-libs/libxml2"
+RDEPEND="${DEPEND}"
+
+src_prepare() {
+ # Run autotools
+ einfo "Regenerating autotools files..."
+ NOCONFIGURE=yes ./autogen.sh || die "autogen,sh failed"
+}
+
+src_install() {
+ emake DESTDIR="${D}" install || die "Install failed"
+ dodoc README ChangeLog AUTHORS NEWS ABOUT-NLS || die
+}
diff --git a/mail-client/thunderbird/ChangeLog b/mail-client/thunderbird/ChangeLog
new file mode 100644
index 0000000..b1c5acd
--- /dev/null
+++ b/mail-client/thunderbird/ChangeLog
@@ -0,0 +1,1785 @@
+# ChangeLog for mail-client/thunderbird
+# Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/mail-client/thunderbird/ChangeLog,v 1.71 2011/04/04 02:33:57 anarchy Exp $
+
+*thunderbird-3.3_alpha3-r1 (04 Apr 2011)
+
+ 04 Apr 2011; Jory A. Pratt <anarchy@gentoo.org>
+ +files/1001-xulrunner_fix_jemalloc_vs_aslr.patch,
+ +files/enigmail-1.1.2-20110124-locale-fixup.diff,
+ +thunderbird-3.3_alpha3-r1.ebuild,
+ +files/thunderbird-3.3-gconf-config-update.patch,
+ +files/2000-thunderbird_gentoo_install_dirs.patch:
+ Add tb-3.3a3 to tree for testing/porting
+
+ 18 Mar 2011; Raúl Porcel <armin76@gentoo.org> thunderbird-3.1.9.ebuild:
+ alpha/ia64/sparc stable wrt #357057
+
+ 14 Mar 2011; Jory A. Pratt <anarchy@gentoo.org> thunderbird-3.1.9.ebuild:
+ pax mark -m for hardened users
+
+ 14 Mar 2011; Nirbheek Chauhan <nirbheek@gentoo.org>
+ -thunderbird-3.1.3.ebuild, -thunderbird-3.1.5.ebuild,
+ -thunderbird-3.1.6.ebuild, thunderbird-3.1.7.ebuild,
+ -thunderbird-3.1.7-r2.ebuild, thunderbird-3.1.9.ebuild:
+ Remove old ebuilds and duplicate gnome-use-flag related stuff to allow
+ eclass changes from overlay to be merged into tree
+
+ 08 Mar 2011; Thomas Kahle <tomka@gentoo.org> thunderbird-3.1.9.ebuild:
+ x86 stable per bug 357057
+
+ 08 Mar 2011; Kacper Kowalik <xarthisius@gentoo.org> thunderbird-3.1.9.ebuild:
+ ppc/ppc64 stable wrt #357057
+
+ 06 Mar 2011; Markos Chandras <hwoarang@gentoo.org> thunderbird-3.1.9.ebuild:
+ Stable on amd64 wrt bug #357057
+
+ 06 Mar 2011; Jory A. Pratt <anarchy@gentoo.org> thunderbird-3.1.9.ebuild:
+ ensure ldap respects ldflags
+
+*thunderbird-3.1.9 (06 Mar 2011)
+
+ 06 Mar 2011; Jory A. Pratt <anarchy@gentoo.org> +files/libnotify-0.7.patch,
+ +thunderbird-3.1.9.ebuild:
+ Security bump, bug #357057
+
+ 05 Mar 2011; Arfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>
+ thunderbird-3.1.7.ebuild:
+ Call python_set_active_version() in pkg_setup() (bug #357525).
+
+ 04 Mar 2011; Lars Wendler <polynomial-c@gentoo.org> thunderbird-3.1.3.ebuild,
+ thunderbird-3.1.5.ebuild, thunderbird-3.1.6.ebuild, thunderbird-3.1.7.ebuild,
+ thunderbird-3.1.7-r2.ebuild:
+ Forced usage of python-2 for building (bug #355585 by Adrian Bassett).
+
+*thunderbird-3.1.7-r2 (02 Jan 2011)
+
+ 02 Jan 2011; Jory A. Pratt <anarchy@gentoo.org>
+ +files/cups-1.4.4-fixup.patch, -thunderbird-3.1.7-r1.ebuild,
+ +thunderbird-3.1.7-r2.ebuild:
+ Fix segfault when attempting to dlclose cups, bug 325469
+
+ 01 Jan 2011; Raúl Porcel <armin76@gentoo.org> thunderbird-3.1.7.ebuild:
+ alpha/ia64/sparc stable wrt #348316
+
+ 29 Dec 2010; Jory A. Pratt <anarchy@gentoo.org> thunderbird-3.1.7-r1.ebuild:
+ Ensure sqlite[threadsafe] to prevent failure in configure, bug #341663
+
+*thunderbird-3.1.7-r1 (25 Dec 2010)
+
+ 25 Dec 2010; Jory A. Pratt <anarchy@gentoo.org> +thunderbird-3.1.7-r1.ebuild,
+ +files/thunderbird-respect-ldflags.patch:
+ Respect users ldflags when building ldap support, bug #348405
+
+ 11 Dec 2010; Brent Baude <ranger@gentoo.org> thunderbird-3.1.7.ebuild:
+ Marking thunderbird-3.1.7 ppc64 for bug 348316
+
+ 11 Dec 2010; Markus Meier <maekke@gentoo.org> thunderbird-3.1.7.ebuild:
+ x86 stable, bug #348316
+
+ 10 Dec 2010; Markos Chandras <hwoarang@gentoo.org> thunderbird-3.1.7.ebuild:
+ Stable on amd64 wrt bug #348316
+
+ 10 Dec 2010; Jeroen Roovers <jer@gentoo.org> thunderbird-3.1.7.ebuild:
+ Stable for PPC (bug #348316).
+
+*thunderbird-3.1.7 (09 Dec 2010)
+
+ 09 Dec 2010; Jory A. Pratt <anarchy@gentoo.org> +thunderbird-3.1.7.ebuild:
+ Version bump
+
+ 14 Nov 2010; Raúl Porcel <armin76@gentoo.org> thunderbird-3.1.6.ebuild:
+ alpha/ia64/sparc stable wrt #342847
+
+ 30 Oct 2010; Markus Meier <maekke@gentoo.org> thunderbird-3.1.6.ebuild:
+ x86 stable, bug #342847
+
+ 30 Oct 2010; Mark Loeser <halcy0n@gentoo.org> thunderbird-3.1.6.ebuild:
+ Stable for ppc64; bug #342847
+
+ 29 Oct 2010; Markos Chandras <hwoarang@gentoo.org>
+ thunderbird-3.1.6.ebuild:
+ Stable on amd64 wrt bug #342847
+
+ 29 Oct 2010; Jeroen Roovers <jer@gentoo.org> thunderbird-3.1.6.ebuild:
+ Stable for PPC (bug #342847).
+
+*thunderbird-3.1.6 (28 Oct 2010)
+
+ 28 Oct 2010; Lars Wendler <polynomial-c@gentoo.org>
+ +files/xulrunner-1.9.2-gtk+-2.21.patch, -thunderbird-3.1.4.ebuild,
+ +thunderbird-3.1.6.ebuild:
+ Security bump (bug #342847).
+
+ 25 Oct 2010; Christian Faulhammer <fauli@gentoo.org>
+ thunderbird-3.1.5.ebuild:
+ x86 stable, security bug 341821
+
+ 23 Oct 2010; Markos Chandras <hwoarang@gentoo.org>
+ thunderbird-3.1.5.ebuild:
+ Stable on amd64 wrt bug #341821
+
+ 22 Oct 2010; Jory A. Pratt <anarchy@gentoo.org> thunderbird-3.1.5.ebuild:
+ Update nss dep
+
+ 21 Oct 2010; Jory A. Pratt <anarchy@gentoo.org> thunderbird-3.1.5.ebuild,
+ +files/bug-606109.patch:
+ Address build failure with -alsa
+
+ 21 Oct 2010; Lars Wendler <polynomial-c@gentoo.org>
+ thunderbird-3.1.5.ebuild:
+ Fixed sqlite dependency (reported by Jaak Ristioja in bug #341821).
+
+*thunderbird-3.1.5 (20 Oct 2010)
+
+ 20 Oct 2010; Jory A. Pratt <anarchy@gentoo.org> +thunderbird-3.1.5.ebuild:
+ Security bump
+
+ 14 Oct 2010; Jory A. Pratt <anarchy@gentoo.org> thunderbird-3.1.4.ebuild:
+ drop cups useflag/dep making printing always enabled
+
+*thunderbird-3.1.4 (26 Sep 2010)
+
+ 26 Sep 2010; Jory A. Pratt <anarchy@gentoo.org> -thunderbird-3.0.5.ebuild,
+ -thunderbird-3.1.1.ebuild, -thunderbird-3.1.1-r2.ebuild,
+ -thunderbird-3.1.2-r1.ebuild, +thunderbird-3.1.4.ebuild:
+ Update for misc fixes, remove stale ebuilds
+
+ 14 Sep 2010; Raúl Porcel <armin76@gentoo.org> thunderbird-3.1.3.ebuild:
+ alpha/ia64/sparc stable wrt #336396
+
+ 12 Sep 2010; Joseph Jezak <josejx@gentoo.org> thunderbird-3.1.3.ebuild:
+ Marked ppc ppc64 for bug #336396.
+
+ 11 Sep 2010; Markos Chandras <hwoarang@gentoo.org>
+ thunderbird-3.1.3.ebuild:
+ Stable on amd64 wrt bug #336396
+
+ 09 Sep 2010; Christian Faulhammer <fauli@gentoo.org>
+ thunderbird-3.1.3.ebuild:
+ stable x86, security bug 336396
+
+ 08 Sep 2010; Jory A. Pratt <anarchy@gentoo.org> thunderbird-3.1.3.ebuild:
+ bump dep for dev-libs/{nss,nspr}
+
+*thunderbird-3.1.3 (08 Sep 2010)
+
+ 08 Sep 2010; Jory A. Pratt <anarchy@gentoo.org> +thunderbird-3.1.3.ebuild:
+ Fix bug 335477, security bump bug 336396
+
+ 05 Sep 2010; Jory A. Pratt <anarchy@gentoo.org>
+ thunderbird-3.1.2-r1.ebuild:
+ Update hunspell double buffer patch
+
+*thunderbird-3.1.2-r1 (29 Aug 2010)
+
+ 29 Aug 2010; Jory A. Pratt <anarchy@gentoo.org> -thunderbird-3.1.2.ebuild,
+ +thunderbird-3.1.2-r1.ebuild:
+ Fix the use of system hunspell dicts.
+
+ 22 Aug 2010; Jory A. Pratt <anarchy@gentoo.org> thunderbird-3.1.2.ebuild:
+ enable epatch_user to ensure user does not have to modify ebuild
+
+ 10 Aug 2010; Brent Baude <ranger@gentoo.org> thunderbird-3.1.1.ebuild:
+ Marking thunderbird-3.1.1 ppc64 for bug 329279
+
+*thunderbird-3.1.2 (06 Aug 2010)
+
+ 06 Aug 2010; Jory A. Pratt <anarchy@gentoo.org> +thunderbird-3.1.2.ebuild:
+ version bump for minor issues with sound, indexing, and possible plugin
+ crashes
+
+ 03 Aug 2010; Jory A. Pratt <anarchy@gentoo.org>
+ -files/comm-1.9.2-disable-printing.patch, thunderbird-3.1.1-r2.ebuild:
+ updated patchset to keep patches in sync for next release thursday
+
+ 03 Aug 2010; Jory A. Pratt <anarchy@gentoo.org>
+ +files/comm-1.9.2-disable-printing.patch, thunderbird-3.1.1-r2.ebuild:
+ Fix bug #330791, use -cups
+
+ 02 Aug 2010; Jory A. Pratt <anarchy@gentoo.org>
+ thunderbird-3.1.1-r2.ebuild:
+ Fix patchset to apply double buffer patch
+
+ 01 Aug 2010; Raúl Porcel <armin76@gentoo.org>
+ thunderbird-3.1.1-r2.ebuild:
+ alpha/ia64/sparc stable wrt #329279
+
+*thunderbird-3.1.1-r2 (01 Aug 2010)
+
+ 01 Aug 2010; Jory A. Pratt <anarchy@gentoo.org>
+ -thunderbird-3.1.1-r1.ebuild, +thunderbird-3.1.1-r2.ebuild:
+ Fix bug #325469, new useflag to control printing support
+
+*thunderbird-3.1.1-r1 (31 Jul 2010)
+
+ 31 Jul 2010; Jory A. Pratt <anarchy@gentoo.org>
+ -thunderbird-3.0.4-r1.ebuild, -thunderbird-3.1.ebuild,
+ +thunderbird-3.1.1-r1.ebuild:
+ Fix build for sparc, update patchset, install to /usr/$(get_libdir)/${PN}
+
+ 26 Jul 2010; Markus Meier <maekke@gentoo.org> thunderbird-3.1.1.ebuild:
+ amd64 stable, bug #329279
+
+ 23 Jul 2010; Jeroen Roovers <jer@gentoo.org> thunderbird-3.1.1.ebuild:
+ Stable for PPC (bug #329279).
+
+ 23 Jul 2010; Christian Faulhammer <fauli@gentoo.org>
+ thunderbird-3.1.1.ebuild:
+ stable x86, security bug 329279
+
+*thunderbird-3.1.1 (22 Jul 2010)
+
+ 22 Jul 2010; Jory A. Pratt <anarchy@gentoo.org> +thunderbird-3.1.1.ebuild:
+ Security bump (bug #329279)
+
+
+ 18 Jul 2010; Jory A. Pratt <anarchy@gentoo.org> thunderbird-3.0.5.ebuild,
+ thunderbird-3.1.ebuild:
+ remove lcms dep as it should not be there
+
+ 17 Jul 2010; Raúl Porcel <armin76@gentoo.org> thunderbird-3.1.ebuild:
+ Add ~arm
+
+ 11 Jul 2010; Nirbheek Chauhan <nirbheek@gentoo.org>
+ +files/thunderbird-xul-1.9.2-arm-fixes.patch, thunderbird-3.1.ebuild:
+ Add patch for ARM OS detection, bug 327783
+
+ 08 Jul 2010; Brent Baude <ranger@gentoo.org> thunderbird-3.0.5.ebuild:
+ Marking thunderbird-3.0.5 ppc64 and ppc for bug 324735
+
+ 26 Jun 2010; <anarchy@gentoo.org> thunderbird-3.0.5.ebuild,
+ thunderbird-3.1.ebuild:
+ Fix langs variable in 3.1/3.0.5 bug #325769
+
+ 26 Jun 2010; Samuli Suominen <ssuominen@gentoo.org>
+ thunderbird-3.1.ebuild, +files/thunderbird-3.1-gcc45.patch:
+ Fix buffer overflow with GCC 4.5 and _U_FORTIFY_SOURCE=2 wrt #324863 by
+ Harald van Dijk.
+
+*thunderbird-3.1 (26 Jun 2010)
+
+ 26 Jun 2010; Nirbheek Chauhan <nirbheek@gentoo.org>
+ -thunderbird-3.1_rc2-r1.ebuild, +thunderbird-3.1.ebuild:
+ Bump 3.1rc2 -> 3.1, no source code changes
+
+ 25 Jun 2010; Raúl Porcel <armin76@gentoo.org> thunderbird-3.0.5.ebuild:
+ alpha/ia64/sparc stable wrt #324735
+
+ 24 Jun 2010; Christoph Mende <angelos@gentoo.org>
+ thunderbird-3.0.5.ebuild:
+ Stable on amd64 wrt bug #324735
+
+ 23 Jun 2010; Christian Faulhammer <fauli@gentoo.org>
+ thunderbird-3.0.5.ebuild:
+ stable x86, bug 324735
+
+ 21 Jun 2010; Samuli Suominen <ssuominen@gentoo.org>
+ thunderbird-3.0.5.ebuild, thunderbird-3.1_rc2-r1.ebuild:
+ Restrict media-libs/lcms depend to old version.
+
+*thunderbird-3.1_rc2-r1 (18 Jun 2010)
+
+ 18 Jun 2010; <anarchy@gentoo.org>
+ +files/thunderbird-gentoo-default-prefs-1.js,
+ +thunderbird-3.1_rc2-r1.ebuild, +files/thunderbird-3.1-noalsa-fixup.patch:
+ prepare for 3.1 final release next week, work out all bugs in ~testing,
+ changed a few defaults to make easier on users.
+
+*thunderbird-3.0.5 (18 Jun 2010)
+
+ 18 Jun 2010; Nirbheek Chauhan <nirbheek@gentoo.org>
+ +thunderbird-3.0.5.ebuild:
+ Bump to 3.0.5; security fixes, bugfixes, performance improvements
+
+ 18 Jun 2010; Nirbheek Chauhan <nirbheek@gentoo.org>
+ thunderbird-3.0.4-r1.ebuild:
+ Add EPREFIX to MOZILLA_FIVE_HOME while passing to configure
+
+ 13 Jun 2010; Jeremy Olexa <darkside@gentoo.org>
+ thunderbird-3.0.4-r1.ebuild:
+ Import changes from Gentoo Prefix overlay. Migrate to EAPI3, add keywords.
+ Approved by mozilla team
+
+*thunderbird-3.0.4-r1 (13 Jun 2010)
+
+ 13 Jun 2010; Nirbheek Chauhan <nirbheek@gentoo.org>
+ +files/1002_fix-system-hunspell-dict-detections.patch,
+ +thunderbird-3.0.4-r1.ebuild, +files/icon/thunderbird.desktop,
+ +files/icon/thunderbird-icon.png,
+ +files/icon/thunderbird-icon-unbranded.png,
+ +files/icon/thunderbird-unbranded.desktop,
+ +files/thunderbird-gentoo-default-prefs.js, +metadata.xml:
+ Add mail-client/thunderbird as part of pkgmove from
+ mail-client/mozilla-thunderbird
+
+ 16 May 2010; <anarchy@gentoo.org> -files/1000_fix-menus-gentoo.patch,
+ -mozilla-thunderbird-2.0.0.23.ebuild, -mozilla-thunderbird-3.0.3.ebuild:
+ prepare for pkg-move
+
+ 23 Apr 2010; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-3.0.4-r1.ebuild:
+ alpha/ia64/sparc stable wrt #313003
+
+ 18 Apr 2010; Markus Meier <maekke@gentoo.org>
+ mozilla-thunderbird-3.0.4-r1.ebuild:
+ amd64 stable, bug #313003
+
+ 14 Apr 2010; Christian Faulhammer <fauli@gentoo.org>
+ mozilla-thunderbird-3.0.4-r1.ebuild:
+ stable x86, security bug 313003
+
+ 12 Apr 2010; Brent Baude <ranger@gentoo.org>
+ mozilla-thunderbird-3.0.4-r1.ebuild:
+ Marking mozilla-thunderbird-3.0.4-r1 ppc for bug 313003
+
+ 12 Apr 2010; Brent Baude <ranger@gentoo.org>
+ mozilla-thunderbird-3.0.4-r1.ebuild:
+ Marking mozilla-thunderbird-3.0.4-r1 ppc64 for bug 313003
+
+ 10 Apr 2010; <anarchy@gentoo.org> -mozilla-thunderbird-3.0.3-r2.ebuild,
+ -mozilla-thunderbird-3.0.4.ebuild:
+ cleanup unneeded builds
+
+*mozilla-thunderbird-3.0.4-r1 (10 Apr 2010)
+
+ 10 Apr 2010; <anarchy@gentoo.org> +mozilla-thunderbird-3.0.4-r1.ebuild:
+ actually enable system hunspell support
+
+*mozilla-thunderbird-3.0.4 (08 Apr 2010)
+
+ 08 Apr 2010; <anarchy@gentoo.org>
+ +files/1002_fix-system-hunspell-dict-detections.patch,
+ +mozilla-thunderbird-3.0.4.ebuild:
+ Security bump, include hunspell fixup for dictionaries.
+
+*mozilla-thunderbird-3.0.3-r2 (21 Mar 2010)
+
+ 21 Mar 2010; <anarchy@gentoo.org> -mozilla-thunderbird-3.0.3-r1.ebuild,
+ +mozilla-thunderbird-3.0.3-r2.ebuild:
+ remove magic dep for alsa-libs being installed bug #308363
+
+ 14 Mar 2010; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-3.0.3.ebuild:
+ alpha/ia64/sparc stable wrt #307045
+
+ 09 Mar 2010; Joseph Jezak <josejx@gentoo.org>
+ mozilla-thunderbird-3.0.3.ebuild:
+ Marked ppc stable for bug #307045.
+
+ 08 Mar 2010; Brent Baude <ranger@gentoo.org>
+ mozilla-thunderbird-3.0.3.ebuild:
+ Marking mozilla-thunderbird-3.0.3 ppc64 for bug 307045
+
+*mozilla-thunderbird-3.0.3-r1 (07 Mar 2010)
+
+ 07 Mar 2010; <anarchy@gentoo.org> +mozilla-thunderbird-3.0.3-r1.ebuild:
+ re-added a few of the missing locales
+
+ 07 Mar 2010; Markus Meier <maekke@gentoo.org>
+ mozilla-thunderbird-3.0.3.ebuild:
+ amd64 stable, bug #307045
+
+ 05 Mar 2010; Christian Faulhammer <fauli@gentoo.org>
+ mozilla-thunderbird-3.0.3.ebuild:
+ stable x86, security bug 307045
+
+*mozilla-thunderbird-3.0.3 (04 Mar 2010)
+
+ 04 Mar 2010; <anarchy@gentoo.org> -mozilla-thunderbird-3.0.1.ebuild,
+ -mozilla-thunderbird-3.0.1-r1.ebuild, +mozilla-thunderbird-3.0.3.ebuild,
+ metadata.xml:
+ Security Bump
+
+*mozilla-thunderbird-3.0.1-r1 (05 Feb 2010)
+
+ 05 Feb 2010; <anarchy@gentoo.org> +mozilla-thunderbird-3.0.1-r1.ebuild:
+ Ensure we end up building against system sqlite.
+
+ 31 Jan 2010; <anarchy@gentoo.org> -mozilla-thunderbird-3.0-r1.ebuild,
+ mozilla-thunderbird-3.0.1.ebuild:
+ add turkish support
+
+*mozilla-thunderbird-3.0.1 (22 Jan 2010)
+
+ 22 Jan 2010; <anarchy@gentoo.org> +mozilla-thunderbird-3.0.1.ebuild:
+ version bump
+
+ 29 Dec 2009; Jory A. Pratt <anarchy@gentoo.org>
+ files/thunderbird-gentoo-default-prefs.js:
+ refix bug #298044 to set false instead of true
+
+*mozilla-thunderbird-3.0-r1 (29 Dec 2009)
+
+ 29 Dec 2009; Jory A. Pratt <anarchy@gentoo.org>
+ +mozilla-thunderbird-3.0-r1.ebuild,
+ files/thunderbird-gentoo-default-prefs.js:
+ Update prefs to fix imap issues marking mail, bug #298044
+
+ 20 Dec 2009; Jory A. Pratt <anarchy@gentoo.org>
+ mozilla-thunderbird-3.0.ebuild:
+ cleanup locale support
+
+ 20 Dec 2009; Jory A. Pratt <anarchy@gentoo.org>
+ -mozilla-thunderbird-2.0.0.22.ebuild:
+ remove security infected builds.
+
+ 19 Dec 2009; Jory A. Pratt <anarchy@gentoo.org>
+ mozilla-thunderbird-3.0.ebuild:
+ Add en-GB linguas support back
+
+ 15 Dec 2009; Jory A. Pratt <anarchy@gentoo.org>
+ mozilla-thunderbird-3.0.ebuild:
+ update patchset for sparc users, bug #296883
+
+*mozilla-thunderbird-3.0 (08 Dec 2009)
+
+ 08 Dec 2009; Jory A. Pratt <anarchy@gentoo.org>
+ +files/1000_fix-menus-gentoo.patch, +mozilla-thunderbird-3.0.ebuild,
+ +files/thunderbird-gentoo-default-prefs.js, metadata.xml:
+ version bump
+
+ 14 Nov 2009; Tomáš Chvátal <scarabeus@gentoo.org>
+ -mozilla-thunderbird-1.5.0.14.ebuild:
+ QA: since mips was unable to keyword never versions for 2 years. Drop
+ their latest availible.
+
+ 20 Sep 2009; Mounir Lamouri <volkmar@gentoo.org>
+ mozilla-thunderbird-2.0.0.23.ebuild:
+ Stable on ppc. Bug 282549
+
+ 12 Sep 2009; Brent Baude <ranger@gentoo.org>
+ mozilla-thunderbird-2.0.0.23.ebuild:
+ Marking mozilla-thunderbird-2.0.0.23 ppc64 for bug 282549
+
+ 11 Sep 2009; Markus Meier <maekke@gentoo.org>
+ mozilla-thunderbird-2.0.0.23.ebuild:
+ amd64 stable, bug #282549
+
+ 11 Sep 2009; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.23.ebuild:
+ alpha/ia64/sparc stable wrt #282549
+
+ 11 Sep 2009; Christian Faulhammer <fauli@gentoo.org>
+ mozilla-thunderbird-2.0.0.23.ebuild:
+ stable x86, security bug 282549
+
+*mozilla-thunderbird-2.0.0.23 (26 Aug 2009)
+
+ 26 Aug 2009; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-2.0.0.23.ebuild:
+ Version bump
+
+ 29 Jun 2009; Raúl Porcel <armin76@gentoo.org>
+ -mozilla-thunderbird-2.0.0.21.ebuild, mozilla-thunderbird-2.0.0.22.ebuild:
+ alpha/ia64/sparc stable wrt #273918
+
+ 27 Jun 2009; Richard Freeman <rich0@gentoo.org>
+ mozilla-thunderbird-2.0.0.22.ebuild:
+ amd64 stable - 273918
+
+ 27 Jun 2009; Brent Baude <ranger@gentoo.org>
+ mozilla-thunderbird-2.0.0.22.ebuild:
+ Marking mozilla-thunderbird-2.0.0.22 ppc for bug 273918
+
+ 27 Jun 2009; Brent Baude <ranger@gentoo.org>
+ mozilla-thunderbird-2.0.0.22.ebuild:
+ Marking mozilla-thunderbird-2.0.0.22 ppc64 for bug 273918
+
+ 25 Jun 2009; Christian Faulhammer <fauli@gentoo.org>
+ mozilla-thunderbird-2.0.0.22.ebuild:
+ stable x86, security bug 273918
+
+ 25 Jun 2009; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.22.ebuild:
+ Fix patchset
+
+*mozilla-thunderbird-2.0.0.22 (24 Jun 2009)
+
+ 24 Jun 2009; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-2.0.0.22.ebuild:
+ Version bump
+
+ 01 May 2009; Nirbheek Chauhan <nirbheek@gentoo.org>
+ mozilla-thunderbird-2.0.0.21:
+ Keeping the pkg_preinst is causing more problems than removing it, such as
+ bug 268060
+
+ 22 Mar 2009; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.21.ebuild:
+ Bump patchset to fix #263215
+
+ 21 Mar 2009; Raúl Porcel <armin76@gentoo.org>
+ -mozilla-thunderbird-2.0.0.19.ebuild, mozilla-thunderbird-2.0.0.21.ebuild:
+ alpha/ia64/sparc stable, fix gcc check, bug #263152
+
+ 21 Mar 2009; Markus Meier <maekke@gentoo.org>
+ mozilla-thunderbird-2.0.0.21.ebuild:
+ x86 stable, bug #261386
+
+ 20 Mar 2009; Tobias Heinlein <keytoaster@gentoo.org>
+ mozilla-thunderbird-2.0.0.21.ebuild:
+ amd64 stable wrt security bug #261386
+
+ 20 Mar 2009; Brent Baude <ranger@gentoo.org>
+ mozilla-thunderbird-2.0.0.21.ebuild:
+ Marking mozilla-thunderbird-2.0.0.21 ppc64 and ppc for bug 261386
+
+*mozilla-thunderbird-2.0.0.21 (19 Mar 2009)
+
+ 19 Mar 2009; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-2.0.0.21.ebuild:
+ Version bump
+
+ 15 Feb 2009; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.19.ebuild:
+ Bump patchset to fix failure with gcc-4.3, bug #258075
+
+ 05 Jan 2009; Brent Baude <ranger@gentoo.org>
+ mozilla-thunderbird-2.0.0.19.ebuild:
+ Marking mozilla-thunderbird-2.0.0.19 ppc64 for bug 251322
+
+ 02 Jan 2009; Tobias Scherbaum <dertobi123@gentoo.org>
+ mozilla-thunderbird-2.0.0.19.ebuild:
+ ppc stable, bug #251322
+
+ 01 Jan 2009; Tobias Heinlein <keytoaster@gentoo.org>
+ mozilla-thunderbird-2.0.0.19.ebuild:
+ amd64 stable wrt security bug #251322
+
+ 01 Jan 2009; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.19.ebuild:
+ alpha/ia64/sparc/x86 stable wrt #251322
+
+*mozilla-thunderbird-2.0.0.19 (31 Dec 2008)
+
+ 31 Dec 2008; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-2.0.0.19.ebuild:
+ Version bump
+
+ 24 Nov 2008; Brent Baude <ranger@gentoo.org>
+ mozilla-thunderbird-2.0.0.18.ebuild:
+ Marking mozilla-thunderbird-2.0.0.18 ppc64 for bug 246602
+
+ 23 Nov 2008; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.18.ebuild:
+ alpha/ia64/sparc stable wrt #246602
+
+ 22 Nov 2008; Tobias Scherbaum <dertobi123@gentoo.org>
+ mozilla-thunderbird-2.0.0.18.ebuild:
+ ppc stable, bug #246602
+
+ 22 Nov 2008; Markus Meier <maekke@gentoo.org>
+ mozilla-thunderbird-2.0.0.18.ebuild:
+ amd64/x86 stable, bug #246602
+
+*mozilla-thunderbird-2.0.0.18 (20 Nov 2008)
+
+ 20 Nov 2008; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-2.0.0.18.ebuild:
+ Version bump
+
+ 31 Oct 2008; Raúl Porcel <armin76@gentoo.org>
+ -mozilla-thunderbird-1.5.0.8.ebuild:
+ old
+
+ 28 Sep 2008; Markus Meier <maekke@gentoo.org>
+ mozilla-thunderbird-2.0.0.17.ebuild:
+ amd64 stable, bug #238535
+
+ 27 Sep 2008; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.17.ebuild:
+ alpha/ia64/sparc/x86 stable wrt #238535
+
+ 26 Sep 2008; Brent Baude <ranger@gentoo.org>
+ mozilla-thunderbird-2.0.0.17.ebuild:
+ Marking mozilla-thunderbird-2.0.0.17 ppc64 and ppc for bug 238535
+
+*mozilla-thunderbird-2.0.0.17 (26 Sep 2008)
+
+ 26 Sep 2008; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-2.0.0.17.ebuild:
+ Version bump
+
+ 29 Aug 2008; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.16.ebuild:
+ Add new patchset for bug #224561
+
+ 23 Aug 2008; Doug Goldstein <cardoe@gentoo.org> metadata.xml:
+ add GLEP 56 USE flag desc from use.local.desc
+
+ 04 Aug 2008; Tobias Heinlein <keytoaster@gentoo.org>
+ mozilla-thunderbird-2.0.0.16.ebuild:
+ amd64 stable wrt security bug #231975
+
+ 03 Aug 2008; Tobias Scherbaum <dertobi123@gentoo.org>
+ mozilla-thunderbird-2.0.0.16.ebuild:
+ ppc stable, bug #231975
+
+ 26 Jul 2008; Markus Rothe <corsair@gentoo.org>
+ mozilla-thunderbird-2.0.0.16.ebuild:
+ Stable on ppc64; bug #231975
+
+ 24 Jul 2008; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.16.ebuild:
+ alpha/ia64/sparc/x86 stable wrt security #231975
+
+*mozilla-thunderbird-2.0.0.16 (24 Jul 2008)
+
+ 24 Jul 2008; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-2.0.0.16.ebuild:
+ Version bump
+
+ 03 Jun 2008; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.14.ebuild:
+ Fix bug #223375
+
+ 05 May 2008; Brent Baude <ranger@gentoo.org>
+ mozilla-thunderbird-2.0.0.14.ebuild:
+ Marking mozilla-thunderbird-2.0.0.14 ppc for bug 214816
+
+ 05 May 2008; Markus Rothe <corsair@gentoo.org>
+ mozilla-thunderbird-2.0.0.14.ebuild:
+ Stable on ppc64; bug #214816
+
+ 04 May 2008; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.14.ebuild:
+ alpha/ia64/sparc stable wrt #214816
+
+ 04 May 2008; Markus Meier <maekke@gentoo.org>
+ mozilla-thunderbird-2.0.0.14.ebuild:
+ amd64/x86 stable, security bug #214816
+
+*mozilla-thunderbird-2.0.0.14 (02 May 2008)
+
+ 02 May 2008; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-2.0.0.14.ebuild:
+ Version bump
+
+ 19 Apr 2008; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.12.ebuild:
+ Fix pango check, bug #218438
+
+ 19 Apr 2008; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.12.ebuild:
+ We need pango built with X use-flag bug #216377, fix linguas, bug #218147
+
+ 17 Mar 2008; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-1.5.0.8.ebuild, mozilla-thunderbird-1.5.0.14.ebuild,
+ mozilla-thunderbird-2.0.0.12.ebuild:
+ Fix LICENSE, thanks to zlin
+
+ 02 Mar 2008; Lars Weiler <pylon@gentoo.org>
+ mozilla-thunderbird-2.0.0.12.ebuild:
+ stable ppc, security bug 208128
+
+ 01 Mar 2008; Richard Freeman <rich0@gentoo.org>
+ mozilla-thunderbird-2.0.0.12.ebuild:
+ amd64 stable - 208128
+
+ 29 Feb 2008; Brent Baude <ranger@gentoo.org>
+ mozilla-thunderbird-2.0.0.12.ebuild:
+ Marking mozilla-thunderbird-2.0.0.12 ppc64 for bug 208128
+
+ 28 Feb 2008; Markus Meier <maekke@gentoo.org>
+ mozilla-thunderbird-2.0.0.12.ebuild:
+ x86 stable, security bug #208128
+
+ 28 Feb 2008; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-1.5.0.8.ebuild, mozilla-thunderbird-1.5.0.14.ebuild,
+ mozilla-thunderbird-2.0.0.12.ebuild:
+ alpha/ia64/sparc stable wrt security #208128
+
+*mozilla-thunderbird-2.0.0.12 (27 Feb 2008)
+
+ 27 Feb 2008; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-2.0.0.12.ebuild:
+ Version bump
+
+ 02 Feb 2008; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.9.ebuild:
+ Bump patchset to fix bug #208212
+
+ 28 Jan 2008; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.9.ebuild:
+ Bump patchset to make it compile with gcc-4.3, wrt #204703
+
+ 24 Jan 2008; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-1.5.0.8.ebuild, -mozilla-thunderbird-1.5.0.13.ebuild,
+ mozilla-thunderbird-1.5.0.14.ebuild:
+ Leave 1.5 only for mips, remove old
+
+ 23 Jan 2008; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.9.ebuild:
+ Bump patchset to fix building with nss-3.12
+
+ 20 Jan 2008; Brent Baude <ranger@gentoo.org>
+ mozilla-thunderbird-1.5.0.14.ebuild:
+ Marking mozilla-thunderbird-1.5.0.14 ppc for bug 203881
+
+*mozilla-thunderbird-1.5.0.14 (31 Dec 2007)
+
+ 31 Dec 2007; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-1.5.0.14.ebuild:
+ Version bump, stable on alpha/ia64/sparc/x86 since it contains security fixes
+
+ 19 Nov 2007; Raúl Porcel <armin76@gentoo.org>
+ -mozilla-thunderbird-2.0.0.6.ebuild:
+ old
+
+ 18 Nov 2007; Tobias Scherbaum <dertobi123@gentoo.org>
+ mozilla-thunderbird-2.0.0.9.ebuild:
+ ppc stable, bug #196481
+
+ 18 Nov 2007; Markus Rothe <corsair@gentoo.org>
+ mozilla-thunderbird-2.0.0.9.ebuild:
+ Stable on ppc64; bug #196481
+
+ 16 Nov 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.9.ebuild:
+ alpha/ia64/sparc stable wrt security #196481
+
+ 15 Nov 2007; Steve Dibb <beandog@gentoo.org>
+ mozilla-thunderbird-2.0.0.9.ebuild:
+ amd64 stable, bug 196481
+
+ 15 Nov 2007; Markus Meier <maekke@gentoo.org>
+ mozilla-thunderbird-2.0.0.9.ebuild:
+ x86 stable, security bug #196481
+
+*mozilla-thunderbird-2.0.0.9 (15 Nov 2007)
+
+ 15 Nov 2007; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-2.0.0.9.ebuild:
+ Version bump
+
+ 05 Sep 2007; Raúl Porcel <armin76@gentoo.org>
+ -mozilla-thunderbird-1.5.0.12.ebuild:
+ old
+
+ 02 Sep 2007; Jose Luis Rivero <yoswink@gentoo.org>
+ mozilla-thunderbird-1.5.0.13.ebuild:
+ Stable on sparc wrt to security bug #187205
+
+ 29 Aug 2007; Tobias Scherbaum <dertobi123@gentoo.org>
+ mozilla-thunderbird-1.5.0.13.ebuild:
+ ppc stable, bug #187205
+
+ 29 Aug 2007; Christoph Mende <angelos@gentoo.org>
+ mozilla-thunderbird-1.5.0.13.ebuild:
+ Stable on amd64 wrt security bug #187205
+
+ 28 Aug 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-1.5.0.13.ebuild:
+ alpha/ia64/x86 stable wrt security #187205
+
+*mozilla-thunderbird-1.5.0.13 (28 Aug 2007)
+
+ 28 Aug 2007; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-1.5.0.13.ebuild:
+ Version bump
+
+ 20 Aug 2007; Stuart Longland <redhatter@gentoo.org>
+ mozilla-thunderbird-2.0.0.6.ebuild:
+ Dropped -mips keyword. Thunderbird is known to work fine on little-endian
+ MIPS (mipsel), however IMAP support is broken for big-endian MIPS. More
+ information at https://bugzilla.mozilla.org/show_bug.cgi?id=390604
+ Daring users _may_ try it by adjusting their package.keywords _at their own
+ risk_.
+
+ 05 Aug 2007; Raúl Porcel <armin76@gentoo.org>
+ -mozilla-thunderbird-2.0.0.5.ebuild:
+ old
+
+ 05 Aug 2007; Markus Rothe <corsair@gentoo.org>
+ mozilla-thunderbird-2.0.0.6.ebuild:
+ Stable on ppc64; bug #187205
+
+ 03 Aug 2007; Tobias Scherbaum <dertobi123@gentoo.org>
+ mozilla-thunderbird-2.0.0.6.ebuild:
+ ppc stable, bug #187205
+
+ 03 Aug 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.6.ebuild:
+ alpha/ia64/x86 stable wrt security #187205
+
+ 02 Aug 2007; Carlos Silva <r3pek@gentoo.org>
+ mozilla-thunderbird-2.0.0.6.ebuild:
+ stable amd64 wrt bug #187205
+
+ 02 Aug 2007; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-2.0.0.6.ebuild:
+ Stable on sparc wrt security #187205
+
+*mozilla-thunderbird-2.0.0.6 (02 Aug 2007)
+
+ 02 Aug 2007; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-2.0.0.6.ebuild:
+ Version bump wrt security #187205
+
+ 28 Jul 2007; Raúl Porcel <armin76@gentoo.org>
+ -mozilla-thunderbird-2.0.0.4.ebuild:
+ old
+
+ 28 Jul 2007; Steve Dibb <beandog@gentoo.org>
+ mozilla-thunderbird-2.0.0.5.ebuild:
+ amd64 stable, security bug 185737
+
+ 27 Jul 2007; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-2.0.0.5.ebuild:
+ Stable on ppc wrt security #185737
+
+ 25 Jul 2007; Markus Rothe <corsair@gentoo.org>
+ mozilla-thunderbird-2.0.0.5.ebuild:
+ Stable on ppc64; bug #185737
+
+ 24 Jul 2007; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-2.0.0.5.ebuild:
+ Stable on sparc wrt security #185737
+
+ 23 Jul 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.5.ebuild:
+ alpha/ia64/x86 stable wrt security #185737
+
+ 21 Jul 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.5.ebuild:
+ Revert the langpack thing, bug 182175
+
+*mozilla-thunderbird-2.0.0.5 (20 Jul 2007)
+
+ 20 Jul 2007; Raúl Porcel <armin76@gentoo.org>
+ files/icon/mozilla-thunderbird.desktop,
+ files/icon/mozilla-thunderbird-unbranded.desktop,
+ +mozilla-thunderbird-2.0.0.5.ebuild:
+ Fix desktop files, bug 185869 and now it uses the langpack according to the
+ locale, bug 182175, and version bump wrt security #185737
+
+ 19 Jun 2007; Raúl Porcel <armin76@gentoo.org>
+ -mozilla-thunderbird-2.0.0.0.ebuild:
+ old
+
+ 19 Jun 2007; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-2.0.0.4.ebuild:
+ Stable on sparc wrt security #180436
+
+ 17 Jun 2007; Markus Rothe <corsair@gentoo.org>
+ mozilla-thunderbird-2.0.0.4.ebuild:
+ Stable on ppc64; bug #180436
+
+ 15 Jun 2007; Tobias Scherbaum <dertobi123@gentoo.org>
+ mozilla-thunderbird-2.0.0.4.ebuild:
+ ppc stable, bug #180436
+
+ 15 Jun 2007; Christoph Mende <angelos@gentoo.org>
+ mozilla-thunderbird-2.0.0.4.ebuild:
+ Stable on amd64 wrt security bug 180436
+
+ 15 Jun 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.4.ebuild:
+ alpha/ia64/x86 stable wrt security #180436
+
+*mozilla-thunderbird-2.0.0.4 (15 Jun 2007)
+
+ 15 Jun 2007; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-2.0.0.4.ebuild:
+ Version bump wrt security #180436
+
+ 13 Jun 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.0.ebuild:
+ Remove forced MAKEOPTS, bug 181722
+
+ 08 Jun 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-1.5.0.12.ebuild, mozilla-thunderbird-2.0.0.0.ebuild:
+ Some small modifications, thanks to Cardoe for the suggestion
+
+ 07 Jun 2007; Markus Rothe <corsair@gentoo.org>
+ mozilla-thunderbird-2.0.0.0.ebuild:
+ Stable on ppc64; bug #178983
+
+ 05 Jun 2007; Raúl Porcel <armin76@gentoo.org>
+ -mozilla-thunderbird-1.5.0.9.ebuild, -mozilla-thunderbird-1.5.0.10.ebuild:
+ old
+
+ 02 Jun 2007; René Nussbaumer <killerfox@gentoo.org>
+ mozilla-thunderbird-1.5.0.12.ebuild:
+ Stable on ppc. See bug #180436.
+
+ 01 Jun 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-1.5.0.12.ebuild:
+ alpha/ia64/x86 stable wrt security #180436
+
+ 01 Jun 2007; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-1.5.0.12.ebuild:
+ Stable on sparc wrt security #180436
+
+ 01 Jun 2007; Christoph Mende <angelos@gentoo.org> mozilla-thunderbird-1.5.0.12:
+ Stable on amd64 wrt security bug 180436
+
+*mozilla-thunderbird-1.5.0.12 (31 May 2007)
+
+ 31 May 2007; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-1.5.0.12.ebuild:
+ Version bump, security bug #180436
+
+ 20 May 2007; Joseph Jezak <josejx@gentoo.org>
+ mozilla-thunderbird-2.0.0.0.ebuild:
+ Marked ppc stable for bug #178983.
+
+ 19 May 2007; Christian Faulhammer <opfer@gentoo.org>
+ mozilla-thunderbird-2.0.0.0.ebuild:
+ stable amd64, bug 178983
+
+ 18 May 2007; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-2.0.0.0.ebuild:
+ Stable on sparc wrt #178983
+
+ 18 May 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.0.ebuild:
+ ia64 + x86 stable wrt #178983
+
+ 17 May 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.0.ebuild:
+ Add ~alpha wrt #175267
+
+ 15 May 2007; Stuart Longland <redhatter@gentoo.org>
+ mozilla-thunderbird-2.0.0.0.ebuild:
+ Added a patch to allow building on MIPS. Still keyworded -mips at this
+ point, I want to do some more thorough testing before I bump it to ~mips.
+ Testing and feedback welcome.
+
+ 22 Apr 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.0.ebuild:
+ 2.0.0.0 needs enigmail-0.95.0, bug 175521
+
+ 19 Apr 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.0.ebuild:
+ Fix unpack, bug 175273
+
+ 19 Apr 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0.0.0.ebuild:
+ Fix NOSHORTLANG variable, bug 175236
+
+*mozilla-thunderbird-2.0.0.0 (18 Apr 2007)
+
+ 18 Apr 2007; Raúl Porcel <armin76@gentoo.org>
+ -mozilla-thunderbird-2.0.0.0_rc1.ebuild,
+ +mozilla-thunderbird-2.0.0.0.ebuild:
+ Version bump
+
+*mozilla-thunderbird-2.0.0.0_rc1 (08 Apr 2007)
+
+ 08 Apr 2007; Raúl Porcel <armin76@gentoo.org>
+ -mozilla-thunderbird-2.0_beta2.ebuild,
+ +mozilla-thunderbird-2.0.0.0_rc1.ebuild:
+ Version bump
+
+ 24 Mar 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0_beta2.ebuild:
+ Bump patchset wrt bug 171901, patch by Roy Marples <uberlord at gentoo dot org>
+
+ 23 Mar 2007; Tobias Scherbaum <dertobi123@gentoo.org>
+ mozilla-thunderbird-1.5.0.10.ebuild:
+ ppc stable, bug #165555
+
+ 18 Mar 2007; Marius Mauch <genone@gentoo.org>
+ mozilla-thunderbird-1.5.0.8.ebuild, mozilla-thunderbird-1.5.0.9.ebuild,
+ mozilla-thunderbird-1.5.0.10.ebuild, mozilla-thunderbird-2.0_beta2.ebuild:
+ Replacing einfo with elog
+
+ 11 Mar 2007; Bryan Østergaard <kloeri@gentoo.org>
+ mozilla-thunderbird-1.5.0.10.ebuild:
+ Stable on IA64.
+
+ 08 Mar 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0_beta2.ebuild:
+ Bump patchset for g/fbsd wrt bug 169825
+
+ 06 Mar 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0_beta2.ebuild:
+ Bump patchset to fix bug 165777 and bug 168893
+
+ 06 Mar 2007; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-1.5.0.10.ebuild:
+ Stable on sparc wrt security #165555
+
+ 05 Mar 2007; Jose Luis Rivero <yoswink@gentoo.org>
+ mozilla-thunderbird-1.5.0.10.ebuild:
+ alpha stable wrt security bug #165555
+
+ 03 Mar 2007; Raúl Porcel <armin76@gentoo.org>
+ +files/icon/mozilla-thunderbird-unbranded.desktop,
+ +files/icon/thunderbird-icon-unbranded.png,
+ -mozilla-thunderbird-2.0_beta1.ebuild,
+ mozilla-thunderbird-2.0_beta2.ebuild:
+ replace mozbranding with bindist and enable by default, bug 168409, some
+ cleanup, and add linguas. Modify the patchset without bzipped patches and
+ add desktop and icon file for unbranded, drop old
+
+ 03 Mar 2007; Steve Dibb <beandog@gentoo.org>
+ mozilla-thunderbird-1.5.0.10.ebuild:
+ amd64 stable, security bug 165555
+
+ 02 Mar 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-1.5.0.10.ebuild:
+ x86 stable wrt security bug 165555
+
+*mozilla-thunderbird-1.5.0.10 (02 Mar 2007)
+
+ 02 Mar 2007; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-1.5.0.10.ebuild:
+ Version bump, security bug 165555
+
+ 21 Feb 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-1.5.0.8.ebuild, mozilla-thunderbird-1.5.0.9.ebuild,
+ mozilla-thunderbird-2.0_beta1.ebuild,
+ mozilla-thunderbird-2.0_beta2.ebuild:
+ Some minorsyn fixes
+
+ 15 Feb 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0_beta2.ebuild:
+ Fix patches filename
+
+ 14 Feb 2007; Raúl Porcel <armin76@gentoo.org>
+ +files/icon/mozilla-thunderbird.desktop,
+ -files/icon/mozillathunderbird.desktop,
+ mozilla-thunderbird-1.5.0.8.ebuild, mozilla-thunderbird-1.5.0.9.ebuild,
+ mozilla-thunderbird-2.0_beta1.ebuild,
+ mozilla-thunderbird-2.0_beta2.ebuild:
+ Fix .desktop files, bug 147735
+
+*mozilla-thunderbird-2.0_beta2 (08 Feb 2007)
+
+ 08 Feb 2007; Raúl Porcel <armin76@gentoo.org>
+ +mozilla-thunderbird-2.0_beta2.ebuild:
+ Version bump, bug 165602
+
+ 30 Jan 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-2.0_beta1.ebuild:
+ Move branding USE-flag to mozbranding, bug 157335
+
+ 11 Jan 2007; Raúl Porcel <armin76@gentoo.org>
+ mozilla-thunderbird-1.5.0.8.ebuild, mozilla-thunderbird-1.5.0.9.ebuild,
+ mozilla-thunderbird-2.0_beta1.ebuild:
+ license change, bug 150118
+
+ 08 Jan 2007; Raúl Porcel (armin76) <armin76@gentoo.org>
+ -files/mozilla-thunderbird-1.0.6-gcc4.patch,
+ -files/mozilla-thunderbird-1.0.7-draft-template.patch,
+ -files/mozilla-thunderbird-1.0.7-gcc-4.0.2.patch,
+ -files/mozilla-thunderbird-1.0.8-gcc-4.patch,
+ -files/firefox-1.1-uriloader.patch, -files/firefox-1.1-uriloader-1.patch,
+ -files/firefox-1.1-visibility.patch,
+ -files/firefox-1.5-visibility-check.patch,
+ -files/firefox-1.5-visibility-fix.patch, -files/pango-cairo-1.patch,
+ -files/thunderbird-rpath-1.patch, -files/firefox-bus-error.patch,
+ -files/mozilla-alpha-xpcom-subs-fix.patch,
+ -files/thunderbird-cairo-canvas.patch,
+ -files/thunderbird-nopangoxft.patch:
+ remove patches unneeded
+
+ 08 Jan 2007; Raúl Porcel <armin76@gentoo.org> -mozilla-thunderbird-1.0.7.ebuild,
+ -mozilla-thunderbird-1.5.0.4.ebuild, -mozilla-thunderbird-1.5.0.5.ebuild,
+ -mozilla-thunderbird-1.5.0.7.ebuild:
+ remove old
+
+ 08 Jan 2007; Bryan Østergaard <kloeri@gentoo.org>
+ mozilla-thunderbird-1.5.0.9.ebuild:
+ Fix visibility issue on ia64 and mark stable.
+
+ 08 Jan 2007; Bryan Østergaard <kloeri@gentoo.org>
+ mozilla-thunderbird-1.5.0.9.ebuild:
+ Add Alpha patch and stable on Alpha, bug 158571.
+
+ 29 Dec 2006; Danny van Dyk <kugelfang@gentoo.org>
+ mozilla-thunderbird-1.5.0.9.ebuild:
+ Marked stable on amd64 wrt security bug #158571.
+
+ 26 Dec 2006; Stuart Longland <redhatter@gentoo.org>
+ mozilla-thunderbird-1.5.0.8.ebuild, mozilla-thunderbird-2.0_beta1.ebuild:
+ Marking Thunderbird 1.5.0.8 stable on mips, all seems well there. 2.0b1
+ however, I'm marking -mips for now, until such time I know it actually
+ works.
+
+ 22 Dec 2006; Tom Gall <tgall@gentoo.org>
+ mozilla-thunderbird-2.0_beta1.ebuild:
+ added ~ppc64 (with much fanfare!)
+
+ 22 Dec 2006; Christian Marie <pingu@gentoo.org>
+ mozilla-thunderbird-1.5.0.9.ebuild:
+ Add check for cairo with X, bug #140770.
+
+ 21 Dec 2006; Joshua Jackson <tsunam@gentoo.org>
+ mozilla-thunderbird-1.5.0.9.ebuild:
+ Stable x86; bug #158571
+
+ 21 Dec 2006; Tobias Scherbaum <dertobi123@gentoo.org>
+ mozilla-thunderbird-1.5.0.9.ebuild:
+ Stable on ppc wrt bug #158571.
+
+ 20 Dec 2006; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-1.5.0.9.ebuild:
+ Stable on sparc wrt security #158571
+
+ 19 Dec 2006; Stefan Schweizer <genstef@gentoo.org> mozilla-thunderbird-1.5.0.9.ebuild:
+ version bump thanks anarchy
+
+ 10 Dec 2006; Bryan Østergaard <kloeri@gentoo.org>
+ -mozilla-thunderbird-2.0_alpha1.ebuild,
+ -mozilla-thunderbird-2.0_alpha1-r1.ebuild:
+ Punt 2.0_alpha versions.
+
+*mozilla-thunderbird-2.0_beta1 (10 Dec 2006)
+
+ 10 Dec 2006; Bryan Østergaard <kloeri@gentoo.org>
+ +mozilla-thunderbird-2.0_beta1.ebuild:
+ Add thunderbird-2.0 beta.
+
+ 09 Dec 2006; Bryan Østergaard <kloeri@gentoo.org>
+ mozilla-thunderbird-1.5.0.8.ebuild:
+ Stable on ia64.
+
+ 12 Nov 2006; Bryan Østergaard <kloeri@gentoo.org>
+ mozilla-thunderbird-1.5.0.8.ebuild:
+ Add ~alpha keyword.
+
+ 11 Nov 2006; Bryan Østergaard <kloeri@gentoo.org>
+ mozilla-thunderbird-1.5.0.7.ebuild, mozilla-thunderbird-1.5.0.8.ebuild,
+ mozilla-thunderbird-2.0_alpha1.ebuild,
+ mozilla-thunderbird-2.0_alpha1-r1.ebuild:
+ Restrict parallel builds until upstream can solve the problem properly, bug
+ 135495.
+
+ 10 Nov 2006; <blubb@gentoo.org> mozilla-thunderbird-1.5.0.8.ebuild:
+ stable on amd64
+
+ 09 Nov 2006; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-1.5.0.8.ebuild:
+ Stable on sparc wrt security #154448
+
+ 09 Nov 2006; Tobias Scherbaum <dertobi123@gentoo.org>
+ mozilla-thunderbird-1.5.0.8.ebuild:
+ ppc stable, bug #154448
+
+ 09 Nov 2006; Christian Faulhammer <opfer@gentoo.org>
+ mozilla-thunderbird-1.5.0.8.ebuild:
+ stable x86, security bug #154448
+
+*mozilla-thunderbird-2.0_alpha1-r1 (09 Nov 2006)
+
+ 09 Nov 2006; Bryan Østergaard <kloeri@gentoo.org>
+ +mozilla-thunderbird-2.0_alpha1-r1.ebuild:
+ Add replytolist plugin support. Thanks goes to Jory A.
+
+*mozilla-thunderbird-1.5.0.8 (09 Nov 2006)
+
+ 09 Nov 2006; Bryan Østergaard <kloeri@gentoo.org>
+ +mozilla-thunderbird-1.5.0.8.ebuild,
+ mozilla-thunderbird-2.0_alpha1.ebuild:
+ Version bump, bug 154448.
+
+*mozilla-thunderbird-2.0_alpha1 (23 Oct 2006)
+
+ 23 Oct 2006; Piotr Jaroszyński <peper@gentoo.org>
+ +mozilla-thunderbird-2.0_alpha1.ebuild:
+ New version from anarchy.
+
+ 10 Oct 2006; Bryan Østergaard <kloeri@gentoo.org>
+ mozilla-thunderbird-1.5.0.7.ebuild:
+ Stable on ia64.
+
+ 04 Oct 2006; Joshua Kinard <kumba@gentoo.org>
+ mozilla-thunderbird-1.5.0.7.ebuild:
+ Marked stable on mips.
+
+ 26 Sep 2006; Simon Stelling <blubb@gentoo.org>
+ mozilla-thunderbird-1.5.0.7.ebuild:
+ stable on amd64; bug 147653
+
+ 26 Sep 2006; Joshua Jackson <tsunam@gentoo.org>
+ mozilla-thunderbird-1.5.0.7.ebuild:
+ Stable x86; bug #147653
+
+ 23 Sep 2006; Tobias Scherbaum <dertobi123@gentoo.org>
+ mozilla-thunderbird-1.5.0.7.ebuild:
+ ppc stable, bug #147653
+
+ 23 Sep 2006; Stuart Longland <redhatter@gentoo.org>
+ mozilla-thunderbird-1.5.0.7.ebuild:
+ Tweak to language pack installation logic. Fixes bug #147829.
+ Thanks to Fabrice Delliaux for the ebuild update.
+
+ 21 Sep 2006; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-1.5.0.7.ebuild:
+ Stable on sparc
+
+*mozilla-thunderbird-1.5.0.7 (16 Sep 2006)
+
+ 16 Sep 2006; Stuart Longland <redhatter@gentoo.org>
+ +mozilla-thunderbird-1.5.0.7.ebuild:
+ New Thunderbird release
+
+ 05 Sep 2006; Diego Pettenò <flameeyes@gentoo.org>
+ mozilla-thunderbird-1.5.0.5.ebuild:
+ Add ~x86-fbsd keyword.
+
+ 03 Sep 2006; Bryan Østergaard <kloeri@gentoo.org>
+ mozilla-thunderbird-1.5.0.5.ebuild:
+ Stable on ia64.
+
+ 13 Aug 2006; Joshua Kinard <kumba@gentoo.org>
+ mozilla-thunderbird-1.5.0.5.ebuild:
+ Marked stable on mips.
+
+ 02 Aug 2006; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-1.5.0.5.ebuild:
+ Stable on sparc wrt security #141842
+
+ 01 Aug 2006; Joshua Jackson <tsunam@gentoo.org>
+ mozilla-thunderbird-1.5.0.5.ebuild:
+ Stable x86; bug #141842
+
+ 31 Jul 2006; Simon Stelling <blubb@gentoo.org>
+ mozilla-thunderbird-1.5.0.5.ebuild:
+ stable on amd64 wrt bug 141842
+
+ 29 Jul 2006; Tobias Scherbaum <dertobi123@gentoo.org>
+ mozilla-thunderbird-1.5.0.5.ebuild:
+ ppc stable, bug #142064
+
+*mozilla-thunderbird-1.5.0.5 (28 Jul 2006)
+
+ 28 Jul 2006; Bryan Østergaard <kloeri@gentoo.org>
+ +mozilla-thunderbird-1.5.0.5.ebuild:
+ Version bump, bug 141842.
+
+ 26 Jul 2006; Joshua Kinard <kumba@gentoo.org>
+ mozilla-thunderbird-1.5.0.4.ebuild:
+ Bump the patch version up to 0.2 because we added two mips patches that
+ allows thunderbird to work on mips. Also, the patches are now stored in CVS,
+ and are no longer individually compressed (*.patch vs. *.patch.bz2). See
+ gentoo/src/patchsets for more info, plus the make-tarball.sh script that can
+ generate new patchballs. Oh, and add unstable mips to keywords for a few
+ days.
+
+ 20 Jul 2006; Diego Pettenò <flameeyes@gentoo.org>
+ mozilla-thunderbird-1.5.0.4.ebuild:
+ Fix installation on non-GNU systems (bug #138157) and add ~x86-fbsd keyword.
+
+ 12 Jun 2006; Jory A. Pratt <anarchy@gentoo.org>
+ -mozilla-thunderbird-1.0.7-r1.ebuild,
+ -mozilla-thunderbird-1.0.7-r2.ebuild,
+ -mozilla-thunderbird-1.0.7-r3.ebuild, -mozilla-thunderbird-1.0.8.ebuild,
+ -mozilla-thunderbird-1.5-r3.ebuild, -mozilla-thunderbird-1.5.0.2.ebuild,
+ -mozilla-thunderbird-1.5.0.2-r1.ebuild:
+ removed most vulnerable versions, will remove 1.0.7 when ia64 marks 1.5.0.4
+ stable
+
+ 06 Jun 2006; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-1.5.0.4.ebuild:
+ Stable on sparc wrt security #135256
+
+ 04 Jun 2006; Mark Loeser <halcy0n@gentoo.org>
+ mozilla-thunderbird-1.5.0.4.ebuild:
+ Stable on x86; bug #135254
+
+ 03 Jun 2006; <nixnut@gentoo.org> mozilla-thunderbird-1.5.0.4.ebuild:
+ Stable on ppc; bug #135256
+
+ 03 Jun 2006; Jory A. Pratt <anarchy@gentoo.org>
+ mozilla-thunderbird-1.5.0.4.ebuild:
+ amd64 stable wrt bug #135256
+
+*mozilla-thunderbird-1.5.0.4 (02 Jun 2006)
+
+ 02 Jun 2006; Jory A. Pratt <anarchy@gentoo.org>
+ +mozilla-thunderbird-1.5.0.4.ebuild:
+ revision/security bump, modifications to ia64 and filepicker patches, sparc
+ patch integrated into patchset
+
+ 02 Jun 2006; Thomas Cort <tcort@gentoo.org>
+ mozilla-thunderbird-1.0.8.ebuild:
+ Dropped ~alpha keyword since thunderbird is badly broken on alpha (Bug
+ #131359) and cannot be marked stable for secuity Bug #130888.
+
+ 23 May 2006; Gustavo Zacarias <gustavoz@gentoo.org>
+ +files/firefox-bus-error.patch, mozilla-thunderbird-1.5.0.2-r1.ebuild:
+ Fix sparc issues wrt #115729 and keyworded ~sparc
+
+*mozilla-thunderbird-1.5.0.2-r1 (30 Apr 2006)
+
+ 30 Apr 2006; Jory A. Pratt <anarchy@gentoo.org>
+ +mozilla-thunderbird-1.5.0.2-r1.ebuild:
+ textrels fix introduced
+
+ 29 Apr 2006; Jory A. Pratt <anarchy@gentoo.org>
+ mozilla-thunderbird-1.5.0.2.ebuild:
+ stable wrt bug #130888
+
+ 29 Apr 2006; Jory A. Pratt <anarchy@gentoo.org>
+ mozilla-thunderbird-1.5.0.2.ebuild:
+ patchset revision for --as-needed
+
+ 26 Apr 2006; Alec Warner <antarus@gentoo.org>
+ mozilla-thunderbird-1.0.8.ebuild:
+ Stable on x86 wrt bug # 130888
+
+ 24 Apr 2006; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-1.0.8.ebuild:
+ Stable on sparc wrt security #130888
+
+ 23 Apr 2006; Tobias Scherbaum <dertobi123@gentoo.org>
+ mozilla-thunderbird-1.5.0.2.ebuild:
+ ppc stable, bug #130888
+
+*mozilla-thunderbird-1.5.0.2 (23 Apr 2006)
+*mozilla-thunderbird-1.0.8 (23 Apr 2006)
+
+ 23 Apr 2006; Jory A. Pratt <anarchy@gentoo.org>
+ +files/mozilla-thunderbird-1.0.8-gcc-4.patch,
+ +mozilla-thunderbird-1.0.8.ebuild, +mozilla-thunderbird-1.5.0.2.ebuild:
+ revision bump to both 1.0.x and 1.5.x branch which includes security fixes
+
+*mozilla-thunderbird-1.5-r3 (31 Mar 2006)
+
+ 31 Mar 2006; Jory A. Pratt <anarchy@gentoo.org>
+ -mozilla-thunderbird-1.5.ebuild, -mozilla-thunderbird-1.5-r1.ebuild,
+ -mozilla-thunderbird-1.5-r2.ebuild, +mozilla-thunderbird-1.5-r3.ebuild:
+ ABI fix for third party extensions
+
+ 23 Mar 2006; Aron Griffis <agriffis@gentoo.org>
+ mozilla-thunderbird-1.5-r2.ebuild:
+ Mark 1.5-r2 ~ia64
+
+*mozilla-thunderbird-1.5-r2 (19 Mar 2006)
+
+ 19 Mar 2006; Jory A. Pratt <anarchy@gentoo.org>
+ +mozilla-thunderbird-1.5-r2.ebuild:
+ glibc-2.4 support wrt bug #125832
+
+ 06 Feb 2006; <anarchy@gentoo.org> mozilla-thunderbird-1.5-r1.ebuild:
+ revision to patchset to incude makeopts patch
+
+ 02 Feb 2006; Luca Barbato <lu_zero@gentoo.org>
+ mozilla-thunderbird-1.5-r1.ebuild:
+ Marked ~ppc
+
+*mozilla-thunderbird-1.5 (12 Jan 2006)
+
+ 12 Jan 2006; Jory A. Pratt <anarchy@gentoo.org>
+ +files/firefox-1.1-uriloader-1.patch,
+ +files/firefox-1.5-visibility-check.patch,
+ +files/firefox-1.5-visibility-fix.patch, +files/pango-cairo-1.patch,
+ -mozilla-thunderbird-1.5_rc1-r1.ebuild,
+ -mozilla-thunderbird-1.5_rc2.ebuild, +mozilla-thunderbird-1.5.ebuild:
+ revision bump, arch's will need to be added back as some will have issues in
+ this release
+
+*mozilla-thunderbird-1.5_rc2 (24 Dec 2005)
+
+ 24 Dec 2005; Jory A. Pratt <anarchy@gentoo.org>
+ +mozilla-thunderbird-1.5_rc2.ebuild:
+ revision bump
+
+ 06 Dec 2005; Jory A. Pratt <anarchy@gentoo.org>
+ mozilla-thunderbird-1.5_rc1-r1.ebuild:
+ edited for mozconfig-2 split
+
+*mozilla-thunderbird-1.0.7-r3 (03 Dec 2005)
+
+ 03 Dec 2005; Jory A. Pratt <anarchy@gentoo.org>
+ +files/mozilla-thunderbird-1.0.7-draft-template.patch,
+ +mozilla-thunderbird-1.0.7-r3.ebuild:
+ patch from nelchael to fix draft/template folders
+
+*mozilla-thunderbird-1.5_rc1-r1 (22 Nov 2005)
+
+ 22 Nov 2005; <anarchy@gentoo.org> +files/firefox-1.1-uriloader.patch,
+ +files/firefox-1.1-visibility.patch, -files/thunderbird-visibility.patch,
+ -mozilla-thunderbird-1.5_rc1.ebuild,
+ +mozilla-thunderbird-1.5_rc1-r1.ebuild:
+ visibility fixed, uri patch added
+
+ 16 Nov 2005; <anarchy@gentoo.org> mozilla-thunderbird-1.0.7-r2.ebuild,
+ mozilla-thunderbird-1.5_rc1.ebuild:
+ readded patch for rpath
+
+*mozilla-thunderbird-1.5_rc1 (15 Nov 2005)
+
+ 15 Nov 2005; <anarchy@gentoo.org> +files/thunderbird-cairo-canvas.patch,
+ +files/thunderbird-nopangoxft.patch, +files/thunderbird-visibility.patch,
+ +mozilla-thunderbird-1.5_rc1.ebuild:
+ initial import for 1.5 testing and preparations, not intended for users
+
+ 13 Nov 2005; Michael Hanselmann <hansmi@gentoo.org>
+ mozilla-thunderbird-1.0.7-r2.ebuild:
+ Fix a compilation issue using the 32-bit userland with 64-bit kernel on
+ PowerPC.
+
+*mozilla-thunderbird-1.0.7-r2 (26 Oct 2005)
+
+ 26 Oct 2005; Jory A. Pratt <anarchy@gentoo.org>
+ +mozilla-thunderbird-1.0.7-r2.ebuild:
+ rpath reincluded, gcc-4 not updated as no issues arise with segfault on amd64
+
+*mozilla-thunderbird-1.0.7-r1 (23 Oct 2005)
+
+ 23 Oct 2005; <anarchy@gentoo.org> -files/thunderbird-0.7-init.tar.bz2,
+ -files/mozilla-thunderbird-1.0.2-gcc4.patch,
+ +files/mozilla-thunderbird-1.0.7-gcc-4.0.2.patch,
+ -mozilla-thunderbird-1.0.5.ebuild, -mozilla-thunderbird-1.0.5-r1.ebuild,
+ -mozilla-thunderbird-1.0.6-r2.ebuild,
+ -mozilla-thunderbird-1.0.6-r3.ebuild,
+ -mozilla-thunderbird-1.0.6-r4.ebuild,
+ -mozilla-thunderbird-1.0.6-r5.ebuild,
+ +mozilla-thunderbird-1.0.7-r1.ebuild:
+ cleanup of old ebuild/files additional fix added to gcc-4 patch
+
+ 15 Oct 2005; Joseph Jezak <josejx@gentoo.org>
+ mozilla-thunderbird-1.0.7.ebuild:
+ Marked ppc stable for bug #109094.
+
+ 15 Oct 2005; Jose Luis Rivero <yoswink@gentoo.org>
+ mozilla-thunderbird-1.0.7.ebuild:
+ Stable on alpha wrt security bug #109094
+
+ 14 Oct 2005; Homer Parker <hparker@gentoo.org>
+ mozilla-thunderbird-1.0.7.ebuild:
+ Stable on amd64.
+
+ 13 Oct 2005; Paul Varner <fuzzyray@gentoo.org>
+ mozilla-thunderbird-1.0.7.ebuild:
+ Stable on x86. Bug #109094
+
+ 13 Oct 2005; Aron Griffis <agriffis@gentoo.org>
+ mozilla-thunderbird-1.0.7.ebuild:
+ Mark 1.0.7 stable on ia64
+
+ 13 Oct 2005; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-1.0.7.ebuild:
+ Stable on sparc wrt #109094
+
+*mozilla-thunderbird-1.0.7 (01 Oct 2005)
+
+ 01 Oct 2005; Brad Laue <brad@gentoo.org>
+ +mozilla-thunderbird-1.0.7.ebuild:
+ New version 1.0.7. Includes security fixes such as
+ http://secunia.com/advisories/16901/.
+
+*mozilla-thunderbird-1.0.6-r5 (15 Aug 2005)
+
+ 15 Aug 2005; Jory A. Pratt <anarchy@gentoo.org>
+ +files/thunderbird-rpath-1.patch, +mozilla-thunderbird-1.0.6-r5.ebuild:
+ rpath applied, p.masked for further testing
+
+*mozilla-thunderbird-1.0.6-r4 (02 Aug 2005)
+
+ 02 Aug 2005; Aron Griffis <agriffis@gentoo.org>
+ +mozilla-thunderbird-1.0.6-r4.ebuild:
+ Update to v2 of the nsplugins patch, which actually works (even on multilib
+ systems). Define GENTOO_NSPLUGINS_DIR and GENTOO_NSBROWSER_PLUGINS_DIR in
+ the ebuild prior to emake, rather than in the eclass prior to econf, since
+ ./configure chokes on the definitions
+
+*mozilla-thunderbird-1.0.6-r3 (31 Jul 2005)
+
+ 31 Jul 2005; Jory A. Pratt <anarchy@gentoo.org>
+ +files/mozilla-thunderbird-1.0.6-gcc4.patch,
+ +mozilla-thunderbird-1.0.6-r3.ebuild:
+ Updated gcc4 patch
+
+ 23 Jul 2005; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-1.0.6-r2.ebuild:
+ Stable on sparc wrt #99960
+
+ 22 Jul 2005; Jory A. Pratt <anarchy@gentoo.org>
+ mozilla-thunderbird-1.0.6-r2.ebuild:
+ stable ppc wrt bug #99960
+
+ 22 Jul 2005; Aron Griffis <agriffis@gentoo.org>
+ mozilla-thunderbird-1.0.6-r2.ebuild:
+ Push to stable for security and extensions issues
+
+ 22 Jul 2005; Aron Griffis <agriffis@gentoo.org>
+ mozilla-thunderbird-1.0.6-r2.ebuild:
+ Port nsplugins patch from firefox ebuild. Do registration in pkg_postrm as
+ well as pkg_postinst. More synchronization goodness from mozilla and firefox
+ ebuilds
+
+*mozilla-thunderbird-1.0.6-r2 (21 Jul 2005)
+
+ 21 Jul 2005; Aron Griffis <agriffis@gentoo.org>
+ -files/mozilla-thunderbird-0.9-4ft2.patch,
+ mozilla-thunderbird-1.0.5.ebuild, mozilla-thunderbird-1.0.5-r1.ebuild,
+ -mozilla-thunderbird-1.0.6-r1.ebuild,
+ +mozilla-thunderbird-1.0.6-r2.ebuild:
+ Fix major boo-boo in 1.0.6-r1: installed-chrome.txt had gone missing. Also
+ move 4ft2 patch to distfiles
+
+*mozilla-thunderbird-1.0.6-r1 (21 Jul 2005)
+
+ 21 Jul 2005; Aron Griffis <agriffis@gentoo.org>
+ -mozilla-thunderbird-1.0.2-r10.ebuild, -mozilla-thunderbird-1.0.6.ebuild,
+ +mozilla-thunderbird-1.0.6-r1.ebuild:
+ Recent mozilla-thunderbird ebuilds were inadvertently based on my
+ experimental pmasked 1.0.2-r10, which included calling mozilla-launcher
+ -register, which was not ready for production. The result was that
+ thunderbird would be installed to /usr/lib/thunderbird and some stuff would
+ be moved to /var. This commit bumps the rev to -r1, which moves thunderbird
+ to /usr/lib/mozilla-thunderbird, requires the latest mozilla-launcher which
+ handles registration correctly, and doesn't put anything in /var
+
+*mozilla-thunderbird-1.0.6 (20 Jul 2005)
+
+ 20 Jul 2005; Jory A. Pratt <anarchy@gentoo.org>
+ +mozilla-thunderbird-1.0.6.ebuild:
+ revision bump, fixes API for extentions
+
+*mozilla-thunderbird-1.0.5-r1 (18 Jul 2005)
+
+ 18 Jul 2005; Jory A. Pratt <anarchy@gentoo.org>
+ +mozilla-thunderbird-1.0.5-r1.ebuild:
+ Add mozcalendar support
+
+ 18 Jul 2005; Aron Griffis <agriffis@gentoo.org>
+ -mozilla-thunderbird-1.0.2.ebuild, -mozilla-thunderbird-1.0.2-r1.ebuild,
+ mozilla-thunderbird-1.0.5.ebuild:
+ Update dependency to mozilla-launcher-1.35 to help with #99084
+
+ 17 Jul 2005; Jory A. Pratt <anarchy@gentoo.org>
+ mozilla-thunderbird-1.0.5.ebuild:
+ Marked stable wrt Security BUG #98855.
+
+ 17 Jul 2005; Danny van Dyk <kugelfang@gentoo.org>
+ mozilla-thunderbird-1.0.5.ebuild:
+ Marked stable wrt Security BUG #98855.
+
+ 16 Jul 2005; Bryan Østergaard <kloeri@gentoo.org>
+ mozilla-thunderbird-1.0.5.ebuild:
+ Stable on alpha + ia64, bug 98855.
+
+ 15 Jul 2005; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-1.0.5.ebuild:
+ Stable on sparc wrt #98855
+
+ 14 Jul 2005; Jory A. Pratt <anarchy@gentoo.org>
+ mozilla-thunderbird-1.0.5.ebuild:
+ Stable on PPC
+
+ 14 Jul 2005; Jory A. Pratt <anarchy@gentoo.org>
+ mozilla-thunderbird-1.0.5.ebuild:
+ added ewarn about engimail being dropped
+
+*mozilla-thunderbird-1.0.5 (14 Jul 2005)
+
+ 14 Jul 2005; Jory A. Pratt <anarchy@gentoo.org>
+ +mozilla-thunderbird-1.0.5.ebuild:
+ Security Bump Bug #98855
+
+ 06 Jul 2005; Aron Griffis <agriffis@gentoo.org>
+ mozilla-thunderbird-1.0.2.ebuild, mozilla-thunderbird-1.0.2-r1.ebuild,
+ mozilla-thunderbird-1.0.2-r10.ebuild:
+ Add ldap to IUSE
+
+*mozilla-thunderbird-1.0.2-r10 (29 Jun 2005)
+
+ 29 Jun 2005; Aron Griffis <agriffis@gentoo.org>
+ +mozilla-thunderbird-1.0.2-r10.ebuild:
+ Add pmasked development ebuild which will break enigmail out into its own
+ ebuild. Additionally this ebuild changes MOZILLA_FIVE_HOME to
+ /usr/lib/thunderbird and moves chromes to /var/lib/thunderbird. It's no
+ longer necessary to use a snapshot of initialization files since
+ mozilla-launcher-1.33 has a -register mechanism which is called in
+ pkg_postinst
+
+ 24 Jun 2005; Jonathan Smith <smithj@gentoo.org>
+ mozilla-thunderbird-1.0.2-r1.ebuild:
+ fixed sandboxing problem
+
+ 23 Jun 2005; Aron Griffis <agriffis@gentoo.org>
+ mozilla-thunderbird-1.0.2-r1.ebuild:
+ Use the thunderbird enigmail theme #45609
+
+*mozilla-thunderbird-1.0.2-r1 (22 Jun 2005)
+
+ 22 Jun 2005; Jonathan Smith <smithj@gentoo.org>
+ +mozilla-thunderbird-1.0.2-r1.ebuild:
+ enigmail version bump for #94744 and silly ebuild comment fix
+
+ 30 May 2005; Sven Wegener <swegener@gentoo.org>
+ mozilla-thunderbird-1.0.2.ebuild:
+ Moved from gcc.eclass to toolchain-funcs.eclass, bug #92745.
+
+ 15 May 2005; Mark Loeser <halcy0n@gentoo.org>
+ +files/mozilla-thunderbird-1.0.2-gcc4.patch,
+ mozilla-thunderbird-1.0.2.ebuild:
+ Added GCC4 patch ; fixes bug #87800
+
+ 12 May 2005; Aron Griffis <agriffis@gentoo.org>
+ -files/ipc-1.0.6-nsPipeChannel.patch, -files/MozillaThunderbird,
+ -files/enigmail/Makefile-enigmail, -files/enigmail/Makefile-ipc,
+ -files/thunderbird, -mozilla-thunderbird-0.7.3-r1.ebuild,
+ -mozilla-thunderbird-0.8.ebuild, -mozilla-thunderbird-0.9.ebuild,
+ -mozilla-thunderbird-0.9-r2.ebuild, -mozilla-thunderbird-0.9-r3.ebuild,
+ -mozilla-thunderbird-1.0.ebuild:
+ trim old versions
+
+ 15 Apr 2005; Simon Stelling <blubb@gentoo.org>
+ mozilla-thunderbird-1.0.2.ebuild:
+ fixing multilib-strict, see bug #87455
+
+ 25 Mar 2005; Jason Wever <weeve@gentoo.org>
+ mozilla-thunderbird-1.0.2.ebuild:
+ Stable on SPARC wrt security bug #84075.
+
+ 24 Mar 2005; Brad Laue <brad@gentoo.org> mozilla-thunderbird-1.0.2.ebuild:
+ Adjust dep on gnupg to >=gnupg-1.4 per enigmail requirements.
+
+ 24 Mar 2005; Aron Griffis <agriffis@gentoo.org>
+ mozilla-thunderbird-1.0.2.ebuild:
+ Stable on alpha ia64
+
+ 24 Mar 2005; Benjamin Schindler <config@gentoo.org>
+ mozilla-thunderbird-1.0.2.ebuild:
+ Stable on amd64
+
+ 24 Mar 2005; Michael Hanselmann <hansmi@gentoo.org>
+ mozilla-thunderbird-1.0.2.ebuild:
+ Stable on ppc.
+
+ 23 Mar 2005; Seemant Kulleen <seemant@gentoo.org>
+ mozilla-thunderbird-1.0.2.ebuild:
+ stable to x86 for brad
+
+ 23 Mar 2005; Seemant Kulleen <seemant@gentoo.org>
+ mozilla-thunderbird-1.0.2.ebuild:
+ mozilla-launcher to www-client from net-www
+
+ 23 Mar 2005; Aron Griffis <agriffis@gentoo.org>
+ mozilla-thunderbird-1.0.ebuild:
+ Upstream enigmail tarball changed, md5sum broken. Copy new version to Gentoo
+ mirrors as -r1 #78585
+
+ 23 Mar 2005; Aron Griffis <agriffis@gentoo.org>
+ mozilla-thunderbird-1.0.2.ebuild:
+ Use a stub script instead of symlink to mozilla-launcher. This in
+ combination with mozilla-launcher-1.28 should fix #78890
+
+*mozilla-thunderbird-1.0.2 (23 Mar 2005)
+
+ 23 Mar 2005; Brad Laue <brad@gentoo.org> +mozilla-thunderbird-1.0.2.ebuild:
+ Bump to 1.0.2. See bug #84074 for fix details.
+
+ 29 Dec 2004; <SeJo@gentoo.org> :
+ stable on ppc glsa: 68976
+
+ 29 Dec 2004; Joseph Jezak <josejx@gentoo.org>
+ mozilla-thunderbird-1.0.ebuild:
+ Tested and marked ppc stable for bug #68976.
+
+ 21 Dec 2004; Bryan Østergaard <kloeri@gentoo.org>
+ mozilla-thunderbird-1.0.ebuild:
+ Stable on alpha, bug 68976.
+
+ 21 Dec 2004; Olivier Crete <tester@gentoo.org>
+ mozilla-thunderbird-1.0.ebuild:
+ Stable on x86 per security bug 68976
+
+ 20 Dec 2004; Dylan Carlson <absinthe@gentoo.org>
+ mozilla-thunderbird-1.0.ebuild:
+ Stable on amd64.
+
+ 20 Dec 2004; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-1.0.ebuild:
+ Stable on sparc wrt #68976
+
+*mozilla-thunderbird-1.0 (07 Dec 2004)
+
+ 07 Dec 2004; Brad Laue <brad@gentoo.org> +mozilla-thunderbird-1.0.ebuild:
+ Mozilla Thunderbird 1.0. Reclaim your inbox. Based on mozconfig eclass.
+
+*mozilla-thunderbird-0.9-r3 (18 Nov 2004)
+
+ 18 Nov 2004; Aron Griffis <agriffis@gentoo.org>
+ +files/mozilla-thunderbird-0.9-4ft2.patch,
+ +mozilla-thunderbird-0.9-r3.ebuild:
+ Update to enigmail 0.89.0 #64547. Add patch for freetype-2.1.8+ binary
+ compatibility #59849
+
+ 16 Nov 2004; Aron Griffis <agriffis@gentoo.org>
+ mozilla-thunderbird-0.9-r2.ebuild:
+ Remove IUSE=gtk2 because we always depend on gtk2 now
+
+ 14 Nov 2004; Aron Griffis <agriffis@gentoo.org>
+ mozilla-thunderbird-0.9-r2.ebuild:
+ Set HOME=~root when running regxpcom/regchrome in case this is being emerged
+ via sudo. Otherwise the commands will create ~/.mozilla owned by root and
+ 700 perms, which makes subsequent execution of thunderbird by user
+ impossible. #67031
+
+*mozilla-thunderbird-0.9-r2 (13 Nov 2004)
+
+ 13 Nov 2004; Aron Griffis <agriffis@gentoo.org>
+ -mozilla-thunderbird-0.9-r1.ebuild, +mozilla-thunderbird-0.9-r2.ebuild:
+ Use mozconfig_final to resolve --enable-extensions to a single option
+
+*mozilla-thunderbird-0.9-r1 (13 Nov 2004)
+
+ 13 Nov 2004; Aron Griffis <agriffis@gentoo.org>
+ +mozilla-thunderbird-0.9-r1.ebuild:
+ use mozconfig.eclass instead of mozilla.eclass for building
+
+*mozilla-thunderbird-0.9 (06 Nov 2004)
+
+ 06 Nov 2004; Brad Laue <brad@gentoo.org> +mozilla-thunderbird-0.9.ebuild:
+ New version 0.9, featuring saved search folders, message grouping. See the
+ changelog for more details at
+ http://www.mozilla.org/products/thunderbird/releases/.
+
+ 21 Oct 2004; Joseph Jezak <josejx@gentoo.org>
+ mozilla-thunderbird-0.8.ebuild:
+ Marked stable on ppc
+
+*mozilla-thunderbird-0.8 (15 Sep 2004)
+
+ 15 Sep 2004; <agriffis@gentoo.org> +mozilla-thunderbird-0.8.ebuild:
+ Bump to 0.8 for security bug 63996
+
+*mozilla-thunderbird-0.7.3-r1 (11 Aug 2004)
+
+ 11 Aug 2004; Aron Griffis <agriffis@gentoo.org>
+ +mozilla-thunderbird-0.7.3-r1.ebuild, -mozilla-thunderbird-0.7.3.ebuild:
+ Bump to 0.7.3-r1 for bug 60060 (cannot manage passwords due to missing wallet
+ extension)
+
+ 08 Aug 2004; Aron Griffis <agriffis@gentoo.org>
+ mozilla-thunderbird-0.7.3.ebuild:
+ Move extensions configuration to mozilla.eclass. Use edit_makefiles to reduce
+ compilation RAM requirements
+
+ 08 Aug 2004; <agriffis@gentoo.org> mozilla-thunderbird-0.7.3.ebuild:
+ stable on ia64
+
+ 07 Aug 2004; Gustavo Zacarias <gustavoz@gentoo.org>
+ mozilla-thunderbird-0.7.3.ebuild:
+ Keyworded alpha, sparc and x86 back into the fold
+
+ 06 Aug 2004; Tom Martin <slarti@gentoo.org>
+ mozilla-thunderbird-0.7.3.ebuild:
+ Mark stable on amd64 for bug #59419.
+
+ 05 Aug 2004; <agriffis@gentoo.org>
+ +files/mozilla-alpha-xpcom-subs-fix.patch, mozilla-thunderbird-0.7.3.ebuild:
+ Fix compilation on alpha #57057. Mark stable on x86 and alpha #59419.
+
+ 05 Aug 2004; Josh Grebe <squash@gentoo.org>
+ mozilla-thunderbird-0.7.3.ebuild:
+ Sparcify, bug #59419
+
+*mozilla-thunderbird-0.7.3 (04 Aug 2004)
+
+ 04 Aug 2004; Aron Griffis <agriffis@gentoo.org>
+ -files/mozilla-thunderbird-amd64.patch, +mozilla-thunderbird-0.7.3.ebuild:
+ Update to 0.7.3 for security meta-bug 59419. This is the first of the mozilla
+ ebuilds to use mozilla.eclass. Remove unused amd64 patch which exceeds
+ repoman's filesize limit.
+
diff --git a/mail-client/thunderbird/Manifest b/mail-client/thunderbird/Manifest
new file mode 100644
index 0000000..a1d3040
--- /dev/null
+++ b/mail-client/thunderbird/Manifest
@@ -0,0 +1,69 @@
+AUX 1001-xulrunner_fix_jemalloc_vs_aslr.patch 1936 RMD160 4edd9e5ab5082f86cb66ad1fc158e4c105f861ce SHA1 20df285bac8e0704559c0479f7dfe02f030afa8a SHA256 0beb08f2b3fc504897b1024caabcf2887b55fae31c021341c66d3491dc63e32b
+AUX 1002_fix-system-hunspell-dict-detections.patch 3466 RMD160 f8fa846e5d7c80a15d0abf0c6aedb7302ead1f83 SHA1 091febd913c09c86c9242b1be8960fb012ee7c8d SHA256 7ce51cae6bbd6655c8bc543365370627e37d2fc5aa7f7e1270671f7482df344a
+AUX 2000-thunderbird_gentoo_install_dirs.patch 813 RMD160 802697aab947df43693d7330f5d83700a62a6b50 SHA1 d2621bc80130239d7d65562ce8de8488dcbf60e2 SHA256 f663f3e59ac1752d681ed5d09bd599693009a65f603c89fa6d2e851b3487a8c4
+AUX bug-606109.patch 1259 RMD160 6d3f5d354524268e34293e9ce2d8b173c47163af SHA1 e1488807cc61ec04b2caa50019c000ba5d077450 SHA256 f2e645dfaa03cabcf46703be5bdeff8ee021694896465d3d263b038682dc0395
+AUX cups-1.4.4-fixup.patch 5439 RMD160 e907f65012a88b0810979c0beda4244e817835e6 SHA1 4099626a22b61802c958faad8171d506a95f9fca SHA256 501f95e278c2fdf3dec2b5586a2dc5ae35d78557a0db9939a1501c4782e54be5
+AUX enigmail-1.1.2-20110124-locale-fixup.diff 125 RMD160 8704469817cd93c99665a35655fa626b74253920 SHA1 708e101ae0576f99d6f10ac778fbc2b76c3ff6ea SHA256 60627ed65b032e33935d14eea4c7224f940641c4a11ab8bdf2c5d6056a76bfda
+AUX icon/thunderbird-icon-unbranded.png 13280 RMD160 1654b2cfa39631e2084da982001113972eb41c09 SHA1 2fdca79e57c79d2485eb56d31de7afb05337898e SHA256 28b605529bee4d8245afdbb2cab5a705d8fa8977a11635b54c7bc5a7d6a9619c
+AUX icon/thunderbird-icon.png 6499 RMD160 1aeece7719c1c1629b98fc11870641769681a048 SHA1 651d244e96fa0edf13f68f5ef9047432eb6ed3bf SHA256 ff9749e42b82b80425bb52883d63baa53298af7be98870ee6b73f0a6cf0ab22d
+AUX icon/thunderbird-unbranded.desktop 183 RMD160 2aeecc5f6127adee0c9ab1e1c83a29bafb82f41e SHA1 3c7533d73abf8208e2117de1601ac31935994021 SHA256 b42bda8d82722d069049889f14887aabc9f3e139a023186780ffff222ca5722d
+AUX icon/thunderbird.desktop 173 RMD160 03faca4ba9ff401e5d5ffc6ebb0a27ddbd9dd36c SHA1 cfdaa810fda5599a2e8454933157d5c2e590bd7f SHA256 1990dde085dbb37be74766a39eab72c0a0812cb1fde6f1c3fd10ce64dc8f5623
+AUX libnotify-0.7.patch 1809 RMD160 5d88eedd2769b3cf318f759717df75444a823fcb SHA1 41c1c7f7b0259cf1857f9d38b1d5be0c1027c304 SHA256 97fb2338cd5e813afef08a128358c5702cb63e5399afca3004b20b863ab8281b
+AUX thunderbird-3.1-gcc45.patch 1051 RMD160 d01dcbdc7c25d8a4c077d07abc247111a6c5f77c SHA1 e6bb3ac4796d5d8d10573f8131892281c094486e SHA256 0bc2214d4b705bf2edb515c471e2748eac5c84f765af44d2134704572bd5e435
+AUX thunderbird-3.1-noalsa-fixup.patch 1087 RMD160 ad7807e9d42c65b9f1a8965e43db349a4c1fd38f SHA1 36f66207e3df9aa2481a7e2cb43c6ba0e74dc912 SHA256 62a9044ad373a3ead7c8547e7a342891c55f04d5fe0225e5ac05115fbad962e1
+AUX thunderbird-3.3-gconf-config-update.patch 1569 RMD160 e237530c4d95de84aa295927fd1c703d8a54b9a9 SHA1 6f78524f88fd7b3f4fef4eec1666eabe96c89992 SHA256 9da47f2752f7bb353297b93be3aaecf2d6004af3c91717d22e35a347ee6cf2a2
+AUX thunderbird-gentoo-default-prefs-1.js 311 RMD160 3542b008d6ba40a0290e5921d3388b81c817437c SHA1 bd307aa373458fed7c30c749d3e7acaf26e0b05e SHA256 1c9e25533118fc41e7dd8c276ce60106f6fb1959cab3887438759d23fdbc5445
+AUX thunderbird-gentoo-default-prefs.js 494 RMD160 9eed5d9ac1f7953bb563354176a3656c09e62744 SHA1 6a155c0e3bf74f37ddb2e506df5cb35af5e7105f SHA256 e9831135f0f893944df3f51d3c754db9eb330a1293d7e6b79b7682d6ce60b48f
+AUX thunderbird-respect-ldflags.patch 1640 RMD160 889a63b2fb04878e99b2a14d47713e47621ab334 SHA1 fec674ca325de52a547af336864b66e113fb2df7 SHA256 3db9aea0cdfc77c6c7de20591a44b92eecb9636fdb6c45676a173905a8bd7ae1
+AUX thunderbird-xul-1.9.2-arm-fixes.patch 603 RMD160 952db59f2c3d526b04323fec830cf04c28dfb84d SHA1 b1e2f12c0b204bf2c6434303c0638750dcb1b73d SHA256 19d230805cb5d62a99fef32dfc373661dcc3361bf8d1f6077854120a5e9a9821
+AUX xulrunner-1.9.2-gtk+-2.21.patch 679 RMD160 060d514faa98768312d047985c81934342935745 SHA1 d672469ce9f8271a4788639a7fa36c7d606ef442 SHA256 25432a427c70fcaf929e45312ff9e4a617d709d59efa89932a77b42c3f7b0230
+DIST thunderbird-3.1-patches-1.2.tar.bz2 3427 RMD160 354d9003e8132e0aaf7069aec84459ff28237f61 SHA1 36ad5f9af77eaacc02c7df744b5d2563fb54bed8 SHA256 6586cf569b035bd1b9179036678a0cbedbf3def88ca7d69852451542b52693a0
+DIST thunderbird-3.1.10-af.xpi 210557 RMD160 6a0f2dc1241cae8e25f79de456b63fe659072b3f SHA1 398f1dde23d8a8b9870c033ff636738539c115b0 SHA256 e5ceb7e160596e632df8c43c58706158e0440896b517178b0c3506990443b08d
+DIST thunderbird-3.1.10-ar.xpi 230315 RMD160 2d5e9e197efa21e89a91e51c7e93823758387fcd SHA1 bbfbef4860149027756da262d4596d39d5872a7e SHA256 a7d0ca5a275ee934d96943c22de55b0885c49cd0a25e57508b3fad8e2b500338
+DIST thunderbird-3.1.10-be.xpi 194427 RMD160 c71b635673d7268d5e40fd606bf8707464928d92 SHA1 3e49e3edac22ab0997c35521c2f5a3ca85d91231 SHA256 056f899de1725302401339fa9b7c97cddaec376f54d6b156807702c3786200da
+DIST thunderbird-3.1.10-bg.xpi 235120 RMD160 8f5720da1c828c10c4cccef0bf37984ab389a49a SHA1 be367325cf6d9272e5676d8d3fc675c312df9e78 SHA256 0560577d88201e875e72438587bce261e6759f5f7005175f7fec621837d1841e
+DIST thunderbird-3.1.10-bn-BD.xpi 244805 RMD160 dc37ee25b18e8f7c42d99b277d96c0e4e52ce11d SHA1 dfff896b36ff41822cdb9806b759dca60c158f88 SHA256 73dfa5d973ce8928e28aba55fe0ddfa92882210fe0c65d9f05b81f590245ed07
+DIST thunderbird-3.1.10-ca.xpi 219310 RMD160 bb1a72a40292382a2a6acfa760b54afee720d023 SHA1 4b3d92f9233dc06930774e3507dfbe5e8cf16af2 SHA256 eb19a6fff770b1a2ce8bada62540d47a764c04eb2fd7959547fdd795afa91147
+DIST thunderbird-3.1.10-cs.xpi 218144 RMD160 5b51990e3eda404148d070c915cd83cd6ceff8e4 SHA1 149b34bf3f61d78b510c771e00b58cb5e60da11a SHA256 4bb052e7983b47d87386dc7b6f4449aa0b2b7f1a459952b34edc24b62df9a767
+DIST thunderbird-3.1.10-da.xpi 203173 RMD160 587258cd265cec0f93e2a3fa43a188f06b00593b SHA1 447c1ceacc7d601d58354a5f828630a086de5220 SHA256 b517b10e5f9359740c31e484d7524119bdae2f41a78a33c58d0ce306e03e581c
+DIST thunderbird-3.1.10-de.xpi 222771 RMD160 51823d24caef7e395819128788eaa920b310b1e6 SHA1 72e5e9b9b5ce801461766f751ec5dfae91503dc1 SHA256 7d7ae0f47c85118a6471a4aa812d7eb3356cdb849f77754eda5ead413d09883d
+DIST thunderbird-3.1.10-el.xpi 210078 RMD160 04647579694bad1bb0558053e97db7118482d42f SHA1 92d86acdd147d7cf915b8532a6fd66d9302a8193 SHA256 54bd4c18c0c46aa04697fcbc0238165f544d80e40d58b451e4ac11fac8bdd8cb
+DIST thunderbird-3.1.10-en-GB.xpi 203621 RMD160 380b0d8411f3bb8c5092d819214ff34dd409518c SHA1 de58310e30605e2393f2b71f6d591c6790669d28 SHA256 bdb59659852e70c49f92e39c957ee3f0b9c2a3c00e60ea82560def63e420bea3
+DIST thunderbird-3.1.10-es-AR.xpi 218603 RMD160 6eb140d9538104e9e9d99156c823db58b638c054 SHA1 5ffff8167377813fe437d03015f2e42d66cc5308 SHA256 2a372ac13bfd8612c4e08e2282ec48a2432201d812f956d9797bfbdce7b19092
+DIST thunderbird-3.1.10-es-ES.xpi 172969 RMD160 ef269cf41f9b7592910a0fecf356fd0e76522ef7 SHA1 11f7c23fe7318512b1e7b000b37beec167a1860e SHA256 caea4e41dc5b98a151d8859f13ef4c141187a9e1bd4fe486ae2e1e1c685eb1db
+DIST thunderbird-3.1.10-et.xpi 221695 RMD160 88a5a91c45a1e64671dc256fad6d962f0b8c2e8d SHA1 fc1fe908005a17c6155e35c65ca9f4c93d64f021 SHA256 d34e09605516cddcd555c69d58361d11c42d86954a6e6d80218e43e625f9b401
+DIST thunderbird-3.1.10-eu.xpi 211347 RMD160 dd5e88932a964b40a2ad135113499616dbbecfe3 SHA1 3cbbbd9a945f6a1cc9015ba6c63cf489c3df0737 SHA256 9e0a3721af8b76bf0529ae8faf6a8865c59729e36fb1784e34c73b57a234ef7a
+DIST thunderbird-3.1.10-fi.xpi 219468 RMD160 67041bbe6124c4c51735a1c769fc0c851e6e811b SHA1 5c1e3de03a93071c5bcfe4249ea0b2afc1fd69d4 SHA256 02c9088c77ff1ea9bb47d1a55c5517cc2d10b1a8e464b87c88b372d2dc9cf592
+DIST thunderbird-3.1.10-fr.xpi 221694 RMD160 d562a2fc82a61086e9c30846923875906fc4ed7c SHA1 96e71448c149daa1576a917f29a4f4cb823eb3a6 SHA256 7f5bbc2e1c1094f34efe401207d9a7a41afcf585aea7c36b6044bcacdcb51217
+DIST thunderbird-3.1.10-fy-NL.xpi 220803 RMD160 c285594c75c0ba3c4e4fcb041256ff9ffa27dc74 SHA1 af1cf92376ca30bdbebd4656f115cc6486537a05 SHA256 5ecf22e2aced7d435ba4bf4821b600fcb815ea55c2678ea1c0b3e08d07553071
+DIST thunderbird-3.1.10-ga-IE.xpi 219480 RMD160 6dfac503673c23808912dcb7babe8d5af7b5b756 SHA1 20a571d4901ea00b76c6115146b4307123c5f9b9 SHA256 9dedb2e5cd06d0bf82e838580ae6308d677a3654d53b1e0604bc43539c034f85
+DIST thunderbird-3.1.10-he.xpi 204910 RMD160 ff26317abd44f608662c48c548128457c1a98bf0 SHA1 ead73f482bf6d1e9d47cd1d62b5be5ad5edba4ef SHA256 6f69457a8c6dea64b14968e5e3902603b6442548c5565b9f83647374c5a75e76
+DIST thunderbird-3.1.10-hu.xpi 226087 RMD160 5cecbd88863c20db3bc848f9e4cb4a9e48dae7a1 SHA1 c5b717b63c967fe4ae52abb720158e1d97107015 SHA256 46e0a5e724b0c2fcec0c66dc7f152b14c35c9c1aeeb98adf1f84d71fdb8e7376
+DIST thunderbird-3.1.10-id.xpi 185836 RMD160 ea1a75a3efb2efafaee37698fab63e9bd8fc287e SHA1 7344c61b8f3e3c1ac0137d12460f965b537b3705 SHA256 e9622e1429d51a2a551ccb68f0adbced714060593b91dd066f1dee240df92b70
+DIST thunderbird-3.1.10-is.xpi 214062 RMD160 7c142d18b7e04e94b61b761d0c5ad7d62e558758 SHA1 13ce8b7702d4a5e36e7ef785002b710b78276f0c SHA256 8abc2ef9c52178c531f303b3b107a4d3a55e54395b283fe4ff549644059c916d
+DIST thunderbird-3.1.10-it.xpi 171470 RMD160 6faeca0cca04937ec0a0fd0d4c2ab676771709d5 SHA1 a2bb0fb08214475c8af8375ac80e09c536f4f0d8 SHA256 ba9874bbcf1fe5bd72a4a255f42b6eec0772821c373e41a56458cff9fe929a59
+DIST thunderbird-3.1.10-ja.xpi 236560 RMD160 adb040d15a32d97458219b47df966e3a5a842bac SHA1 be4315ff4dc1fe3654a619ec2aa14f798d8c11b4 SHA256 430ec529c9411b70a47cbc7cff1ec3d66b733e990fe2809db34f72766ceab28f
+DIST thunderbird-3.1.10-ko.xpi 194742 RMD160 39a8294e865c75130c17ce6bdd510f759c7fcc2f SHA1 10b1cf4e1ffcbe7e37ecab9170c7c8c58537173a SHA256 f9e89b086a22e8a254bdc2c96a1f7bd7e747e7917db195171a56df799174a61e
+DIST thunderbird-3.1.10-lt.xpi 235350 RMD160 1bc394f2c9c8cd0310b75d1e5e1e365fe52e6c7f SHA1 2de44c90d489d7a37cf248e58d9facfe53215113 SHA256 8d77b28ac9680ed7ed42c1ba96faaa915cf62faddfa485811006b9e492d1e057
+DIST thunderbird-3.1.10-nb-NO.xpi 213927 RMD160 6e3084113f4daba9d140d12c612a7d5292227586 SHA1 b8bfa007b475bdbe5f2ed4c37e4ffa4508bc8fa0 SHA256 4f36a1ed2f56e9c6e42d788af4e79a0170b9c2e0056f16110424f1c8368e47b3
+DIST thunderbird-3.1.10-nl.xpi 216597 RMD160 04da99b7101dd417c0fc23ac845cd466f973095b SHA1 fe5655807226e3a4b23ed12430d84bd12955b249 SHA256 dc37849de48099d837b8ee377ad20dde4c218a0199bbabbb218c66ac84a39c64
+DIST thunderbird-3.1.10-nn-NO.xpi 215687 RMD160 f948618dcc42ab3a07ecb57c1cfa7e9695f80d83 SHA1 26265f746a70e08a0fe0f6e09c013b717ca91270 SHA256 8351ea5cf3fd436d499145af3e95488c4dddbdc5eb7ca9c11e46fb9954de367d
+DIST thunderbird-3.1.10-pa-IN.xpi 241054 RMD160 16a1bbc57bfc9726bb097fe535aa292c38e9eb0a SHA1 26165c8c890973b47a69063bcdb93f69e9cc6105 SHA256 3a6cb05e64c50b640179968c95d88acd4e9e5339df1cf10ef6220a20c243e2b3
+DIST thunderbird-3.1.10-pl.xpi 203864 RMD160 7f5e932a1304b71fbf55f2c3be1fdc29b13b13ef SHA1 eb0ba4c181dbdfb00e004386b51cba02566eb6f7 SHA256 0cc0396be1aa14535988bb77e95bcdb6990601aaf16d3c617cc3483a40fe2820
+DIST thunderbird-3.1.10-pt-BR.xpi 215018 RMD160 9593fb428a86f780a39ce8262336afae7df9321a SHA1 bb6a939c3a49abe4df8dd057e182aa48f761ec6d SHA256 4d7cce717fbf227030c93af100facb7f98623af05fd3fce13cf583bcff7bb187
+DIST thunderbird-3.1.10-pt-PT.xpi 214244 RMD160 0b635cc2f18c312090b0a57ce3a6c5d536ed8c07 SHA1 4e682267ec0b1d6986b56b3f90876d638654a2e8 SHA256 2c6e93091cc1b70ff4a6c3b533ce71344e552dd829986fe3bd690eb9903313f2
+DIST thunderbird-3.1.10-ro.xpi 221219 RMD160 7dedb8daa9a93be1ad40935c58b3895acc5414a1 SHA1 a25888bc041fd36cf517a59d60646a5c956c9198 SHA256 c9770e4e3d192e8eb778cf9661ec1fb753b13809c203d7e338715690cafb7c3f
+DIST thunderbird-3.1.10-ru.xpi 198219 RMD160 5f8614d271dae90f18491ddc68a156f073382571 SHA1 4306b6e5f1c04614fe1a9b1c04b2b086b2d0d953 SHA256 f8f6fffa1c9d4bb03f8abd75b6cf3a82dc88263c6423b590e46b79f209bf2431
+DIST thunderbird-3.1.10-si.xpi 246157 RMD160 f18d8c22ff12b5c665f610096a026f124c2324ac SHA1 55121b68e0d78460f40b001b96d40f16a9d2b821 SHA256 b5a41e989ad703b2dcc646a9b4c8a0b336934fb73120c081c02c7d47b490171e
+DIST thunderbird-3.1.10-sk.xpi 224650 RMD160 bcbea849dfe0d3f051ee3ad16f3e6ea68c014d87 SHA1 1037f9c4562e3d74c0cd0a1e01675f585c69efb0 SHA256 8dff7a1996946f0f77d34ce928e598794fccb691ea93d0a0987d4eb75dd19dd3
+DIST thunderbird-3.1.10-sl.xpi 218530 RMD160 bfc66919b396b6520c0f05c99f58e56195b79cd8 SHA1 8c7c20b8360a44a3f0baaa1e36117d007444e102 SHA256 e98b20743e2539cb415c623fca95e17f938e3d3744c9953a788d29b34fb20dec
+DIST thunderbird-3.1.10-sq.xpi 211225 RMD160 9fe60202696ceb96d8535830da56061ef65f1771 SHA1 306a55e037912034c1eec9eb2392c9310f8af2ca SHA256 f31e237e96bc97a728272778da94e919e9bb8b13ff379f7442f22df811856ae6
+DIST thunderbird-3.1.10-sv-SE.xpi 221172 RMD160 c027f20dce9f17798c6c52febb67886c42160f0f SHA1 ca137b3c4e03c541641fab20077d86e63fd33dc0 SHA256 c648ae39ff76c01b5f38ed080a484ed3471ba86eb78ba2a5c0c9e4f461b90a8f
+DIST thunderbird-3.1.10-tr.xpi 215798 RMD160 598e90256c0606eac289717c766097694bfb07b2 SHA1 bd0630011935607d207f99c5378436f9d5495999 SHA256 30e59f9f93f4aaeec7c325e3738c033a0b166b93cae05295a42bbc5152031d18
+DIST thunderbird-3.1.10-uk.xpi 244817 RMD160 ef681eb41258f9dd5cc56f859a5386f6e5d3716c SHA1 9401c8a33a256901e425dc8a626f908c8a8e207c SHA256 61de746a788db029d09ba2377212fc4023117d5ad0b3282c0efc174afbaaaa7a
+DIST thunderbird-3.1.10-zh-CN.xpi 219651 RMD160 aa029ae3f40a1d3ba715a734f31e94db5e505154 SHA1 cac129db77c856452c84818b77797e0cb917bab7 SHA256 cba81e7a1dceefe27c4effabb83e41f45871f62abf9d0f0f1cc590fee88eb1e4
+DIST thunderbird-3.1.10-zh-TW.xpi 220629 RMD160 ff309998b59cd7eb9577109df89625538ccc966b SHA1 3ee5ac72ccd6eea4deeb40d71cdacf1ae71b902f SHA256 9ddf34a06f6555175ca8ad999b8ceadf9040e424bb203f7cfb2ca8e0d8c2a180
+DIST thunderbird-3.1.10.source.tar.bz2 68960927 RMD160 163f115874d7a4b1a6bb604b218fe9d94783c1b0 SHA1 54aceedb71f2e3b9b1f298d8c60f64931e9dafd2 SHA256 4b9b61a983e4910a85995879e7a4181a67b706b89a167719f5cd2c1d4f9b9824
+EBUILD thunderbird-3.1.10-r1.ebuild 8124 RMD160 736c6538e7c56e0c91ebcb82d18626de3009ce49 SHA1 45398f9f667b3aaa3536a7d10c39d430c107bd04 SHA256 9507e63256ef0574a4377e126bb0d02116569a24af85db8f3db3ac2bee4c9b79
+MISC ChangeLog 61271 RMD160 54a5d37d2d68c0cb374934c25e6c8fba7f4b6091 SHA1 4daf8e98539c7b1dccab763b1881f25bf86858ee SHA256 d1a8fa95f0006952a60efbafb69a2216a1fb6404ee092ea569039ab6bd9351e2
+MISC metadata.xml 732 RMD160 87468b1b9c1c1ec539c026f04e05265a4dc32cdd SHA1 283661cc3d68f2f7c2a3b82455692f7239bed63b SHA256 3b0e7f6f49598b82aaeee92a5f96f99877713866fbbb73c797bfa65f2c0b4d75
diff --git a/mail-client/thunderbird/files/1001-xulrunner_fix_jemalloc_vs_aslr.patch b/mail-client/thunderbird/files/1001-xulrunner_fix_jemalloc_vs_aslr.patch
new file mode 100644
index 0000000..7511ac7
--- /dev/null
+++ b/mail-client/thunderbird/files/1001-xulrunner_fix_jemalloc_vs_aslr.patch
@@ -0,0 +1,55 @@
+diff -urpx 'cscope*' -x '.*.swp' mozilla-1.9.1-orig/memory/jemalloc/jemalloc.c mozilla-1.9.1/memory/jemalloc/jemalloc.c
+--- mozilla-orig/memory/jemalloc/jemalloc.c 2009-07-30 17:30:25.000000000 +0200
++++ mozilla/memory/jemalloc/jemalloc.c 2009-08-10 14:28:59.000000000 +0200
+@@ -392,7 +392,7 @@ __FBSDID("$FreeBSD: head/lib/libc/stdlib
+ static const bool __isthreaded = true;
+ #endif
+
+-#if defined(MOZ_MEMORY_SOLARIS) && defined(MAP_ALIGN) && !defined(JEMALLOC_NEVER_USES_MAP_ALIGN)
++#if defined(MOZ_MEMORY_SOLARIS) || defined(MOZ_MEMORY_LINUX) || defined(MOZ_MEMORY_BSD)
+ #define JEMALLOC_USES_MAP_ALIGN /* Required on Solaris 10. Might improve performance elsewhere. */
+ #endif
+
+@@ -2305,20 +2305,31 @@ pages_map_align(size_t size, int pfd, si
+ * We don't use MAP_FIXED here, because it can cause the *replacement*
+ * of existing mappings, and we only want to create new mappings.
+ */
+-#ifdef MALLOC_PAGEFILE
+- if (pfd != -1) {
+- ret = mmap((void *)alignment, size, PROT_READ | PROT_WRITE, MAP_PRIVATE |
+- MAP_NOSYNC | MAP_ALIGN, pfd, 0);
+- } else
+-#endif
+- {
+- ret = mmap((void *)alignment, size, PROT_READ | PROT_WRITE, MAP_PRIVATE |
+- MAP_NOSYNC | MAP_ALIGN | MAP_ANON, -1, 0);
+- }
++ ret = mmap(NULL, size + alignment, PROT_READ | PROT_WRITE, MAP_PRIVATE |
++ MAP_NOSYNC| MAP_ANON, -1, 0);
+ assert(ret != NULL);
+
+ if (ret == MAP_FAILED)
+ ret = NULL;
++ else {
++ uintptr_t aligned_ret;
++ size_t extra_size;
++
++ aligned_ret = (uintptr_t)ret + alignment - 1;
++ aligned_ret &= ~(alignment - 1);
++ extra_size = aligned_ret - (uintptr_t)ret;
++ munmap(ret, extra_size);
++ munmap(ret + extra_size + size, alignment - extra_size);
++ ret = (void *)aligned_ret;
++#ifdef MALLOC_PAGEFILE
++ if (pfd != -1) {
++ ret = mmap(ret, size, PROT_READ | PROT_WRITE, MAP_PRIVATE |
++ MAP_NOSYNC | MAP_FIXED, pfd, 0);
++ }
++ if (ret == MAP_FAILED)
++ ret = NULL;
++#endif
++ }
+ return (ret);
+ }
+ #endif
+
diff --git a/mail-client/thunderbird/files/1002_fix-system-hunspell-dict-detections.patch b/mail-client/thunderbird/files/1002_fix-system-hunspell-dict-detections.patch
new file mode 100644
index 0000000..5a905aa
--- /dev/null
+++ b/mail-client/thunderbird/files/1002_fix-system-hunspell-dict-detections.patch
@@ -0,0 +1,112 @@
+diff -r e06632956519 mozilla/extensions/spellcheck/Makefile.in
+--- a/mozilla/extensions/spellcheck/Makefile.in Sun Apr 04 07:02:14 2010 +0300
++++ b/mozilla/extensions/spellcheck/Makefile.in Tue Apr 06 23:07:03 2010 -0500
+@@ -42,13 +42,19 @@
+ include $(DEPTH)/config/autoconf.mk
+
+ MODULE = spellchecker
++ifndef MOZ_NATIVE_HUNSPELL
+ DIRS = idl locales
++else
++DIRS = idl
++endif
+
+ ifeq (camino,$(MOZ_BUILD_APP))
+ DIRS += osxspell
+ else
++ifndef MOZ_NATIVE_HUNSPELL
+ DIRS += hunspell
+ endif
++endif
+
+ DIRS += src
+
+diff -r e06632956519 mozilla/extensions/spellcheck/hunspell/src/mozHunspell.cpp
+--- a/mozilla/extensions/spellcheck/hunspell/src/mozHunspell.cpp Sun Apr 04 07:02:14 2010 +0300
++++ b/mozilla/extensions/spellcheck/hunspell/src/mozHunspell.cpp Tue Apr 06 23:07:03 2010 -0500
+@@ -63,6 +63,9 @@
+ #include "nsISimpleEnumerator.h"
+ #include "nsIDirectoryEnumerator.h"
+ #include "nsIFile.h"
++#ifdef MOZ_NATIVE_HUNSPELL
++#include "nsILocalFile.h"
++#endif
+ #include "nsDirectoryServiceUtils.h"
+ #include "nsDirectoryServiceDefs.h"
+ #include "mozISpellI18NManager.h"
+@@ -307,7 +310,16 @@
+ return;
+
+ nsCOMPtr<nsIFile> dictDir;
+- rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY,
++ #ifdef MOZ_NATIVE_HUNSPELL
++ nsCOMPtr<nsILocalFile> localFile;
++ rv = NS_NewNativeLocalFile(nsDependentCString("/usr/share/myspell"),PR_TRUE, getter_AddRefs(localFile));
++ if (localFile && NS_SUCCEEDED(rv)) {
++ localFile->QueryInterface(NS_GET_IID(nsIFile), getter_AddRefs(dictDir));
++ LoadDictionariesFromDir(dictDir);
++ }
++ else {
++ #endif
++ rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY,
+ NS_GET_IID(nsIFile), getter_AddRefs(dictDir));
+ if (NS_SUCCEEDED(rv)) {
+ LoadDictionariesFromDir(dictDir);
+@@ -332,6 +344,9 @@
+ LoadDictionariesFromDir(appDir);
+ }
+ }
++#ifdef MOZ_NATIVE_HUNSPELL
++ }
++#endif
+
+ nsCOMPtr<nsISimpleEnumerator> dictDirs;
+ rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY_LIST,
+diff -r e06632956519 mozilla/extensions/spellcheck/src/Makefile.in
+--- a/mozilla/extensions/spellcheck/src/Makefile.in Sun Apr 04 07:02:14 2010 +0300
++++ b/mozilla/extensions/spellcheck/src/Makefile.in Tue Apr 06 23:07:03 2010 -0500
+@@ -63,9 +63,15 @@
+ txtsvc \
+ uconv \
+ unicharutil \
++ xulapp \
+ $(NULL)
+
+-CPPSRCS = \
++ifdef MOZ_NATIVE_HUNSPELL
++CPPSRCS += mozHunspell.cpp \
++ mozHunspellDirProvider.cpp
++endif
++
++CPPSRCS += \
+ mozSpellCheckerFactory.cpp \
+ mozSpellChecker.cpp \
+ mozPersonalDictionary.cpp \
+@@ -80,8 +86,15 @@
+ SHARED_LIBRARY_LIBS += ../osxspell/src/$(LIB_PREFIX)osxspell_s.$(LIB_SUFFIX)
+ LOCAL_INCLUDES += -I$(srcdir)/../osxspell/src
+ else
++ifndef MOZ_NATIVE_HUNSPELL
+ SHARED_LIBRARY_LIBS += ../hunspell/src/$(LIB_PREFIX)hunspell_s.$(LIB_SUFFIX)
+ LOCAL_INCLUDES += -I$(srcdir)/../hunspell/src
++else
++LOCAL_INCLUDES += $(MOZ_HUNSPELL_CFLAGS) \
++ -I$(srcdir)/../hunspell/src \
++ -DMOZ_NATIVE_HUNSPELL \
++ $(NULL)
++endif
+ endif
+
+ EXTRA_DSO_LDOPTS = \
+@@ -96,3 +109,11 @@
+ LOCAL_INCLUDES += \
+ -I$(topsrcdir)/xpcom/io \
+ $(NULL)
++
++ifdef MOZ_NATIVE_HUNSPELL
++export:: $(srcdir)/../hunspell/src/mozHunspell.cpp $(srcdir)/../hunspell/src/mozHunspellDirProvider.cpp
++ $(INSTALL) $(srcdir)/../hunspell/src/mozHunspell.* $(srcdir)/../hunspell/src/mozHunspellDirProvider.* .
++GARBAGE += mozHunspell.$(OBJ_SUFFIX) mozHunspell.cpp mozHunspellDirProvider.$(OBJ_SUFFIX) mozHunspellDirProvider.cpp
++clean::
++ rm -f mozHunspell.* mozHunspellDirProvider.*
++endif
diff --git a/mail-client/thunderbird/files/2000-thunderbird_gentoo_install_dirs.patch b/mail-client/thunderbird/files/2000-thunderbird_gentoo_install_dirs.patch
new file mode 100644
index 0000000..b3af6f3
--- /dev/null
+++ b/mail-client/thunderbird/files/2000-thunderbird_gentoo_install_dirs.patch
@@ -0,0 +1,22 @@
+diff -ur work.orig/config/autoconf.mk.in work/config/autoconf.mk.in
+--- work.orig/config/autoconf.mk.in 2009-04-28 16:55:24.000000000 +0000
++++ work/config/autoconf.mk.in 2009-04-28 16:57:12.000000000 +0000
+@@ -60,14 +60,14 @@
+ prefix = @prefix@
+ exec_prefix = @exec_prefix@
+ bindir = @bindir@
+-includedir = @includedir@/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
++includedir = @includedir@/thunderbird
+ libdir = @libdir@
+ datadir = @datadir@
+ mandir = @mandir@
+-idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
++idldir = $(datadir)/idl/thunderbird
+
+-installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
+-sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION)
++installdir = $(libdir)/thunderbird
++sdkdir = $(libdir)/thunderbird-devel
+
+ MOZDEPTH = $(DEPTH)/mozilla
+ DIST = $(MOZDEPTH)/dist
diff --git a/mail-client/thunderbird/files/bug-606109.patch b/mail-client/thunderbird/files/bug-606109.patch
new file mode 100644
index 0000000..57d9cd9
--- /dev/null
+++ b/mail-client/thunderbird/files/bug-606109.patch
@@ -0,0 +1,48 @@
+# HG changeset patch
+# User Jory A. Pratt <anarchy@gentoo.org>
+# Parent 74e4421e0a30c6e21b594675e32a8d9d663c309c
+Add missing ifde MOZ_MEDIA
+
+diff --git a/content/base/src/nsContentSink.cpp b/content/base/src/nsContentSink.cpp
+--- a/mozilla/content/base/src/nsContentSink.cpp
++++ b/mozilla/content/base/src/nsContentSink.cpp
+@@ -1860,17 +1860,19 @@ nsIAtom** const kDefaultAllowedTags [] =
+ &nsGkAtoms::nobr,
+ &nsGkAtoms::noscript,
+ &nsGkAtoms::ol,
+ &nsGkAtoms::optgroup,
+ &nsGkAtoms::option,
+ &nsGkAtoms::output,
+ &nsGkAtoms::p,
+ &nsGkAtoms::pre,
++#ifdef MOZ_MEDIA
+ &nsGkAtoms::progress,
++#endif
+ &nsGkAtoms::q,
+ &nsGkAtoms::rp,
+ &nsGkAtoms::rt,
+ &nsGkAtoms::ruby,
+ &nsGkAtoms::s,
+ &nsGkAtoms::samp,
+ &nsGkAtoms::section,
+ &nsGkAtoms::select,
+@@ -1952,17 +1954,19 @@ nsIAtom** const kDefaultAllowedAttribute
+ &nsGkAtoms::itemref,
+ &nsGkAtoms::itemscope,
+ &nsGkAtoms::itemtype,
+ &nsGkAtoms::kind,
+ &nsGkAtoms::label,
+ &nsGkAtoms::lang,
+ &nsGkAtoms::list,
+ &nsGkAtoms::longdesc,
++#ifdef MOZ_MEDIA
+ &nsGkAtoms::loop,
++#endif
+ &nsGkAtoms::low,
+ &nsGkAtoms::max,
+ &nsGkAtoms::maxlength,
+ &nsGkAtoms::media,
+ &nsGkAtoms::min,
+ &nsGkAtoms::mozdonotsend,
+ &nsGkAtoms::method,
+ &nsGkAtoms::multiple,
diff --git a/mail-client/thunderbird/files/cups-1.4.4-fixup.patch b/mail-client/thunderbird/files/cups-1.4.4-fixup.patch
new file mode 100644
index 0000000..a0923e8
--- /dev/null
+++ b/mail-client/thunderbird/files/cups-1.4.4-fixup.patch
@@ -0,0 +1,161 @@
+# HG changeset patch
+# User Matthew Gregan <kinetik@flim.org>
+# Date 1293624205 -3600
+# Node ID ffa1ef8ab52b4081e27aa2b24d14a550386f90db
+# Parent 9e561d402701f46eb56dbadb96b6963f4518cdd0
+Bug 573039 - Construct nsCUPSShim statically and avoid calling PR_UnloadLibrary on libcups after it has been initialized. r=karlt a=clegnitto
+
+diff --git a/mozilla/gfx/src/psshared/nsCUPSShim.cpp b/mozilla/gfx/src/psshared/nsCUPSShim.cpp
+--- a/mozilla/gfx/src/psshared/nsCUPSShim.cpp
++++ b/mozilla/gfx/src/psshared/nsCUPSShim.cpp
+@@ -83,14 +83,8 @@ nsCUPSShim::Init()
+ #endif
+ PR_UnloadLibrary(mCupsLib);
+ mCupsLib = nsnull;
+ return PR_FALSE;
+ }
+ }
+ return PR_TRUE;
+ }
+-
+-nsCUPSShim::~nsCUPSShim()
+-{
+- if (mCupsLib)
+- PR_UnloadLibrary(mCupsLib);
+-}
+diff --git a/mozilla/gfx/src/psshared/nsCUPSShim.h b/mozilla/gfx/src/psshared/nsCUPSShim.h
+--- a/mozilla/gfx/src/psshared/nsCUPSShim.h
++++ b/mozilla/gfx/src/psshared/nsCUPSShim.h
+@@ -81,17 +81,16 @@ typedef int (PR_CALLBACK *CupsAddOptionT
+ int num_options,
+ cups_option_t **options);
+
+ struct PRLibrary;
+
+ class NS_PSSHARED nsCUPSShim {
+ public:
+ nsCUPSShim() : mCupsLib(nsnull) { }
+- ~nsCUPSShim();
+
+ /**
+ * Initialize this object. Attempt to load the CUPS shared
+ * library and find function pointers for the supported
+ * functions (see below).
+ * @return PR_FALSE if the shared library could not be loaded, or if
+ * any of the functions could not be found.
+ * PR_TRUE for successful initialization.
+diff --git a/mozilla/gfx/src/psshared/nsPSPrinters.cpp b/mozilla/gfx/src/psshared/nsPSPrinters.cpp
+--- a/mozilla/gfx/src/psshared/nsPSPrinters.cpp
++++ b/mozilla/gfx/src/psshared/nsPSPrinters.cpp
+@@ -51,32 +51,34 @@
+ #include "plstr.h"
+
+ #define NS_CUPS_PRINTER "CUPS/"
+ #define NS_CUPS_PRINTER_LEN (sizeof(NS_CUPS_PRINTER) - 1)
+
+ /* dummy printer name for the gfx/src/ps driver */
+ #define NS_POSTSCRIPT_DRIVER_NAME "PostScript/"
+
++nsCUPSShim gCupsShim;
++
+ /* Initialize the printer manager object */
+ nsresult
+ nsPSPrinterList::Init()
+ {
+ nsresult rv;
+
+ mPrefSvc = do_GetService(NS_PREFSERVICE_CONTRACTID, &rv);
+ if (NS_SUCCEEDED(rv))
+ rv = mPrefSvc->GetBranch("print.", getter_AddRefs(mPref));
+ NS_ENSURE_SUCCESS(rv, NS_ERROR_NOT_INITIALIZED);
+
+ // Should we try cups?
+ PRBool useCups = PR_TRUE;
+ rv = mPref->GetBoolPref("postscript.cups.enabled", &useCups);
+- if (useCups)
+- mCups.Init();
++ if (useCups && !gCupsShim.IsInitialized())
++ gCupsShim.Init();
+ return NS_OK;
+ }
+
+
+ /* Check whether the PostScript module has been disabled at runtime */
+ PRBool
+ nsPSPrinterList::Enabled()
+ {
+@@ -94,35 +96,35 @@ nsPSPrinterList::Enabled()
+ /* Fetch a list of printers handled by the PostsScript module */
+ void
+ nsPSPrinterList::GetPrinterList(nsTArray<nsCString>& aList)
+ {
+ aList.Clear();
+
+ // Query CUPS for a printer list. The default printer goes to the
+ // head of the output list; others are appended.
+- if (mCups.IsInitialized()) {
++ if (gCupsShim.IsInitialized()) {
+ cups_dest_t *dests;
+
+- int num_dests = (mCups.mCupsGetDests)(&dests);
++ int num_dests = (gCupsShim.mCupsGetDests)(&dests);
+ if (num_dests) {
+ for (int i = 0; i < num_dests; i++) {
+ nsCAutoString fullName(NS_CUPS_PRINTER);
+ fullName.Append(dests[i].name);
+ if (dests[i].instance != NULL) {
+ fullName.Append("/");
+ fullName.Append(dests[i].instance);
+ }
+ if (dests[i].is_default)
+ aList.InsertElementAt(0, fullName);
+ else
+ aList.AppendElement(fullName);
+ }
+ }
+- (mCups.mCupsFreeDests)(num_dests, dests);
++ (gCupsShim.mCupsFreeDests)(num_dests, dests);
+ }
+
+ // Build the "classic" list of printers -- those accessed by running
+ // an opaque command. This list always contains a printer named "default".
+ // In addition, we look for either an environment variable
+ // MOZILLA_POSTSCRIPT_PRINTER_LIST or a preference setting
+ // print.printer_list, which contains a space-separated list of printer
+ // names.
+diff --git a/mozilla/gfx/src/psshared/nsPSPrinters.h b/mozilla/gfx/src/psshared/nsPSPrinters.h
+--- a/mozilla/gfx/src/psshared/nsPSPrinters.h
++++ b/mozilla/gfx/src/psshared/nsPSPrinters.h
+@@ -37,17 +37,16 @@
+ * ***** END LICENSE BLOCK ***** */
+
+ #ifndef nsPSPrinters_h___
+ #define nsPSPrinters_h___
+
+ #include "nsString.h"
+ #include "nsTArray.h"
+ #include "prtypes.h"
+-#include "nsCUPSShim.h"
+ #include "psSharedCore.h"
+
+ class nsIPrefService;
+ class nsIPrefBranch;
+ class nsCUPSShim;
+
+ class NS_PSSHARED nsPSPrinterList {
+ public:
+@@ -91,12 +90,11 @@ class NS_PSSHARED nsPSPrinterList {
+ * the <type> portion as described for GetPrinterList().
+ * @return The PrinterType value for this name.
+ */
+ static PrinterType GetPrinterType(const nsACString& aName);
+
+ private:
+ nsCOMPtr<nsIPrefService> mPrefSvc;
+ nsCOMPtr<nsIPrefBranch> mPref;
+- nsCUPSShim mCups;
+ };
+
+ #endif /* nsPSPrinters_h___ */
+
+
diff --git a/mail-client/thunderbird/files/enigmail-1.1.2-20110124-locale-fixup.diff b/mail-client/thunderbird/files/enigmail-1.1.2-20110124-locale-fixup.diff
new file mode 100644
index 0000000..e5e52f1
--- /dev/null
+++ b/mail-client/thunderbird/files/enigmail-1.1.2-20110124-locale-fixup.diff
@@ -0,0 +1,8 @@
+--- enigmail/lang/current-languages.txt
++++ enigmail/lang/current-languages.txt
+@@ -1,5 +1,4 @@
+ ar
+-bg-BG
+ ca
+ cs-CZ
+ de-AT
diff --git a/mail-client/thunderbird/files/icon/thunderbird-icon-unbranded.png b/mail-client/thunderbird/files/icon/thunderbird-icon-unbranded.png
new file mode 100644
index 0000000..27265e0
--- /dev/null
+++ b/mail-client/thunderbird/files/icon/thunderbird-icon-unbranded.png
Binary files differ
diff --git a/mail-client/thunderbird/files/icon/thunderbird-icon.png b/mail-client/thunderbird/files/icon/thunderbird-icon.png
new file mode 100644
index 0000000..90ff395
--- /dev/null
+++ b/mail-client/thunderbird/files/icon/thunderbird-icon.png
Binary files differ
diff --git a/mail-client/thunderbird/files/icon/thunderbird-unbranded.desktop b/mail-client/thunderbird/files/icon/thunderbird-unbranded.desktop
new file mode 100644
index 0000000..90c02da
--- /dev/null
+++ b/mail-client/thunderbird/files/icon/thunderbird-unbranded.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Name=Mozilla Thunderbird
+Comment=Mail & News Reader
+Exec=/usr/bin/thunderbird
+Icon=thunderbird-icon-unbranded
+Terminal=false
+Type=Application
+Categories=Office;Email;
diff --git a/mail-client/thunderbird/files/icon/thunderbird.desktop b/mail-client/thunderbird/files/icon/thunderbird.desktop
new file mode 100644
index 0000000..b696085
--- /dev/null
+++ b/mail-client/thunderbird/files/icon/thunderbird.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Name=Mozilla Thunderbird
+Comment=Mail & News Reader
+Exec=/usr/bin/thunderbird
+Icon=thunderbird-icon
+Terminal=false
+Type=Application
+Categories=Office;Email;
diff --git a/mail-client/thunderbird/files/libnotify-0.7.patch b/mail-client/thunderbird/files/libnotify-0.7.patch
new file mode 100644
index 0000000..ab363a2
--- /dev/null
+++ b/mail-client/thunderbird/files/libnotify-0.7.patch
@@ -0,0 +1,56 @@
+# HG changeset patch
+# User Priit Laes <plaes@plaes.org>
+# Parent 194dd9a57615185c998a87148fac65df51600758
+Bug 628222 - Add support for libnotify-0.7+. r=karlt
+
+diff --git a/mozilla/toolkit/system/gnome/nsAlertsIconListener.cpp b/mozilla/toolkit/system/gnome/nsAlertsIconListener.cpp
+--- a/mozilla/toolkit/system/gnome/nsAlertsIconListener.cpp
++++ b/mozilla/toolkit/system/gnome/nsAlertsIconListener.cpp
+@@ -42,16 +42,21 @@
+ #include "nsNetUtil.h"
+ #include "nsIImageToPixbuf.h"
+ #include "nsIStringBundle.h"
+
+ #include <gdk-pixbuf/gdk-pixbuf.h>
+ #include <libnotify/notify.h>
+ #include <gdk/gdk.h>
+
++// Compatibility macro for <libnotify-0.7
++#ifndef NOTIFY_CHECK_VERSION
++#define NOTIFY_CHECK_VERSION(x,y,z) 0
++#endif
++
+ static PRBool gHasActions = PR_FALSE;
+
+ static void notify_action_cb(NotifyNotification *notification,
+ gchar *action, gpointer user_data)
+ {
+ nsAlertsIconListener* alert = static_cast<nsAlertsIconListener*> (user_data);
+ alert->SendCallback();
+ }
+@@ -199,17 +204,23 @@ nsAlertsIconListener::OnStopFrame(imgIRe
+ return NS_OK;
+ }
+
+ nsresult
+ nsAlertsIconListener::ShowAlert(GdkPixbuf* aPixbuf)
+ {
+ NotifyNotification* notify = notify_notification_new(mAlertTitle.get(),
+ mAlertText.get(),
+- NULL, NULL);
++ NULL
++// >=libnotify-0.7.0 has no support for attaching to widgets
++#if !NOTIFY_CHECK_VERSION(0,7,0)
++ , NULL
++#endif
++ );
++
+ if (!notify)
+ return NS_ERROR_OUT_OF_MEMORY;
+
+ if (aPixbuf)
+ notify_notification_set_icon_from_pixbuf(notify, aPixbuf);
+
+ NS_ADDREF(this);
+ if (mAlertHasAction) {
+
diff --git a/mail-client/thunderbird/files/thunderbird-3.1-gcc45.patch b/mail-client/thunderbird/files/thunderbird-3.1-gcc45.patch
new file mode 100644
index 0000000..0757854
--- /dev/null
+++ b/mail-client/thunderbird/files/thunderbird-3.1-gcc45.patch
@@ -0,0 +1,37 @@
+http://bugs.gentoo.org/324863
+
+Fix buffer overflow with GCC 4.5 and -U_FORTIFY_SOURCE=2
+
+Patch by Harald van Dijk
+
+--- comm-1.9.2/mozilla/extensions/spellcheck/hunspell/src/hashmgr.cpp
++++ comm-1.9.2/mozilla/extensions/spellcheck/hunspell/src/hashmgr.cpp
+@@ -187,7 +187,7 @@
+ struct hentry* hp =
+ (struct hentry *) malloc (sizeof(struct hentry) + wbl + descl);
+ if (!hp) return 1;
+- char * hpw = &(hp->word);
++ char * hpw = HENTRY_WORD(hp);
+ strcpy(hpw, word);
+ if (ignorechars != NULL) {
+ if (utf8) {
+--- comm-1.9.2/mozilla/extensions/spellcheck/hunspell/src/htypes.hxx
++++ comm-1.9.2/mozilla/extensions/spellcheck/hunspell/src/htypes.hxx
+@@ -57,6 +57,8 @@
+ #ifndef _HTYPES_HXX_
+ #define _HTYPES_HXX_
+
++#include <cstddef>
++
+ #define ROTATE_LEN 5
+
+ #define ROTATE(v,q) \
+@@ -68,7 +70,7 @@
+ #define H_OPT_PHON (1 << 2)
+
+ // see also csutil.hxx
+-#define HENTRY_WORD(h) &(h->word)
++#define HENTRY_WORD(h) ((char *) h + offsetof(struct hentry, word))
+
+ // approx. number of user defined words
+ #define USERWORD 1000
diff --git a/mail-client/thunderbird/files/thunderbird-3.1-noalsa-fixup.patch b/mail-client/thunderbird/files/thunderbird-3.1-noalsa-fixup.patch
new file mode 100644
index 0000000..5d60b7b
--- /dev/null
+++ b/mail-client/thunderbird/files/thunderbird-3.1-noalsa-fixup.patch
@@ -0,0 +1,26 @@
+diff -urN comm-central-orig/mozilla/content/base/src/nsDocument.cpp comm-central/mozilla/content/base/src/nsDocument.cpp
+--- comm-central-orig/mozilla/content/base/src/nsDocument.cpp 2010-01-28 22:16:08.683135912 -0600
++++ comm-central/mozilla/content/base/src/nsDocument.cpp 2010-01-28 22:17:57.605126833 -0600
+@@ -169,7 +169,9 @@
+ #include "nsIPropertyBag2.h"
+ #include "nsIDOMPageTransitionEvent.h"
+ #include "nsFrameLoader.h"
++#ifdef MOZ_MEDIA
+ #include "nsHTMLMediaElement.h"
++#endif
+
+ #include "mozAutoDocUpdate.h"
+
+diff -urN comm-central-orig/mozilla/content/base/src/nsNodeUtils.cpp comm-central/mozilla/content/base/src/nsNodeUtils.cpp
+--- comm-central-orig/mozilla/content/base/src/nsNodeUtils.cpp 2010-01-28 22:16:08.686138846 -0600
++++ comm-central/mozilla/content/base/src/nsNodeUtils.cpp 2010-01-28 22:17:14.618150370 -0600
+@@ -55,7 +55,9 @@
+ #endif
+ #include "nsBindingManager.h"
+ #include "nsGenericHTMLElement.h"
++#ifdef MOZ_MEDIA
+ #include "nsHTMLMediaElement.h"
++#endif
+
+ // This macro expects the ownerDocument of content_ to be in scope as
+ // |nsIDocument* doc|
diff --git a/mail-client/thunderbird/files/thunderbird-3.3-gconf-config-update.patch b/mail-client/thunderbird/files/thunderbird-3.3-gconf-config-update.patch
new file mode 100644
index 0000000..8bb7237
--- /dev/null
+++ b/mail-client/thunderbird/files/thunderbird-3.3-gconf-config-update.patch
@@ -0,0 +1,50 @@
+diff --git a/configure.in b/configure.in
+--- a/configure.in
++++ b/configure.in
+@@ -5031,16 +5031,21 @@ then
+ fi
+ MOZ_ENABLE_GIO=
+ ])
+ fi
+
+ dnl ========================================================
+ dnl = GConf support module
+ dnl ========================================================
++ MOZ_ARG_DISABLE_BOOL(gconf,
++ [ --disable-gconf Disable Gconf support ],
++ MOZ_ENABLE_GCONF=,
++ MOZ_ENABLE_GCONF=force)
++
+ if test "$MOZ_ENABLE_GCONF"
+ then
+ PKG_CHECK_MODULES(MOZ_GCONF, gconf-2.0 >= $GCONF_VERSION gobject-2.0 ,[
+ MOZ_ENABLE_GCONF=1
+ ],[
+ MOZ_ENABLE_GCONF=
+ ])
+ fi
+diff --git a/mozilla/configure.in b/mozilla/configure.in
+--- a/mozilla/configure.in
++++ b/mozilla/configure.in
+@@ -5701,16 +5701,21 @@ then
+
+ AC_SUBST(MOZ_ENABLE_GIO)
+ AC_SUBST(MOZ_GIO_CFLAGS)
+ AC_SUBST(MOZ_GIO_LIBS)
+
+ dnl ========================================================
+ dnl = GConf support module
+ dnl ========================================================
++ MOZ_ARG_DISABLE_BOOL(gconf,
++ [ --disable-gconf Disable Gconf support ],
++ MOZ_ENABLE_GCONF=,
++ MOZ_ENABLE_GCONF=force)
++
+ if test "$MOZ_ENABLE_GCONF"
+ then
+ PKG_CHECK_MODULES(MOZ_GCONF, gconf-2.0 >= $GCONF_VERSION gobject-2.0 ,[
+ MOZ_GCONF_LIBS=`echo $MOZ_GCONF_LIBS | sed 's/-llinc\>//'`
+ MOZ_ENABLE_GCONF=1
+ ],[
+ if test "$MOZ_ENABLE_GCONF" = "force"
+ then
diff --git a/mail-client/thunderbird/files/thunderbird-gentoo-default-prefs-1.js b/mail-client/thunderbird/files/thunderbird-gentoo-default-prefs-1.js
new file mode 100644
index 0000000..7323bd7
--- /dev/null
+++ b/mail-client/thunderbird/files/thunderbird-gentoo-default-prefs-1.js
@@ -0,0 +1,9 @@
+pref("app.update.enabled", false);
+pref("app.update.autoInstallEnabled", false);
+pref("browser.display.use_system_colors", true);
+pref("intl.locale.matchOS", true);
+pref("mail.shell.checkDefaultClient", false);
+
+# Do not switch to Smart Folders after upgrade to 3.0b4
+pref("mail.folder.views.version", "1");
+
diff --git a/mail-client/thunderbird/files/thunderbird-gentoo-default-prefs.js b/mail-client/thunderbird/files/thunderbird-gentoo-default-prefs.js
new file mode 100644
index 0000000..38bb11c
--- /dev/null
+++ b/mail-client/thunderbird/files/thunderbird-gentoo-default-prefs.js
@@ -0,0 +1,14 @@
+pref("app.update.enabled", false);
+pref("app.update.autoInstallEnabled", false);
+pref("browser.display.use_system_colors", true);
+pref("intl.locale.matchOS", true);
+pref("mail.shell.checkDefaultClient", false);
+
+# Disable global indexing by default
+pref("mailnews.database.global.indexer.enabled", false);
+
+# Do not switch to Smart Folders after upgrade to 3.0b4
+pref("mail.folder.views.version", "1");
+
+# Ensure we work with imap as expected
+pref("mail.server.default.use_condstore", false)
diff --git a/mail-client/thunderbird/files/thunderbird-respect-ldflags.patch b/mail-client/thunderbird/files/thunderbird-respect-ldflags.patch
new file mode 100644
index 0000000..c35ec64
--- /dev/null
+++ b/mail-client/thunderbird/files/thunderbird-respect-ldflags.patch
@@ -0,0 +1,28 @@
+--- a/directory/c-sdk/build.mk 2010-12-11 08:46:14.137000000 -0600
++++ b/directory/c-sdk/build.mk 2010-12-11 08:46:17.443000000 -0600
+@@ -488,21 +488,21 @@
+ LINK_LIB2 = $(RM) $@; $(AR) $@ $(OBJS2); $(RANLIB) $@
+ ifneq ($(LD),$(CC))
+ ifdef SONAMEFLAG_PREFIX
+-LINK_DLL = $(LD) $(DSO_LDOPTS) $(LDRPATHFLAG_PREFIX)$(RPATHFLAG) $(ALDFLAGS) \
++LINK_DLL = $(LD) $(DSO_LDOPTS) $(LDRPATHFLAG_PREFIX)$(RPATHFLAG) $(ALDFLAGS) $(OS_LDFLAGS)\
+ $(DLL_LDFLAGS) $(DLL_EXPORT_FLAGS) \
+ -o $@ $(SONAMEFLAG_PREFIX)$(notdir $@) $(OBJS)
+ else # SONAMEFLAG_PREFIX
+-LINK_DLL = $(LD) $(DSO_LDOPTS) $(LDRPATHFLAG_PREFIX)$(RPATHFLAG) $(ALDFLAGS) \
++LINK_DLL = $(LD) $(DSO_LDOPTS) $(LDRPATHFLAG_PREFIX)$(RPATHFLAG) $(ALDFLAGS) $(OS_LDFLAGS)\
+ $(DLL_LDFLAGS) $(DLL_EXPORT_FLAGS) \
+ -o $@ $(OBJS)
+ endif # SONAMEFLAG_PREFIX
+ else # $(CC) is used to link libs
+ ifdef SONAMEFLAG_PREFIX
+-LINK_DLL = $(LD) $(DSO_LDOPTS) $(RPATHFLAG_PREFIX)$(RPATHFLAG) $(ALDFLAGS) \
++LINK_DLL = $(LD) $(DSO_LDOPTS) $(RPATHFLAG_PREFIX)$(RPATHFLAG) $(ALDFLAGS) $(OS_LDFLAGS)\
+ $(DLL_LDFLAGS) $(DLL_EXPORT_FLAGS) \
+ -o $@ $(SONAMEFLAG_PREFIX)$(notdir $@) $(OBJS)
+ else # SONAMEFLAG_PREFIX
+-LINK_DLL = $(LD) $(DSO_LDOPTS) $(RPATHFLAG_PREFIX)$(RPATHFLAG) $(ALDFLAGS) \
++LINK_DLL = $(LD) $(DSO_LDOPTS) $(RPATHFLAG_PREFIX)$(RPATHFLAG) $(ALDFLAGS) $(OS_LDFLAGS)\
+ $(DLL_LDFLAGS) $(DLL_EXPORT_FLAGS) \
+ -o $@ $(OBJS)
+ endif # SONAMEFLAG_PREFIX
diff --git a/mail-client/thunderbird/files/thunderbird-xul-1.9.2-arm-fixes.patch b/mail-client/thunderbird/files/thunderbird-xul-1.9.2-arm-fixes.patch
new file mode 100644
index 0000000..c7d7a65
--- /dev/null
+++ b/mail-client/thunderbird/files/thunderbird-xul-1.9.2-arm-fixes.patch
@@ -0,0 +1,35 @@
+Fix arm OS detection
+
+https://bugs.gentoo.org/327783
+https://bugzilla.mozilla.org/show_bug.cgi?id=577319
+---
+--- configure.in
++++ configure.in
+@@ -1424,9 +1424,11 @@
+ CPU_ARCH="$OS_TEST"
+ ;;
+
+-arm)
++arm*)
+ if test "$OS_TARGET" = "WINCE"; then
+ CPU_ARCH="$OS_TEST"
++ else
++ CPU_ARCH="arm"
+ fi
+ ;;
+ esac
+--- mozilla/js/src/configure.in
++++ mozilla/js/src/configure.in
+@@ -1162,9 +1162,11 @@
+ CPU_ARCH="$OS_TEST"
+ ;;
+
+-arm)
++arm*)
+ if test "$OS_TARGET" = "WINCE"; then
+ CPU_ARCH="$OS_TEST"
++ else
++ CPU_ARCH="arm"
+ fi
+ ;;
+ esac
diff --git a/mail-client/thunderbird/files/xulrunner-1.9.2-gtk+-2.21.patch b/mail-client/thunderbird/files/xulrunner-1.9.2-gtk+-2.21.patch
new file mode 100644
index 0000000..fb414e6
--- /dev/null
+++ b/mail-client/thunderbird/files/xulrunner-1.9.2-gtk+-2.21.patch
@@ -0,0 +1,23 @@
+# HG changeset patch
+# User Jonathan Callen <abcd@gentoo.org>
+# Parent 2599ed882191d88a8e8f0cb68492a156163c5ca7
+pass MOZ_GTK_CFLAGS to ensure proper includes are avaliable.
+
+diff --git a/toolkit/system/gnome/Makefile.in b/toolkit/system/gnome/Makefile.in
+--- a/mozilla/toolkit/system/gnome/Makefile.in
++++ b/mozilla/toolkit/system/gnome/Makefile.in
+@@ -84,13 +84,14 @@ EXTRA_DSO_LDOPTS += \
+ $(MOZ_LIBNOTIFY_LIBS) \
+ $(NULL)
+
+ LOCAL_INCLUDES += -I$(topsrcdir)/toolkit/components/build/
+
+ include $(topsrcdir)/config/rules.mk
+
+ CXXFLAGS += \
++ $(MOZ_GTK2_CFLAGS) \
+ $(MOZ_GCONF_CFLAGS) \
+ $(MOZ_GNOMEVFS_CFLAGS) \
+ $(GLIB_CFLAGS) \
+ $(MOZ_LIBNOTIFY_CFLAGS) \
+ $(NULL)
diff --git a/mail-client/thunderbird/metadata.xml b/mail-client/thunderbird/metadata.xml
new file mode 100644
index 0000000..4322881
--- /dev/null
+++ b/mail-client/thunderbird/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<herd>mozilla</herd>
+<use>
+ <flag name='mozdom'>Enable Mozilla's DOM inspector</flag>
+ <flag name='lightning'>Enable calendar support</flag>
+ <flag name='custom-optimization'>Enable user CFLAGS</flag>
+ <flag name='system-sqlite'>Use the system-wide <pkg>dev-db/sqlite</pkg>
+ installation with secure-delete enabled</flag>
+ <flag name="ipc">Use inter-process communication between tabs and plugins.
+ Allows for greater stability in case of plugin crashes</flag>
+ <flag name="crashreporter">Enable crash reporter for bugs</flag>
+ <flag name="gconf">Enable gnome2 gconf support</flag>
+</use>
+</pkgmetadata>
diff --git a/mail-client/thunderbird/thunderbird-3.1.10-r1.ebuild b/mail-client/thunderbird/thunderbird-3.1.10-r1.ebuild
new file mode 100644
index 0000000..47c2514
--- /dev/null
+++ b/mail-client/thunderbird/thunderbird-3.1.10-r1.ebuild
@@ -0,0 +1,266 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/mail-client/thunderbird/thunderbird-3.1.10.ebuild,v 1.4 2011/05/01 16:52:32 phajdan.jr Exp $
+
+EAPI="3"
+WANT_AUTOCONF="2.1"
+
+inherit flag-o-matic toolchain-funcs eutils mozconfig-3 makeedit multilib mozextension autotools python pax-utils
+
+# This list can be updated using get_langs.sh from the mozilla overlay
+LANGS="af ar be bg bn-BD ca cs da de el en en-GB en-US es-AR es-ES et eu fi fr \
+fy-NL ga-IE he hu id is it ja ko lt nb-NO nl nn-NO pa-IN pl pt-BR pt-PT ro ru si \
+sk sl sq sv-SE tr uk zh-CN zh-TW"
+NOSHORTLANGS="en-GB es-AR pt-BR zh-TW"
+
+MY_PV="${PV/_rc/rc}"
+MY_P="${P/_rc/rc}"
+
+DESCRIPTION="Thunderbird Mail Client"
+HOMEPAGE="http://www.mozilla.com/en-US/thunderbird/"
+
+KEYWORDS="~alpha ~amd64 ~arm ~ia64 ppc ppc64 ~sparc x86 ~x86-fbsd ~amd64-linux ~x86-linux"
+SLOT="0"
+LICENSE="|| ( MPL-1.1 GPL-2 LGPL-2.1 )"
+IUSE="+alsa ldap +crypt bindist gnome libnotify +lightning mozdom system-sqlite wifi"
+PATCH="${PN}-3.1-patches-1.2"
+
+REL_URI="http://releases.mozilla.org/pub/mozilla.org/${PN}/releases"
+SRC_URI="${REL_URI}/${MY_PV}/source/${MY_P}.source.tar.bz2
+ http://dev.gentoo.org/~anarchy/mozilla/patchsets/${PATCH}.tar.bz2"
+
+for X in ${LANGS} ; do
+ if [ "${X}" != "en" ] && [ "${X}" != "en-US" ]; then
+ SRC_URI="${SRC_URI}
+ linguas_${X/-/_}? ( ${REL_URI}/${MY_PV}/linux-i686/xpi/${X}.xpi -> ${P}-${X}.xpi )"
+ fi
+ IUSE="${IUSE} linguas_${X/-/_}"
+ # english is handled internally
+ if [ "${#X}" == 5 ] && ! has ${X} ${NOSHORTLANGS}; then
+ if [ "${X}" != "en-US" ]; then
+ SRC_URI="${SRC_URI}
+ linguas_${X%%-*}? ( ${REL_URI}/${MY_PV}/linux-i686/xpi/${X}.xpi -> ${P}-${X}.xpi )"
+ fi
+ IUSE="${IUSE} linguas_${X%%-*}"
+ fi
+done
+
+RDEPEND=">=sys-devel/binutils-2.16.1
+ >=dev-libs/nss-3.12.8
+ >=dev-libs/nspr-4.8.6
+ >=app-text/hunspell-1.2
+ x11-libs/cairo[X]
+ x11-libs/pango[X]
+ alsa? ( media-libs/alsa-lib )
+ gnome? ( >=gnome-base/gnome-vfs-2.16.3
+ >=gnome-base/libgnomeui-2.16.1
+ >=gnome-base/gconf-2.16.0
+ >=gnome-base/libgnome-2.16.0 )
+ libnotify? ( >=x11-libs/libnotify-0.4 )
+ system-sqlite? ( >=dev-db/sqlite-3.7.1[fts3,secure-delete,threadsafe] )
+ wifi? ( net-wireless/wireless-tools )
+ !x11-plugins/lightning"
+
+DEPEND="${RDEPEND}
+ =dev-lang/python-2*[threads]"
+
+PDEPEND="crypt? ( >=x11-plugins/enigmail-1.1 )"
+
+S="${WORKDIR}"/comm-1.9.2
+
+linguas() {
+ local LANG SLANG
+ for LANG in ${LINGUAS}; do
+ if has ${LANG} en en_US; then
+ has en ${linguas} || linguas="${linguas:+"${linguas} "}en"
+ continue
+ elif has ${LANG} ${LANGS//-/_}; then
+ has ${LANG//_/-} ${linguas} || linguas="${linguas:+"${linguas} "}${LANG//_/-}"
+ continue
+ elif [[ " ${LANGS} " == *" ${LANG}-"* ]]; then
+ for X in ${LANGS}; do
+ if [[ "${X}" == "${LANG}-"* ]] && \
+ [[ " ${NOSHORTLANGS} " != *" ${X} "* ]]; then
+ has ${X} ${linguas} || linguas="${linguas:+"${linguas} "}${X}"
+ continue 2
+ fi
+ done
+ fi
+ ewarn "Sorry, but ${PN} does not support the ${LANG} LINGUA"
+ done
+}
+
+pkg_setup() {
+ export BUILD_OFFICIAL=1
+ export MOZILLA_OFFICIAL=1
+ export ALDFLAGS=${LDFLAGS}
+
+ if ! use bindist; then
+ elog "You are enabling official branding. You may not redistribute this build"
+ elog "to any users on your network or the internet. Doing so puts yourself into"
+ elog "a legal problem with Mozilla Foundation"
+ elog "You can disable it by emerging ${PN} _with_ the bindist USE-flag"
+ fi
+
+ python_set_active_version 2
+}
+
+src_unpack() {
+ unpack ${A}
+
+ linguas
+ for X in ${linguas}; do
+ # FIXME: Add support for unpacking xpis to portage
+ [[ ${X} != "en" ]] && xpi_unpack "${P}-${X}.xpi"
+ done
+ if [[ ${linguas} != "" && ${linguas} != "en" ]]; then
+ einfo "Selected language packs (first will be default): ${linguas}"
+ fi
+}
+
+src_prepare() {
+ # Apply our patches
+ EPATCH_EXCLUDE="1002-fix_hunspell_double_buffer.patch" \
+ EPATCH_SUFFIX="patch" \
+ EPATCH_FORCE="yes" \
+ epatch "${WORKDIR}"
+
+ epatch "${FILESDIR}/bug-606109.patch"
+
+ # Allow user to apply any additional patches without modifing ebuild
+ epatch_user
+
+ eautoreconf
+
+ cd mozilla
+ eautoreconf
+ cd js/src
+ eautoreconf
+}
+
+src_configure() {
+ declare MOZILLA_FIVE_HOME="/usr/$(get_libdir)/${PN}"
+ MEXTENSIONS="default"
+
+ ####################################
+ #
+ # mozconfig, CFLAGS and CXXFLAGS setup
+ #
+ ####################################
+
+ touch mail/config/mozconfig
+ mozconfig_init
+ mozconfig_config
+
+ # It doesn't compile on alpha without this LDFLAGS
+ use alpha && append-ldflags "-Wl,--no-relax"
+
+ mozconfig_annotate '' --enable-crypto
+ mozconfig_annotate '' --enable-extensions="${MEXTENSIONS}"
+ mozconfig_annotate '' --enable-application=mail
+ mozconfig_annotate '' --with-default-mozilla-five-home="${EPREFIX}${MOZILLA_FIVE_HOME}"
+ mozconfig_annotate '' --with-user-appdir=.thunderbird
+ mozconfig_annotate '' --with-system-nspr --with-nspr-prefix="${EPREFIX}"/usr
+ mozconfig_annotate '' --with-system-nss --with-nss-prefix="${EPREFIX}"/usr
+ mozconfig_annotate '' --with-sqlite-prefix="${EPREFIX}"/usr
+ mozconfig_annotate '' --x-includes="${EPREFIX}"/usr/include --x-libraries="${EPREFIX}"/usr/$(get_libdir)
+ mozconfig_annotate 'broken' --disable-crashreporter
+ mozconfig_annotate '' --enable-system-hunspell
+
+ # Use enable features
+ mozconfig_use_enable ldap
+ mozconfig_use_enable ldap ldap-experimental
+ mozconfig_use_enable gnome gnomevfs
+ mozconfig_use_enable gnome gnomeui
+ mozconfig_use_enable libnotify
+ mozconfig_use_enable lightning calendar
+ mozconfig_use_enable wifi necko-wifi
+ mozconfig_use_enable system-sqlite
+ mozconfig_use_enable !bindist official-branding
+ mozconfig_use_enable alsa ogg
+ mozconfig_use_enable alsa wave
+
+ # Bug #72667
+ if use mozdom; then
+ MEXTENSIONS="${MEXTENSIONS},inspector"
+ fi
+
+ # Finalize and report settings
+ mozconfig_final
+
+ ####################################
+ #
+ # Configure and build
+ #
+ ####################################
+
+ # Disable no-print-directory
+ MAKEOPTS=${MAKEOPTS/--no-print-directory/}
+
+ if [[ $(gcc-major-version) -lt 4 ]]; then
+ append-cxxflags -fno-stack-protector
+ fi
+
+ CPPFLAGS="${CPPFLAGS}" \
+ CC="$(tc-getCC)" CXX="$(tc-getCXX)" LD="$(tc-getLD)" \
+ econf || die
+}
+
+src_compile() {
+ # Should the build use multiprocessing? Not enabled by default, as it tends to break
+ [ "${WANT_MP}" = "true" ] && jobs=${MAKEOPTS} || jobs="-j1"
+ emake ${jobs} || die
+}
+
+src_install() {
+ declare MOZILLA_FIVE_HOME="/usr/$(get_libdir)/${PN}"
+
+ emake DESTDIR="${D}" install || die "emake install failed"
+
+ if use lightning ; then
+ declare emid emd1 emid2
+
+ emid="{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}"
+ dodir ${MOZILLA_FIVE_HOME}/extensions/${emid}
+ cd "${ED}"${MOZILLA_FIVE_HOME}/extensions/${emid}
+ unzip "${S}"/mozilla/dist/xpi-stage/gdata-provider.xpi
+
+ emid1="calendar-timezones@mozilla.org"
+ dodir ${MOZILLA_FIVE_HOME}/extensions/${emid1}
+ cd "${ED}"${MOZILLA_FIVE_HOME}/extensions/${emid1}
+ unzip "${S}"/mozilla/dist/xpi-stage/calendar-timezones.xpi
+
+ emid2="{e2fda1a4-762b-4020-b5ad-a41df1933103}"
+ dodir ${MOZILLA_FIVE_HOME}/extensions/${emid2}
+ cd "${ED}"${MOZILLA_FIVE_HOME}/extensions/${emid2}
+ unzip "${S}"/mozilla/dist/xpi-stage/lightning.xpi
+ fi
+
+ linguas
+ for X in ${linguas}; do
+ [[ ${X} != "en" ]] && xpi_install "${WORKDIR}"/"${P}-${X}"
+ done
+
+ if ! use bindist; then
+ newicon "${S}"/other-licenses/branding/thunderbird/content/icon48.png thunderbird-icon.png
+ domenu "${FILESDIR}"/icon/${PN}.desktop
+ else
+ newicon "${S}"/mail/branding/unofficial/content/icon48.png thunderbird-icon-unbranded.png
+ newmenu "${FILESDIR}"/icon/${PN}-unbranded.desktop \
+ ${PN}.desktop
+
+ sed -i -e "s:Mozilla\ Thunderbird:Lanikai:g" \
+ "${D}"/usr/share/applications/${PN}.desktop
+
+ fi
+
+ # Warn user that remerging enigmail is neccessary on USE=crypt
+ use crypt && ewarn "Please remerge x11-plugins/enigmail after updating ${PN}."
+
+ # Enable very specific settings for thunderbird-3
+ cp "${FILESDIR}"/thunderbird-gentoo-default-prefs-1.js \
+ "${ED}/${MOZILLA_FIVE_HOME}/defaults/pref/all-gentoo.js" || \
+ die "failed to cp thunderbird-gentoo-default-prefs.js"
+
+ pax-mark m "${ED}"/${MOZILLA_FIVE_HOME}/thunderbird-bin
+}
diff --git a/media-libs/jackcpp/Manifest b/media-libs/jackcpp/Manifest
new file mode 100644
index 0000000..ebae6d2
--- /dev/null
+++ b/media-libs/jackcpp/Manifest
@@ -0,0 +1,2 @@
+AUX destdir.patch 643 SHA256 afe9ca5a3d411b915ac6810a1aa565df2283d67b7c5ecf0f40e8188ad1efce3d SHA512 6aefa2074fbd0b610dcd663e3c90c59c0ee3ec00b63beea4c24f93b80b5c0a32198c5179c1d282c2096616e59a8e70b5380c9795152d22b88bbf7d7dfb60557a WHIRLPOOL 652b084b20c32d3400254df69e2bdff5abae2c68be023bddf2e5f4514ef65d96a0568c659b63109d5285cc795b309e0df3d3e915761641206af1e258edfbcc46
+EBUILD jackcpp-9999.ebuild 499 SHA256 50cf86065217023597598a64b7074b58b178a09cbefc5f3a507855aec43f0a57 SHA512 f07d16c34d1afd4fe2cdc5268f600ae131e3ea84bb2a4154f8628f868d4bd5ae7a184cfc5a0316f85e99ead31284a8867b87609634db536dde77c984f93062ba WHIRLPOOL de861146d2b92ff07c3610de100c071ccf1b65dacd019a12391e4e268dd681b3592bd601baee613e6d3c18a72862a4d684a16657a70328486d5f8c3dbe608a87
diff --git a/media-libs/jackcpp/files/destdir.patch b/media-libs/jackcpp/files/destdir.patch
new file mode 100644
index 0000000..916c8a8
--- /dev/null
+++ b/media-libs/jackcpp/files/destdir.patch
@@ -0,0 +1,22 @@
+--- Makefile 2012-11-19 03:34:12.086348075 +0100
++++ neu.makefile 2012-11-19 04:06:51.615850586 +0100
+@@ -68,13 +68,15 @@
+ # scp ${DISTDIR}.tar.gz alex@x37v.info:x37v.info/jack_cpp/code
+
+ install: ${LIBNAME}
+- cp ${LIBNAME} ${PREFIX}/lib/
+- cp include/* ${PREFIX}/include/
++ mkdir -p ${DESTDIR}${PREFIX}/lib/
++ mkdir -p ${DESTDIR}${PREFIX}/include/
++ cp ${LIBNAME} ${DESTDIR}${PREFIX}/lib/
++ cp include/* ${DESTDIR}${PREFIX}/include/
+
+ uninstall:
+- rm -f ${PREFIX}/lib/${LIBNAME}
++ rm -f ${DESTDIR}${PREFIX}/lib/${LIBNAME}
+ for i in ${INCLUDE_FILES}; do \
+- rm -f ${PREFIX}/$$i; \
++ rm -f ${DESTDIR}${PREFIX}/$$i; \
+ done
+
+ clean-swig:
diff --git a/media-libs/jackcpp/jackcpp-9999.ebuild b/media-libs/jackcpp/jackcpp-9999.ebuild
new file mode 100644
index 0000000..f19ec1a
--- /dev/null
+++ b/media-libs/jackcpp/jackcpp-9999.ebuild
@@ -0,0 +1,26 @@
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=4
+
+EGIT_REPO_URI="git://github.com/x37v/jackcpp.git"
+
+inherit eutils git-2
+
+DESCRIPTION="C++ class wrapping most of the jack client functionality"
+HOMEPAGE="http://x37v.info/projects/jackcpp"
+SRC_URI=""
+
+LICENSE="GPLv3"
+SLOT="0"
+KEYWORDS=""
+IUSE=""
+
+DEPEND="media-sound/jack-audio-connection-kit"
+RDEPEND="${DEPEND}"
+
+src_prepare() {
+ epatch "${FILESDIR}/destdir.patch"
+}
+
diff --git a/media-libs/portmidi/Manifest b/media-libs/portmidi/Manifest
new file mode 100644
index 0000000..4e92a3c
--- /dev/null
+++ b/media-libs/portmidi/Manifest
@@ -0,0 +1,4 @@
+AUX portmidi-217-cmake-libdir-java-opts.patch 8489 RMD160 6d79008dc69363981c657c5d9d7fb3ac6dbdad8d SHA1 694051009402298eed4a206c0e8d41f40b9650bc SHA256 65746e9cf65e04eac4c1dd328dad4883656d1adb54ac9aa54c10e96d779bc178
+AUX portmidi-217-python-setup.py.patch 605 RMD160 d151714b02eb01bbc596bfa351dd9e7302e6edca SHA1 c05f3f8d86d6ef904ea77b808240df2d6d32cdac SHA256 5cdda76745c7f59786f9c13eace9a211080b3f17f926ad8c67c658ad9b9dafba
+DIST portmidi-src-217.zip 1030830 RMD160 f83aa8288063690ff60654fa291e2982ba637633 SHA1 f45bf4e247c0d7617deacd6a65d23d9fddae6117 SHA256 08e9a892bd80bdb1115213fb72dc29a7bf2ff108b378180586aa65f3cfd42e0f
+EBUILD portmidi-217.ebuild 4054 RMD160 789de5150444f72fdc05e8e26f47497a388ae48e SHA1 b51eae4434c8a11770516b7ecc4b6beabfc7328c SHA256 b271a4d8a98ccdc1c3cd771ff096d7d85760665de22d4f2ed525d0894364507f
diff --git a/media-libs/portmidi/files/portmidi-217-cmake-libdir-java-opts.patch b/media-libs/portmidi/files/portmidi-217-cmake-libdir-java-opts.patch
new file mode 100644
index 0000000..e3b8da9
--- /dev/null
+++ b/media-libs/portmidi/files/portmidi-217-cmake-libdir-java-opts.patch
@@ -0,0 +1,212 @@
+--- portmidi/CMakeLists.txt.old 2010-08-03 21:46:45.000000000 +0100
++++ portmidi/CMakeLists.txt 2010-08-03 21:50:17.000000000 +0100
+@@ -65,6 +65,8 @@
+ endif(CMAKE_LIBRARY_OUTPUT_DIRECTORY MATCHES ${BAD_DIR})
+ endif(UNIX)
+
++option(PORTMIDI_ENABLE_JAVA "Enable Java bindings support" ON)
++
+ include_directories(pm_common porttime)
+ add_subdirectory(pm_common)
+
+@@ -73,5 +77,9 @@
+ add_subdirectory(pm_dylib)
+
+ # Cannot figure out how to make an xcode Java application with CMake
+-add_subdirectory(pm_java)
++if(PORTMIDI_ENABLE_JAVA)
++ set(JAR_INSTALL_DIR share/java
++ CACHE STRING "Define directory name for jar installation")
++ add_subdirectory(pm_java)
++endif(PORTMIDI_ENABLE_JAVA)
+
+--- portmidi/pm_common/CMakeLists.txt.old 2010-10-01 13:33:52.000000000 +0100
++++ portmidi/pm_common/CMakeLists.txt 2010-10-01 14:02:55.000000000 +0100
+@@ -62,19 +62,23 @@
+ ${COREMIDI_LIB} ${CORESERVICES_LIB}
+ CACHE INTERNAL "")
+
+- set(JAVAVM_LIB "${FRAMEWORK_PATH}/JavaVM.framework")
+- set(JAVA_INCLUDE_PATHS ${JAVAVM_LIB}/Headers)
++ if(PORTMIDI_ENABLE_JAVA)
++ set(JAVAVM_LIB "${FRAMEWORK_PATH}/JavaVM.framework")
++ set(JAVA_INCLUDE_PATHS ${JAVAVM_LIB}/Headers)
++ endif(PORTMIDI_ENABLE_JAVA)
+ message(STATUS "SYSROOT: " ${CMAKE_OSX_SYSROOT})
+ else(APPLE)
+ # LINUX settings...
+- include(FindJNI)
+- message(STATUS "JAVA_JVM_LIB_PATH is " ${JAVA_JVM_LIB_PATH})
+- message(STATUS "JAVA_INCLUDE_PATH is " ${JAVA_INCLUDE_PATH})
+- message(STATUS "JAVA_INCLUDE_PATH2 is " ${JAVA_INCLUDE_PATH2})
+- message(STATUS "JAVA_JVM_LIBRARY is " ${JAVA_JVM_LIBRARY})
+- set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
+- # libjvm.so is found relative to JAVA_INCLUDE_PATH:
+- set(JAVAVM_LIB ${JAVA_JVM_LIBRARY}/libjvm.so)
++ if(PORTMIDI_ENABLE_JAVA)
++ include(FindJNI)
++ message(STATUS "JAVA_JVM_LIB_PATH is " ${JAVA_JVM_LIB_PATH})
++ message(STATUS "JAVA_INCLUDE_PATH is " ${JAVA_INCLUDE_PATH})
++ message(STATUS "JAVA_INCLUDE_PATH2 is " ${JAVA_INCLUDE_PATH2})
++ message(STATUS "JAVA_JVM_LIBRARY is " ${JAVA_JVM_LIBRARY})
++ set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
++ # libjvm.so is found relative to JAVA_INCLUDE_PATH:
++ set(JAVAVM_LIB ${JAVA_JVM_LIBRARY}/libjvm.so)
++ endif(PORTMIDI_ENABLE_JAVA)
+
+ set(LINUXSRC pmlinuxalsa pmlinux finddefault)
+ prepend_path(LIBSRC ../pm_linux/ ${LINUXSRC})
+@@ -88,10 +92,12 @@
+ # /MD is multithread DLL, /MT is multithread. Change to static:
+ include(../pm_win/static.cmake)
+
+- include(FindJNI)
++ if(PORTMIDI_ENABLE_JAVA)
++ include(FindJNI)
+
+- set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
+- # message(STATUS "JAVA_INCLUDE_PATHS: " ${JAVA_INCLUDE_PATHS})
++ set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
++ # message(STATUS "JAVA_INCLUDE_PATHS: " ${JAVA_INCLUDE_PATHS})
++ endif(PORTMIDI_ENABLE_JAVA)
+
+ set(WINSRC pmwin pmwinmm)
+ prepend_path(LIBSRC ../pm_win/ ${WINSRC})
+@@ -99,29 +105,39 @@
+ set(PM_NEEDED_LIBS winmm.lib)
+ endif(WIN32)
+ endif(UNIX)
+-set(JNI_EXTRA_LIBS ${PM_NEEDED_LIBS} ${JAVA_JVM_LIBRARY})
++
++if(PORTMIDI_ENABLE_JAVA)
++ set(JNI_EXTRA_LIBS ${PM_NEEDED_LIBS} ${JAVA_JVM_LIBRARY})
++endif(PORTMIDI_ENABLE_JAVA)
+
+ # this completes the list of library sources by adding shared code
+ list(APPEND LIBSRC pmutil portmidi)
+
+ # now add the shared files to make the complete list of library sources
+ add_library(portmidi-static ${LIBSRC})
+-set_target_properties(portmidi-static PROPERTIES OUTPUT_NAME "portmidi_s")
++set_target_properties(portmidi-static PROPERTIES OUTPUT_NAME "portmidi")
+ target_link_libraries(portmidi-static ${PM_NEEDED_LIBS})
+
+-# define the jni library
+-include_directories(${JAVA_INCLUDE_PATHS})
+-
+-set(JNISRC ${LIBSRC} ../pm_java/pmjni/pmjni.c)
+-add_library(pmjni SHARED ${JNISRC})
+-target_link_libraries(pmjni ${JNI_EXTRA_LIBS})
+-set_target_properties(pmjni PROPERTIES EXECUTABLE_EXTENSION "jnilib")
++if(PORTMIDI_ENABLE_JAVA)
++ # define the jni library
++ include_directories(${JAVA_INCLUDE_PATHS})
++
++ set(JNISRC ${LIBSRC} ../pm_java/pmjni/pmjni.c)
++ add_library(pmjni SHARED ${JNISRC})
++ target_link_libraries(pmjni ${JNI_EXTRA_LIBS})
++ set_target_properties(pmjni PROPERTIES EXECUTABLE_EXTENSION "jnilib")
++endif(PORTMIDI_ENABLE_JAVA)
+
+ # install the libraries (Linux and Mac OS X command line)
+ if(UNIX)
+- INSTALL(TARGETS portmidi-static pmjni
+- LIBRARY DESTINATION /usr/local/lib
+- ARCHIVE DESTINATION /usr/local/lib)
++ INSTALL(TARGETS portmidi-static
++ LIBRARY DESTINATION lib${LIB_SUFFIX}
++ ARCHIVE DESTINATION lib${LIB_SUFFIX})
++ if(PORTMIDI_ENABLE_JAVA)
++ INSTALL(TARGETS pmjni
++ LIBRARY DESTINATION lib${LIB_SUFFIX}
++ ARCHIVE DESTINATION lib${LIB_SUFFIX})
++ endif(PORTMIDI_ENABLE_JAVA)
+ # .h files installed by pm_dylib/CMakeLists.txt, so don't need them here
+ # INSTALL(FILES portmidi.h ../porttime/porttime.h
+ # DESTINATION /usr/local/include)
+--- portmidi.old/pm_dylib/CMakeLists.txt 2010-10-01 13:33:56.000000000 +0100
++++ portmidi/pm_dylib/CMakeLists.txt 2010-10-11 15:13:47.000000000 +0100
+@@ -63,7 +63,8 @@
+ message(STATUS "SYSROOT: " ${CMAKE_OSX_SYSROOT})
+ else(APPLE)
+ # LINUX settings...
+- include(FindJNI)
++ if(PORTMIDI_ENABLE_JAVA)
++ include(FindJNI)
+ # message(STATUS "JAVA_JVM_LIB_PATH is " ${JAVA_JVM_LIB_PATH})
+ # message(STATUS "JAVA_INCLUDE_PATH is " ${JAVA_INCLUDE_PATH})
+ # note: should use JAVA_JVM_LIB_PATH, but it is not set properly
+@@ -75,11 +76,8 @@
+ # JAVA_INCLUDE_PATH2; if no, then we need to make both JAVA_INCLUDE_PATH
+ # and JAVA_INCLUDE_PATH2 set by user (will need clear documentation
+ # because JAVA_INCLUDE_PATH2 is pretty obscure)
+- set(JAVA_INCLUDE_PATH ${JAVA_INCLUDE_PATH-UNKNOWN}
+- CACHE STRING "where to find Java SDK include directory")
+- set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH}/linux)
+- # libjvm.so is found relative to JAVA_INCLUDE_PATH:
+- set(JAVAVM_LIB ${JAVA_INCLUDE_PATH}/../jre/lib/i386/client/libjvm.so)
++ set(JAVAVM_LIB ${JAVA_JVM_LIBRARY})
++ endif(PORTMIDI_ENABLE_JAVA)
+
+ set(LINUXSRC pmlinuxalsa pmlinux finddefault)
+ prepend_path(LIBSRC ../pm_linux/ ${LINUXSRC})
+@@ -91,13 +89,15 @@
+ if(WIN32)
+ # /MDd is multithread debug DLL, /MTd is multithread debug
+ # /MD is multithread DLL, /MT is multithread
+-
+- include(FindJNI)
+- # note: should use JAVA_JVM_LIB_PATH, but it is not set properly
+- set(JAVAVM_LIB ${JAVA_INCLUDE_PATH}/../lib/jvm.lib)
+
+- set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
+- # message(STATUS "JAVA_INCLUDE_PATHS: " ${JAVA_INCLUDE_PATHS})
++ if(PORTMIDI_ENABLE_JAVA)
++ include(FindJNI)
++ # note: should use JAVA_JVM_LIB_PATH, but it is not set properly
++ set(JAVAVM_LIB ${JAVA_INCLUDE_PATH}/../lib/jvm.lib)
++
++ set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
++ # message(STATUS "JAVA_INCLUDE_PATHS: " ${JAVA_INCLUDE_PATHS})
++ endif(PORTMIDI_ENABLE_JAVA)
+
+ set(WINSRC pmwin pmwinmm)
+ prepend_path(LIBSRC ../pm_win/ ${WINSRC})
+@@ -106,7 +106,10 @@
+ # message(STATUS "JAVAVM_LIB: " ${JAVAVM_LIB})
+ endif(WIN32)
+ endif(UNIX)
++
++if(PORTMIDI_ENABLE_JAVA)
+ set(JNI_EXTRA_LIBS ${PM_NEEDED_LIBS} ${JAVAVM_LIB})
++endif(PORTMIDI_ENABLE_JAVA)
+
+ # this completes the list of library sources by adding shared code
+ set(SHARED_FILES pmutil portmidi)
+@@ -120,8 +123,8 @@
+ # install the libraries (Linux and Mac OS X command line)
+ if(UNIX)
+ INSTALL(TARGETS portmidi-dynamic
+- LIBRARY DESTINATION /usr/local/lib
+- ARCHIVE DESTINATION /usr/local/lib)
++ LIBRARY DESTINATION lib${LIB_SUFFIX}
++ ARCHIVE DESTINATION lib${LIB_SUFFIX})
+ INSTALL(FILES ../pm_common/portmidi.h ../porttime/porttime.h
+- DESTINATION /usr/local/include)
++ DESTINATION include)
+ endif(UNIX)
+--- portmidi/pm_java/CMakeLists.txt.old 2010-08-03 21:47:24.000000000 +0100
++++ portmidi/pm_java/CMakeLists.txt 2010-08-03 22:03:54.000000000 +0100
+@@ -39,9 +39,9 @@
+
+ # install the libraries (Linux only)
+ INSTALL(FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/pmdefaults.jar
+- DESTINATION /usr/share/java)
++ DESTINATION ${JAR_INSTALL_DIR})
+ INSTALL(PROGRAMS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/pmdefaults
+- DESTINATION /usr/local/bin)
++ DESTINATION bin)
+ endif(APPLE)
+ endif(UNIX)
+ # In windows, use pm_java/make.bat
+
diff --git a/media-libs/portmidi/files/portmidi-217-python-setup.py.patch b/media-libs/portmidi/files/portmidi-217-python-setup.py.patch
new file mode 100644
index 0000000..e2c3281
--- /dev/null
+++ b/media-libs/portmidi/files/portmidi-217-python-setup.py.patch
@@ -0,0 +1,13 @@
+--- portmidi/pm_python/setup.py.old 2010-11-05 14:43:04.000000000 +0000
++++ portmidi/pm_python/setup.py 2010-11-05 17:40:26.000000000 +0000
+@@ -173,7 +173,8 @@
+ EXTENSION = dict(
+ ext_modules=[
+ Extension("pyportmidi._pyportmidi", [os.path.join("pyportmidi", "_pyportmidi.pyx")],
+- library_dirs=["./linux"],
++ library_dirs=["../build/Release", "../build/Debug"],
++ include_dirs=["../pm_common", "../porttime"],
+ libraries = ["portmidi", "asound", "pthread"]
+ )
+ ]
+
diff --git a/media-libs/portmidi/portmidi-217.ebuild b/media-libs/portmidi/portmidi-217.ebuild
new file mode 100644
index 0000000..0a71b29
--- /dev/null
+++ b/media-libs/portmidi/portmidi-217.ebuild
@@ -0,0 +1,145 @@
+# Copyright 1999-2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=3
+
+PYTHON_DEPEND="python? 2:2.6"
+
+inherit cmake-utils eutils multilib java-pkg-opt-2 distutils
+
+DESCRIPTION="A library for real time MIDI input and output"
+HOMEPAGE="http://portmedia.sourceforge.net/"
+SRC_URI="mirror://sourceforge/portmedia/${PN}-src-${PV}.zip"
+#ESVN_REPO_URI="https://portmedia.svn.sourceforge.net/svnroot/portmedia/portmidi/trunk"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="debug java python testapps"
+
+CDEPEND="media-libs/alsa-lib"
+RDEPEND="${CDEPEND}
+ java? ( >=virtual/jre-1.6 )"
+DEPEND="${CDEPEND}
+ java? ( >=virtual/jdk-1.6 )
+ python? ( >=dev-python/cython-0.12.1 )
+ app-arch/unzip"
+# build of docs not working
+# doc? ( app-doc/doxygen
+# virtual/latex-base )"
+
+S="${WORKDIR}/${PN}"
+
+# seems to be needed
+CMAKE_IN_SOURCE_BUILD=1
+
+# seems to be needed, if the default "Gentoo" is used there will be
+# problems. f.e. no midi devices in pmdefaults, maybe even no midi devices at
+# all.
+CMAKE_BUILD_TYPE=$(use debug && echo Debug || echo Release)
+
+src_prepare() {
+ # with this patch the java installation directories can be specified and
+ # allows java to be enabled/disabled
+ epatch "${FILESDIR}/${P}-cmake-libdir-java-opts.patch"
+
+ # find the header and our compiled libs in the distutils setup.py
+ epatch "${FILESDIR}/${P}-python-setup.py.patch"
+
+ if use java ; then
+ # this stuff fixes up the pmdefaults wrapper for locations where
+ # Gentoo prefers to keep jars, it also specifies a library directory
+ cat > pm_java/pmdefaults/pmdefaults <<-EOF
+ #!/bin/sh
+ java -Djava.library.path=/usr/$(get_libdir)/ \\
+ -jar "${EPREFIX}/usr/share/${PN}-${SLOT}/lib/pmdefaults.jar"
+ EOF
+ fi
+}
+
+src_configure() {
+ local mycmakeargs=(
+ $(cmake-utils_use java PORTMIDI_ENABLE_JAVA)
+
+ # this seems to be needed. if not set there will be a sandbox
+ # violation. if set to ./ the java parts will not build.
+ # one may end up with a blob named Gentoo, Debug or Release. hmmm
+ -DCMAKE_CACHEFILE_DIR="${S}/build"
+ )
+
+ # java stuff, the portmidi wiki says JAVA_JVM_LIBRARY needs to be specified
+ if use java ; then
+ # search for libjvm.so is modified from sci-chemistry/tinker ebuild
+ local javalib=
+ for i in $(java-config -g LDPATH | sed 's|:| |g') ; do
+ [[ -f ${i}/libjvm.so ]] && javalib=${i}/libjvm.so
+ done
+
+ mycmakeargs+=(-DJAVA_JVM_LIBRARY="${javalib}"
+ # tell cmake where to install the jar, this requires the cmake
+ # patch, can be a relative path from CMAKE_INSTALL_PREFIX or
+ # absolute.
+ -DJAR_INSTALL_DIR="${EPREFIX}/usr/share/${PN}-${SLOT}/lib"
+ )
+ fi
+
+ cmake-utils_src_configure
+}
+
+src_compile() {
+ # parallel make is broken when java is enabled so force -j1 :(
+ cmake-utils_src_compile -j1
+
+ # python modules
+ if use python ; then
+ pushd pm_python || die "pushd python failed"
+ # hack. will error out if these files are not found
+ touch CHANGES.txt TODO.txt
+ distutils_src_compile
+ popd
+ fi
+
+ # make the docs (NOT WORKING)
+ #if use doc ; then
+ # doxygen || die "doxygen failed"
+ # pushd latex || die "pushd latex failed"
+ # VARTEXFONTS="${T}/fonts" make ${MAKEOPTS} || die "make doc failed"
+ # popd
+ #fi
+}
+
+src_install() {
+ cmake-utils_src_install
+
+ dodoc CHANGELOG.txt README.txt pm_linux/README_LINUX.txt
+
+ # install the python modules
+ if use python ; then
+ pushd pm_python || die "pushd pm_python failed"
+ distutils_src_install
+ popd
+ fi
+
+ # a desktop entry and icon for the pmdefaults java configuration gui
+ if use java ; then
+ newdoc pm_java/README.txt README_JAVA.txt
+ doicon pm_java/pmdefaults/pmdefaults-icon.png
+ make_desktop_entry pmdefaults Pmdefaults pmdefaults-icon \
+ "AudioVideo;Audio;Midi;"
+ fi
+
+ # some portmidi test apps
+ if use testapps ; then
+ # maybe a better location can be used
+ insinto /usr/$(get_libdir)/${PN}-${SLOT}
+ insopts -m0755
+ local app
+ for app in latency midiclock midithread \
+ midithru mm qtest sysex test ; do
+ doins "${S}/build/${CMAKE_BUILD_TYPE}/${app}" \
+ || die "doins tests failed"
+ done
+ fi
+}
+
diff --git a/media-sound/amarok/ChangeLog b/media-sound/amarok/ChangeLog
new file mode 100644
index 0000000..6a1bf52
--- /dev/null
+++ b/media-sound/amarok/ChangeLog
@@ -0,0 +1,2034 @@
+# ChangeLog for media-sound/amarok
+# Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/media-sound/amarok/ChangeLog,v 1.434 2012/08/11 20:40:33 scarabeus Exp $
+
+*amarok-2.6.0 (11 Aug 2012)
+
+ 11 Aug 2012; Tomáš Chvátal <scarabeus@gentoo.org> +amarok-2.6.0.ebuild,
+ -amarok-2.5.0-r3.ebuild, -amarok-2.5.90-r1.ebuild, -amarok-2.5.96.ebuild:
+ Add the final release. Remove RCs and overshadowed.
+
+*amarok-2.5.96 (03 Aug 2012)
+
+ 03 Aug 2012; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.5.96.ebuild:
+ [media-sound/amarok] Version bump (2.6 RC).
+
+ 19 Jul 2012; Michael Palimaka <kensington@gentoo.org> amarok-2.4.3-r1.ebuild,
+ amarok-2.5.0-r3.ebuild, amarok-2.5.0-r4.ebuild, amarok-2.5.90-r1.ebuild:
+ Add missing slot dependencies on Qt.
+
+ 14 Jul 2012; Johannes Huber <johu@gentoo.org> amarok-2.5.0-r4.ebuild:
+ Stable for x86, wrt bug #418321
+
+ 14 Jul 2012; Agostino Sarubbo <ago@gentoo.org> amarok-2.5.0-r4.ebuild:
+ Stable for amd64, wrt bug #418321
+
+*amarok-2.5.90-r1 (08 Jul 2012)
+*amarok-2.5.0-r4 (08 Jul 2012)
+
+ 08 Jul 2012; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.5.0-r4.ebuild, +amarok-2.5.90-r1.ebuild,
+ +files/amarok-2.5.0-fix-context-view-on-startup.patch, amarok-2.5.0-r3.ebuild,
+ metadata.xml:
+ [media-sound/amarok-2.5.0-r3] Fix whitespace. [media-sound/amarok-2.5.0-r4]
+ revision bump to add the patch to fix clipped context view - bug 424261.
+ [media-sound/amarok-2.5.90-r1] Move from the overlay the 2.6.0-beta1 - bug
+ 419509.
+
+ 08 Jul 2012; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.4.3-r1.ebuild, amarok-2.5.0-r3.ebuild:
+ [media-sound/amarok] Fix media-libs/liblastfm dependency - bug 423391.
+
+ 03 Jul 2012; Johannes Huber <johu@gentoo.org> amarok-2.5.0-r3.ebuild:
+ Stable for x86, wrt bug #418321
+
+ 22 Jun 2012; Agostino Sarubbo <ago@gentoo.org> amarok-2.5.0-r3.ebuild:
+ Stable for amd64, wrt bug #418321
+
+*amarok-2.5.0-r3 (22 Jun 2012)
+
+ 22 Jun 2012; <creffett@gentoo.org> -amarok-2.5.0-r2.ebuild,
+ +amarok-2.5.0-r3.ebuild, +files/amarok-2.5.0-qtdebug.patch:
+ Rev bump, added patch to fix Amarok crashing for bug 395575. Remove old.
+
+ 26 May 2012; Alexey Shvetsov <alexxy@gentoo.org> amarok-2.5.0-r2.ebuild,
+ metadata.xml:
+ [media-sound/amarok] Allow installing with KDE SC 4.9
+
+ 04 May 2012; Johannes Huber <johu@gentoo.org> -amarok-2.4.0.ebuild,
+ -amarok-2.4.3.ebuild, -amarok-2.5.0-r1.ebuild, -amarok-2.5.0.ebuild,
+ amarok-2.4.3-r1.ebuild, amarok-2.5.0-r2.ebuild:
+ Remove old. Migrate to virtual/pkgconfig.
+
+ 17 Apr 2012; Brent Baude <ranger@gentoo.org> amarok-2.4.3-r1.ebuild:
+ Marking amarok-2.4.3-r1 ppc for bug 389997
+
+ 16 Apr 2012; Brent Baude <ranger@gentoo.org> amarok-2.4.3.ebuild:
+ Marking amarok-2.4.3 ppc for bug 389997
+
+*amarok-2.5.0-r2 (09 Feb 2012)
+
+ 09 Feb 2012; Johannes Huber <johu@gentoo.org> +amarok-2.5.0-r2.ebuild,
+ +files/amarok-2.5.0-kde48.patch:
+ Rev bump, adds upstream patch for gui issues with kde 4.8, fixes bug #402131.
+
+ 14 Jan 2012; Thomas Kahle <tomka@gentoo.org> amarok-2.4.3-r1.ebuild:
+ x86 stable per bug 389997
+
+ 31 Dec 2011; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.5.0-r1.ebuild:
+ [media-sound/amarok-2.5.0-r1] Added missing libofa dependency and configure
+ switch. Thanks to Matěj Laitl again - bug 395369.
+
+ 28 Dec 2011; Agostino Sarubbo <ago@gentoo.org> amarok-2.4.3-r1.ebuild:
+ Stable for AMD64, wrt bug #389997
+
+*amarok-2.5.0-r1 (28 Dec 2011)
+*amarok-2.4.3-r1 (28 Dec 2011)
+
+ 28 Dec 2011; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.4.3-r1.ebuild, +amarok-2.5.0-r1.ebuild, metadata.xml:
+ [media-sound/amarok] Drop the player use flag until upstream allows to
+ disable the player again. Apply Matěj Laitl's patch to amarok-2.5.0.
+
+*amarok-2.5.0 (20 Dec 2011)
+
+ 20 Dec 2011; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.4.0.ebuild, amarok-2.4.3.ebuild, +amarok-2.5.0.ebuild:
+ [media-sound/amarok] Bump to the 2.5.0 release.
+ Dropped ~ppc64 keywords as all KDE versions are masked on the ppc64 arch.
+
+ 08 Nov 2011; Andreas K. Huettel <dilfridge@gentoo.org> amarok-2.4.3.ebuild:
+ No use-deps on strigi, bug 386259
+
+ 28 Oct 2011; Jonathan Callen <abcd@gentoo.org> -amarok-2.4.1.ebuild,
+ -amarok-2.3.2-r1.ebuild:
+ remove old
+
+ 24 Oct 2011; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.4.3.ebuild:
+ [media-sound/amarok] Replace the mysql dependency - bug 388059.
+
+ 23 Aug 2011; Andreas K. Huettel <dilfridge@gentoo.org> amarok-2.4.0.ebuild,
+ amarok-2.4.1.ebuild, amarok-2.4.3.ebuild:
+ Add dependency on kde-base/kdebase-kioslaves, bug 374399
+
+*amarok-2.4.3 (01 Aug 2011)
+
+ 01 Aug 2011; Theo Chatzimichos <tampakrap@gentoo.org>
+ -amarok-2.4.0.90.ebuild, +amarok-2.4.3.ebuild:
+ Version bump, remove old
+
+ 01 Jun 2011; Brent Baude <ranger@gentoo.org> amarok-2.4.0.ebuild:
+ Marking amarok-2.4.0 ppc stable for bug 354033
+
+ 09 May 2011; Markos Chandras <hwoarang@gentoo.org> amarok-2.4.0.ebuild:
+ Stable on amd64 wrt bug #354033
+
+ 09 May 2011; Thomas Kahle <tomka@gentoo.org> amarok-2.4.0.ebuild:
+ x86 stable per bug 354033
+
+*amarok-2.4.1 (08 May 2011)
+
+ 08 May 2011; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.4.0.90.ebuild, +amarok-2.4.1.ebuild,
+ +files/amarok-fix-upnp-dep.patch:
+ Bumped amarok to the 2.4.1 release.
+ Renamed the patch to fix the upnp detection.
+
+ 26 Apr 2011; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.4.0.90.ebuild:
+ [media-sound/amarok-2.4.0.90] Added keywords back to ebuild.
+
+ 20 Apr 2011; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.3.2-r1.ebuild, amarok-2.4.0.ebuild, amarok-2.4.0.90.ebuild:
+ Dropped the dev-db/{mysql,mariadb} dep for use flag embedded and unified it
+ on the virtual/mysql dep.
+ Moved from the dev-db/mysql[minimal] check on pkg_postinst to
+ virtual/mysql[minimal] now that I've added the minimal use flag to the
+ virtual/mysql ebuilds.
+ Added the handbook use flag which should fix bug 354035. Thanks to Andreas
+ Hüttel for the help.
+
+ 20 Apr 2011; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.4.0.90.ebuild, +files/amarok-2.4.0.90-fix-plugin-detection.patch:
+ Added upstream patch to fix the plugin detection at startup.
+
+ 20 Apr 2011; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ files/amarok-2.4.0.90-fix-upnp-dep.patch:
+ Updated upnp patch so cmake can find the HUpnp include dir.
+
+*amarok-2.4.0.90 (19 Apr 2011)
+
+ 19 Apr 2011; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.3.2-r1.ebuild, amarok-2.4.0.ebuild, +amarok-2.4.0.90.ebuild,
+ +files/amarok-2.4.0.90-fix-upnp-dep.patch, metadata.xml:
+ Bumped amarok to the 2.4.0.90 release (2.4.1 beta 1).
+ Added a patch to get upnp support - not working yet.
+
+ 02 Feb 2011; Theo Chatzimichos <tampakrap@gentoo.org> amarok-2.3.2-r1.ebuild,
+ amarok-2.4.0.ebuild:
+ EAPI3, sync with live ebuild about git eclass handling, use add_kdebase_dep
+
+ 14 Jan 2011; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.4.0.ebuild:
+ [media-sound/amarok-2.4.0] Fix SRC_URI. Fixes bug 351618 - thanks to
+ ScytheMan (scytheman666 AT gmail DOT com).
+
+*amarok-2.4.0 (12 Jan 2011)
+
+ 12 Jan 2011; Theo Chatzimichos <tampakrap@gentoo.org>
+ -amarok-2.3.1-r2.ebuild, -amarok-2.3.1.90.ebuild,
+ -files/amarok-2.3.1-fix-trayicon.patch, +amarok-2.4.0.ebuild,
+ -files/amarok-fix-accessibility-dep.patch:
+ Version bump, remove old ebuilds and patches
+
+ 21 Nov 2010; Thomas Kahle <tomka@gentoo.org> amarok-2.3.2-r1.ebuild:
+ x86 stable per bug 346233
+
+ 21 Nov 2010; Markos Chandras <hwoarang@gentoo.org> amarok-2.3.2-r1.ebuild:
+ Stable on amd64 wrt bug #346233
+
+ 06 Oct 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.3.2-r1.ebuild:
+ [media-sound/amarok-2.3.2-r1] If we want to build amarok with embedded
+ support, we have to depend on mysql/maria[embedded].
+
+ 06 Oct 2010; Theo Chatzimichos <tampakrap@gentoo.org>
+ -amarok-2.3.2.ebuild:
+ b0rk3d
+
+ 06 Oct 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.3.2-r1.ebuild:
+ [media-sound/amarok-2.3.2-r1] If we want to build amarok with embedded
+ support, we have to depend on mysql/maria[embedded].
+
+ 06 Oct 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.3.2-r1.ebuild:
+ [media-sound/amarok-2.3.2-r1] Updated the EGIT_REPO_URI as upstream
+ changed the git location.
+
+*amarok-2.3.2-r1 (27 Sep 2010)
+
+ 27 Sep 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.3.2-r1.ebuild, +files/amarok-2.3.2-fix-qt-regression.patch:
+ [media-sound/amarok-2.3.2-r1] Now that we finally have working patches for
+ mariadb and mysql 5.1.50,
+ fixed the embedded deps and added embedded to IUSE defaults.
+ Added an upstream patch to fix issues with the collection scanning caused
+ by a QT bug/regression -
+ https://bugs.kde.org/show_bug.cgi?id=251762#c10
+
+ 19 Sep 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.3.1.90.ebuild:
+ [media-sound/amarok-2.3.1.90] Revert the unintentional drop of the
+ embedded USE flag dependencies.
+
+*amarok-2.3.2 (19 Sep 2010)
+
+ 19 Sep 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.3.1.90.ebuild, +amarok-2.3.2.ebuild,
+ +files/amarok-2.3.2-flac-fix.patch:
+ [media-sound/amarok-2.3.2] Bumped amarok to the 2.3.2 release - masked
+ until the public release.
+ Applied commit ce57e426 from the git tree to fix a BMP tag bug related to
+ flac files - thanks to Jeff Mitchell <mitchell AT kde DOT org>.
+
+ 24 Aug 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.3.1-r2.ebuild:
+ Fixed amarok-2.3.1-r2 SRC_URI: unstable -> stable.
+
+*amarok-2.3.1.90 (24 Aug 2010)
+
+ 24 Aug 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.3.1.90.ebuild:
+ Added amarok 2.3.1.90 (2.3.2 Beta1).
+
+ 10 Aug 2010; Tomáš Chvátal <scarabeus@gentoo.org>
+ -amarok-2.2.2-r1.ebuild, -files/amarok-2.2.2-nodebug.patch,
+ -files/amarok-2.2-mysql-libs.patch,
+ -files/amarok-2.3.0-crash_fix_info_applet.patch, -amarok-2.3.1.ebuild,
+ -amarok-2.3.1-r1.ebuild, -files/amarok-qtscriptcheck.patch:
+ Cleanup old stuff.
+
+ 30 Jul 2010; Markos Chandras <hwoarang@gentoo.org> amarok-2.3.1-r2.ebuild:
+ Stable on amd64 wrt bug #329853
+
+ 27 Jul 2010; Christian Faulhammer <fauli@gentoo.org>
+ amarok-2.3.1-r2.ebuild:
+ stable x86, bug 329853
+
+ 11 Jul 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.3.1-r2.ebuild, files/amarok-2.3.1-fix-trayicon.patch:
+ Updated the fix-trayicon patch to include all the 4 commits by Kevin Funk
+ available from http://krf.kollide.net/files/work/amarok/
+
+*amarok-2.3.1-r2 (11 Jul 2010)
+
+ 11 Jul 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.3.1-r2.ebuild, +files/amarok-2.3.1-fix-trayicon.patch:
+ Added missing deps for dev-util/automoc and dev-util/pkgconfig. Thanks to
+ Nikoli <nikoli@lavabit.com> - fixes bug 324883.
+ Added a patch to fix the missing tray icon in non-KDE environments. Thanks
+ to Rex Dieter for the heads up in the amarok-packagers ml and Kevin Funk
+ for the patch - fixes bug 325371.
+ Fixed the available linguas list. Thanks to MarisN <maris.gis@gmail.com> -
+ fixes bug 326147.
+
+ 07 Jul 2010; Samuli Suominen <ssuominen@gentoo.org>
+ amarok-2.3.1-r1.ebuild:
+ Keyword ~ppc64 wrt #280552, thanks to Andreas Thalhammer and Jorge Manuel
+ B. S. Vicetto.
+
+ 19 Jun 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.3.1-r1.ebuild:
+ [media-sound/amarok-2.3.1-r1] Synced some changes from the live ebuild in
+ the overlay:
+ updated the git repo now that amarok moved from gitorious to kde and
+ dropped a comment.
+
+ 13 Jun 2010; Maciej Mrozowski <reavertm@gentoo.org>
+ amarok-2.3.1-r1.ebuild:
+ Amarok utils require Qt4, drop implicit Qt dep caused by OPENGL_REQUIRED
+ and replace it by explicit dependency, nepomuk is pulled by
+ kdelibs[semantic-desktop] already
+
+ 12 Jun 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.3.1-r1.ebuild:
+ [media-sound/amarok-2.3.1-r1] Moved media-sound/amarok-utils block to
+ RDEPEND.
+
+ 12 Jun 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ -amarok-2.2.0.ebuild, -amarok-2.2.2.ebuild, -amarok-2.2.2.90.ebuild,
+ -amarok-2.3.0.ebuild, -amarok-2.3.0-r1.ebuild, -amarok-2.3.0.90.ebuild:
+ [media-sound/amarok] Dropped old ebuilds.
+
+ 12 Jun 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.3.1-r1.ebuild:
+ [media-sound/amarok-2.3.1-r1] Fix cmake call for utils - utilities !=
+ utils.
+
+*amarok-2.3.1-r1 (12 Jun 2010)
+
+ 12 Jun 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.3.1-r1.ebuild, +files/amarok-fix-accessibility-dep.patch,
+ metadata.xml:
+ [media-sound/amarok-2.3.1-r1] Merged amarok and amarok-utils. Applied
+ patch to drop the accessibility requirement - should fix bug 319803.
+ Reviewed mysql deps to allow for mariadb - fixes bug 320807. Applied
+ minimal-toc cflag to avoid issues on ppc64 - should fix bug 280552.
+ Testing for this masked version is welcomed.
+
+ 09 Jun 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.3.1.ebuild:
+ [media-sound/amarok-2.3.1] Added a hard dep on
+ x11-libs/qt-gui[accessibility] to fix the build issues as some UI dialogs
+ require it. Should fix bug 319803.
+
+*amarok-2.3.1 (28 May 2010)
+
+ 28 May 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.3.1.ebuild:
+ [media-sound/amarok] Bumped to the 2.3.1 release.
+
+ 18 May 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.3.0.90.ebuild:
+ Sort dependency order.
+
+ 19 Apr 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.3.0.90.ebuild:
+ [media-sound/amarok-2.3.0.90] Fixing SRC_URI as betas are in the unstable
+ tree - thanks to Torsten (tove).
+
+*amarok-2.3.0.90 (17 Apr 2010)
+
+ 17 Apr 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.3.0.90.ebuild:
+ [media-sound/amarok] Bumped to the 2.3.1 Beta 1 (2.3.0.90) release.
+
+*amarok-2.3.0-r1 (28 Mar 2010)
+
+ 28 Mar 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.3.0-r1.ebuild, +files/amarok-2.3.0-crash_fix_info_applet.patch:
+ Applied upstream patch to fix a crash on startup on the info applet caused
+ by a Qt bug.
+
+*amarok-2.3.0 (15 Mar 2010)
+
+ 15 Mar 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.3.0.ebuild:
+ Bumped amarok to the 2.3.0 release.
+
+ 01 Mar 2010; Dror Levin <spatz@gentoo.org> amarok-2.2.2-r1.ebuild,
+ amarok-2.2.2.90.ebuild:
+ Fix !use space issue, bug 306681.
+
+ 27 Feb 2010; Theo Chatzimichos <tampakrap@gentoo.org>
+ amarok-2.2.2.90.ebuild:
+ Disable + from embedded USE flag (it's not the default recommended in
+ 2.3pre releases)
+
+ 25 Feb 2010; Christian Faulhammer <fauli@gentoo.org>
+ amarok-2.2.2-r1.ebuild:
+ stable x86, bug 305909
+
+ 23 Feb 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.2.2-r1.ebuild, amarok-2.2.2.90.ebuild:
+ Reviewed mysql deps and added a few postinst warnings.
+
+ 23 Feb 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.2.2-r1.ebuild, amarok-2.2.2.90.ebuild:
+ Fixed mysql deps and dropped support for mysql-community - fixes bug
+ 306155.
+
+ 23 Feb 2010; Joseph Jezak <josejx@gentoo.org> amarok-2.2.2-r1.ebuild,
+ amarok-2.2.2.90.ebuild:
+ Marked ~ppc for bug #280552.
+
+ 22 Feb 2010; Robin H. Johnson <robbat2@gentoo.org> amarok-2.2.0.ebuild,
+ amarok-2.2.2.ebuild, amarok-2.2.2-r1.ebuild, amarok-2.2.2.90.ebuild:
+ Bug #306155 workaround: Update MySQL dep to prevent MySQL 5.1 from being
+ considered as a dep solution, due to the lack of a functional
+ shared-embedded patch at this time.
+
+ 20 Feb 2010; Samuli Suominen <ssuominen@gentoo.org>
+ amarok-2.2.2-r1.ebuild:
+ amd64 stable wrt #305909
+
+ 20 Feb 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.2.2.90.ebuild:
+ Restricted tests for amarok-2.2.2.90 as we don't have a required dep in
+ the tree ( gmock - http://code.google.com/p/gmock/ ).
+ Fixes bug 305979 - thanks to Ryan for reporting.
+
+*amarok-2.2.2-r1 (19 Feb 2010)
+
+ 19 Feb 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.2.2-r1.ebuild:
+ Rev-bumped amarok-2.2.2 to fix the deps and to ask for a quick
+ stabilization.
+ Fixed strigi deps (bug 304883) - thanks to Samuli.
+ Dropped the bindist use flag and added a hard dep on taglib[asf,mp4] (bug
+ 299899) - thanks to Jeff Mitchell (jefferai).
+
+ 19 Feb 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ -amarok-2.2.1.ebuild, -amarok-2.2.1-r1.ebuild, -amarok-2.2.1-r2.ebuild,
+ -amarok-2.2.1.90.ebuild:
+ Cleaned old versions.
+
+*amarok-2.2.2.90 (19 Feb 2010)
+
+ 19 Feb 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.2.2.90.ebuild:
+ Bumped amarok to the 2.2.2.90 release (2.3 Beta 1).
+ Fixed strigi deps (bug 304883) - thanks to Samuli.
+ Dropped the bindist use flag and added a hard dep on taglib[asf,mp4] (bug
+ 299899) - thanks to Jeff Mitchell (jefferai).
+
+ 16 Feb 2010; Jonathan Callen <abcd@gentoo.org>
+ -files/amarok-1.4.9.1-libmtp-0.3.0-API.patch,
+ -files/amarok-1.4.10-gcc-4.3.patch, -files/amarok-1.4.10-gcc44.patch,
+ -files/amarok-libmp4v2.patch:
+ Drop old patches
+
+ 10 Jan 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ files/amarok-2.2.2-nodebug.patch:
+ Added updated patch by Jeff Mitchell.
+
+*amarok-2.2.2 (08 Jan 2010)
+
+ 08 Jan 2010; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.2.2.ebuild, +files/amarok-2.2.2-nodebug.patch:
+ Bumped amarok to 2.2.2 (should be out next Monday).
+ Dropped semantic-desktop from IUSE defaults and added Jeff Mitchell patch
+ to fix some scanning issues.
+
+ 23 Dec 2009; Tomáš Chvátal <scarabeus@gentoo.org>
+ -amarok-1.4.10_p20090130-r3.ebuild:
+ Drop 1.4 series amarok.
+
+*amarok-2.2.1.90 (16 Dec 2009)
+
+ 16 Dec 2009; Theo Chatzimichos <tampakrap@gentoo.org>
+ +amarok-2.2.1.90.ebuild:
+ Version bump
+
+*amarok-2.2.1-r2 (01 Dec 2009)
+
+ 01 Dec 2009; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.2.1-r2.ebuild, +files/amarok-2.2-mysql-libs.patch:
+ Updated taglib dependency - fixes bug 293950.
+ Patched mysqlecollection to fix the build with >=binutils-2.20 - fixes bug
+ 290662.
+ Should fix bug 277785.
+
+ 20 Nov 2009; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.2.1-r1.ebuild:
+ Really added kdemultimedia-kioslaves dep this time.
+
+*amarok-2.2.1-r1 (20 Nov 2009)
+
+ 20 Nov 2009; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.2.1-r1.ebuild:
+ Added missing app-crypt/qca:2 dep. Fixes bug #293509 - thanks to Rafael
+ <rktspm@gmail.com>.
+ Added missing kde-base/kdemultimedia-kioslaves. Fixes bug #292216 - thanks
+ to Hubert Lee <oboe-nerd@hotmail.com>.
+ Bumped revision to avoid dep tree issues.
+
+ 14 Nov 2009; Theo Chatzimichos <tampakrap@gentoo.org> amarok-2.2.0.ebuild,
+ amarok-2.2.1.ebuild, +files/amarok-qtscriptcheck.patch:
+ after a long time, fix qtscript check, bug 270923, kde bug 189367
+
+*amarok-2.2.1 (14 Nov 2009)
+
+ 14 Nov 2009; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.2.1.ebuild:
+ Bumped amarok to release 2.2.1.
+ This release like 2.2.0 segfauls on start if built with binutils-2.20
+ (bug 290662).
+
+ 09 Nov 2009; Christian Faulhammer <fauli@gentoo.org> amarok-2.2.0.ebuild:
+ stable x86, bug 290483
+
+ 07 Nov 2009; Samuli Suominen <ssuominen@gentoo.org>
+ amarok-1.4.10_p20090130-r3.ebuild:
+ Remove kde-base/konqueror:3.5 support.
+
+ 26 Oct 2009; Samuli Suominen <ssuominen@gentoo.org> amarok-2.2.0.ebuild:
+ amd64 stable wrt #290483
+
+ 10 Oct 2009; Raúl Porcel <armin76@gentoo.org>
+ amarok-1.4.10_p20090130-r3.ebuild:
+ sparc stable wrt #280797
+
+*amarok-2.2.0 (02 Oct 2009)
+
+ 02 Oct 2009; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.2.0.ebuild, metadata.xml:
+ Bumped amarok to version 2.2.0.
+
+ 27 Sep 2009; Brent Baude <ranger@gentoo.org>
+ amarok-1.4.10_p20090130-r3.ebuild:
+ Marking amarok-1.4.10_p20090130-r3 ppc64 for bug 280797
+
+ 29 Aug 2009; nixnut <nixnut@gentoo.org> amarok-1.4.10_p20090130-r3.ebuild:
+ ppc stable #280797
+
+ 15 Aug 2009; Samuli Suominen <ssuominen@gentoo.org>
+ amarok-1.4.10_p20090130-r3.ebuild, +files/amarok-libmp4v2-2.patch:
+ Include string.h for strcmp wrt #281217.
+
+ 15 Aug 2009; Markus Meier <maekke@gentoo.org>
+ amarok-1.4.10_p20090130-r3.ebuild:
+ amd64/x86 stable, bug #280797
+
+ 22 Jul 2009; Samuli Suominen <ssuominen@gentoo.org> amarok-2.1.ebuild,
+ amarok-2.1.1.ebuild, metadata.xml:
+ Rename USE cdaudio to USE cdda.
+
+*amarok-1.4.10_p20090130-r3 (10 Jul 2009)
+
+ 10 Jul 2009; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +files/amarok-libmp4v2.patch, +amarok-1.4.10_p20090130-r3.ebuild:
+ Added a patch to amarok-1.4.10_p20090130-r3 to support the new libmp4v2 -
+ thanks to Samuli Suominen <ssuominen@gentoo.org> for the patch.
+
+ 04 Jul 2009; Raúl Porcel <armin76@gentoo.org>
+ amarok-1.4.10_p20090130-r2.ebuild:
+ sparc stable wrt #272554
+
+*amarok-2.1.1 (26 Jun 2009)
+
+ 26 Jun 2009; Theo Chatzimichos <tampakrap@gentoo.org>
+ -files/2.0.1.1-ipod.patch, -amarok-2.0.2-r2.ebuild,
+ -amarok-2.0.2-r3.ebuild, -files/amarok-2.0.2-lastfm-authentication.patch,
+ +amarok-2.1.1.ebuild, -files/amarok-ipod.patch:
+ Version bump, remove old, bug 275467
+
+ 13 Jun 2009; Tomáš Chvátal <scarabeus@gentoo.org> amarok-2.1.ebuild:
+ Enable KDE_LINGUAS.
+
+ 11 Jun 2009; Markus Meier <maekke@gentoo.org>
+ amarok-1.4.10_p20090130-r2.ebuild:
+ amd64 stable, bug #272554
+
+ 10 Jun 2009; Christian Faulhammer <fauli@gentoo.org>
+ amarok-1.4.10_p20090130-r2.ebuild:
+ stable x86, bug 272554
+
+ 06 Jun 2009; nixnut <nixnut@gentoo.org> amarok-1.4.10_p20090130-r2.ebuild:
+ ppc stable #272554
+
+*amarok-2.1 (04 Jun 2009)
+
+ 04 Jun 2009; Theo Chatzimichos <tampakrap@gentoo.org>
+ amarok-2.0.2-r2.ebuild, amarok-2.0.2-r3.ebuild, +amarok-2.1.ebuild,
+ +files/disable_bindings_test.patch:
+ Version bump to 2.1, slot change to 4
+
+ 04 Jun 2009; Theo Chatzimichos <tampakrap@gentoo.org>
+ amarok-1.4.10_p20090130-r2.ebuild:
+ Correct path by adding ${KDEDIR}
+
+ 25 May 2009; Theo Chatzimichos <tampakrap@gentoo.org>
+ amarok-1.4.10_p20090130-r2.ebuild:
+ Fix typo
+
+ 25 May 2009; Theo Chatzimichos <tampakrap@gentoo.org>
+ amarok-1.4.10_p20090130-r2.ebuild:
+ Fix bug 269774
+
+ 13 May 2009; Theo Chatzimichos <tampakrap@gentoo.org>
+ amarok-2.0.2-r2.ebuild, amarok-2.0.2-r3.ebuild:
+ remove block for amarok-1.4
+
+*amarok-1.4.10_p20090130-r2 (13 May 2009)
+
+ 13 May 2009; Theo Chatzimichos <tampakrap@gentoo.org>
+ +amarok-1.4.10_p20090130-r2.ebuild:
+ Revision bump, EAPI-2'ed, slotted and prefixed
+
+*amarok-2.0.2-r3 (24 Apr 2009)
+
+ 24 Apr 2009; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +files/amarok-2.0.2-lastfm-authentication.patch, +amarok-2.0.2-r3.ebuild:
+ Bumped amarok-2.0.2 to include a lastfm patch. Thanks to Gustavo Henrique
+ Nihei for poking me about it.
+
+ 23 Apr 2009; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ -amarok-2.0.1.1.ebuild, -amarok-2.0.2-r1.ebuild:
+ Removed old amarok-2 ebuilds now that 2.0.2-r2 is finally working for
+ everyone. Removing 2.0.1.1 should also prevent the phonon blocks.
+
+*amarok-2.0.2-r2 (22 Apr 2009)
+
+ 22 Apr 2009; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-2.0.2-r2.ebuild:
+ In order to get amarok-2.0.2 to build, I've appended --as-needed to the
+ ldflags.
+
+ 15 Apr 2009; Tomas Chvatal <scarabeus@gentoo.org> amarok-2.0.2-r1.ebuild:
+ Fix typo.
+
+ 15 Apr 2009; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.0.2-r1.ebuild:
+ Adjusted minimum mysql deps.
+
+ 15 Apr 2009; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ amarok-2.0.2-r1.ebuild:
+ Disabled building the included qtscriptgenerator and added dep to the
+ separate package.
+
+ 15 Apr 2009; Ryan Hill <dirtyepic@gentoo.org>
+ +files/amarok-1.4.10-gcc44.patch, amarok-1.4.10_p20090130-r1.ebuild:
+ Fix building w/ GCC 4.4 for bug #264464.
+
+*amarok-2.0.2-r1 (14 Apr 2009)
+
+ 14 Apr 2009; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +files/amarok-ipod.patch, metadata.xml, +amarok-2.0.2-r1.ebuild:
+ Added amarok-2.0.2.
+
+*amarok-1.4.10-r3 (14 Apr 2009)
+
+ 14 Apr 2009; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ metadata.xml, -amarok-1.4.8.ebuild, -amarok-1.4.9.1.ebuild,
+ -amarok-1.4.9.1-r1.ebuild, -amarok-1.4.10.ebuild,
+ -amarok-1.4.10-r1.ebuild, +amarok-1.4.10-r3.ebuild,
+ -amarok-1.4.10_p20090130.ebuild, amarok-1.4.10_p20090130-r1.ebuild,
+ -amarok-1.4.9999-r2.ebuild, amarok-2.0.1.1.ebuild:
+ Removed old versions of amarok-1.4 and the 1.4.9999 version as upstream
+ work on 1.4 has been stopped. Added blockers for other versions of amarok
+ to prevent the merge process from dying for colisions - fixes bug 241134.
+
+ 19 Mar 2009; Brent Baude <ranger@gentoo.org> amarok-1.4.10-r2.ebuild:
+ Marking amarok-1.4.10-r2 ppc for bug 254896
+
+ 16 Mar 2009; Tomas Chvatal <scarabeus@gentoo.org> amarok-2.0.1.1.ebuild:
+ Remove redundant dep. Already handled by kdelibs.
+
+ 11 Mar 2009; Brent Baude <ranger@gentoo.org> amarok-1.4.10-r2.ebuild:
+ Marking amarok-1.4.10-r2 ppc64 for bug 254896
+
+ 07 Mar 2009; Raúl Porcel <armin76@gentoo.org> amarok-1.4.10-r2.ebuild:
+ sparc stable wrt #254896
+
+ 07 Mar 2009; Markus Meier <maekke@gentoo.org> amarok-1.4.10-r2.ebuild:
+ amd64/x86 stable, bug #254896
+
+*amarok-1.4.10-r2 (04 Mar 2009)
+
+ 04 Mar 2009; Theo Chatzimichos <tampakrap@gentoo.org>
+ +files/amarok-1.4.10-audibletag.patch, +amarok-1.4.10-r2.ebuild:
+ apply audibletag.patch, security bug 254896
+
+ 02 Mar 2009; Alexey Shvetsov <alexxy@gentoo.org> amarok-2.0.1.1.ebuild:
+ Fix typo
+
+ 01 Mar 2009; Alexey Shvetsov <alexxy@gentoo.org> amarok-2.0.1.1.ebuild:
+ Adjust deps
+
+ 01 Mar 2009; Alexey Shvetsov <alexxy@gentoo.org> amarok-2.0.1.1.ebuild:
+ Ajust deps
+
+ 28 Feb 2009; Markus Meier <maekke@gentoo.org> metadata.xml:
+ semantic-desktop is a global USE-flag
+
+ 10 Feb 2009; Tomas Chvatal <scarabeus@gentoo.org>
+ +files/2.0.1.1-ipod.patch, amarok-2.0.1.1.ebuild:
+ Fix ipod issue with amarok 2.0. Per bug #255730.
+
+*amarok-1.4.10_p20090130-r1 (30 Jan 2009)
+*amarok-1.4.10_p20090130 (30 Jan 2009)
+
+ 30 Jan 2009; Carsten Lohrke <carlo@gentoo.org>
+ +amarok-1.4.10_p20090130.ebuild, +amarok-1.4.10_p20090130-r1.ebuild:
+ Sync to stable branch, fixing bug #256389. Desktop entry fixes.
+
+ 25 Jan 2009; <jokey@gentoo.org> amarok-2.0.1.1.ebuild:
+ Revert keyword per #gentoo-dev talk
+
+ 13 Jan 2009; Alexey Shvetsov <alexxy@gentoo.org> amarok-2.0.1.1.ebuild:
+ Add big fat warning about building amarok 2.0.1.1 on amd64.
+
+ 13 Jan 2009; Alexey Shvetsov <alexxy@gentoo.org> amarok-2.0.1.1.ebuild:
+ Add block to mysql builded with USE=minimal. That solves bug #254820
+
+ 13 Jan 2009; Alexey Shvetsov <alexxy@gentoo.org> -amarok-1.90-r1.ebuild,
+ -amarok-2.0.ebuild:
+ Drop old amarok:2 versions
+
+ 13 Jan 2009; Alexey Shvetsov <alexxy@gentoo.org> amarok-2.0.1.1.ebuild:
+ cdaudio support removed from amarok by upstream
+
+*amarok-2.0.1.1 (12 Jan 2009)
+
+ 12 Jan 2009; Alexey Shvetsov <alexxy@gentoo.org> +amarok-2.0.1.1.ebuild:
+ Version bump to 2.0.1.1
+
+ 14 Dec 2008; Tomas Chvatal <scarabeus@gentoo.org> amarok-2.0.ebuild:
+ Block mysql compiled with minimal useflag. Fixes bug #250702.
+
+ 10 Dec 2008; Tomas Chvatal <scarabeus@gentoo.org> amarok-2.0.ebuild:
+ Block amarok:0 correctly (since it was not done before at all i think it
+ does not need revbump).
+
+*amarok-2.0 (10 Dec 2008)
+
+ 10 Dec 2008; Tomas Chvatal <scarabeus@gentoo.org> metadata.xml, +amarok-2.0.ebuild:
+ Version bump.
+
+ 08 Dec 2008; Tomas Chvatal <scarabeus@gentoo.org> amarok-1.90-r1.ebuild:
+ Make amarok optionaly depend on qt-opengl
+
+ 01 Nov 2008; Tomas Chvatal <scarabeus@gentoo.org> metadata.xml,
+ -amarok-1.90.ebuild, amarok-1.90-r1.ebuild:
+ Disabling ipod for amarok 1.9 (Bug 245112). Removing gentoofan23 from
+ maintainers.
+
+ 13 Oct 2008; Thomas Anderson <gentoofan23@gentoo.org> amarok-1.90.ebuild,
+ amarok-1.90-r1.ebuild:
+ Depend on a more recent libmtp version; Amarok won't compile with
+ <media-libs/libmtp-0.3.3
+
+*amarok-1.90-r1 (11 Oct 2008)
+
+ 11 Oct 2008; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-1.90-r1.ebuild:
+ Made a revision bump for 1.90 to ensure everyone gets the fixes in
+ kde4-base.eclass that make the pkg install under KDEDIR.
+
+ 10 Oct 2008; Thomas Anderson <gentoofan23@gentoo.org> amarok-1.90.ebuild:
+ Amarok needs sqlite[threadsafe], adding it.
+
+*amarok-1.90 (10 Oct 2008)
+
+ 10 Oct 2008; Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
+ +amarok-1.90.ebuild:
+ Bumped amarok to version 1.90. Version 1.92 will remain masked in the
+ ovelay due to the dep in mysql[embedded].
+
+ 04 Oct 2008; Diego Pettenò <flameeyes@gentoo.org> metadata.xml:
+ Remove duplicate flags from metadata. Some were alreay well explained in
+ length before.
+
+ 03 Oct 2008; Diego Pettenò <flameeyes@gentoo.org> metadata.xml:
+ Remove myself as maintainer.
+
+ 03 Oct 2008; Thomas Anderson <gentoofan23@gentoo.org> metadata.xml:
+ Add myself as maintainer.
+
+ 31 Aug 2008; Peter Alfredsen <loki_val@gentoo.org>
+ +files/amarok-1.4.10-gcc-4.3.patch, amarok-1.4.10.ebuild,
+ amarok-1.4.10-r1.ebuild:
+ Fix for gcc-4.3. Bug 234784. Thanks to Martin Väth
+ <vaeth@mathematik.uni-wuerzburg.de>.
+
+ 19 Aug 2008; Tobias Scherbaum <dertobi123@gentoo.org>
+ amarok-1.4.10.ebuild:
+ ppc stable, bug #234689
+
+ 16 Aug 2008; Markus Rothe <corsair@gentoo.org> amarok-1.4.10.ebuild:
+ Stable on ppc64; bug #234689
+
+ 15 Aug 2008; Friedrich Oslage <bluebird@gentoo.org> amarok-1.4.10.ebuild:
+ Stable on sparc, security bug #234689
+
+ 15 Aug 2008; Raúl Porcel <armin76@gentoo.org> amarok-1.4.10.ebuild:
+ x86 stable wrt #234689
+
+ 15 Aug 2008; Thomas Anderson <gentoofan23@gentoo.org>
+ amarok-1.4.10.ebuild:
+ stable amd64, security bug 234689
+
+*amarok-1.4.10-r1 (14 Aug 2008)
+
+ 14 Aug 2008; Carsten Lohrke <carlo@gentoo.org> +amarok-1.4.10-r1.ebuild:
+ Revision with libmtp patch...
+
+ 14 Aug 2008; Carsten Lohrke <carlo@gentoo.org> amarok-1.4.10.ebuild:
+ Adjust libmtp dependency.
+
+*amarok-1.4.10 (14 Aug 2008)
+
+ 14 Aug 2008; Carsten Lohrke <carlo@gentoo.org> +amarok-1.4.10.ebuild:
+ Version bump.
+
+ 17 Jul 2008; Markus Rothe <corsair@gentoo.org> amarok-1.4.9.1.ebuild:
+ Stable on ppc64; bug #231061
+
+ 14 Jul 2008; nixnut <nixnut@gentoo.org> amarok-1.4.9.1.ebuild:
+ Stable on ppc wrt bug 231061
+
+ 08 Jul 2008; Raúl Porcel <armin76@gentoo.org> amarok-1.4.9.1.ebuild:
+ sparc stable wrt #231061
+
+ 08 Jul 2008; Christian Faulhammer <opfer@gentoo.org>
+ amarok-1.4.9.1.ebuild:
+ stable x86, bug 231061
+
+ 07 Jul 2008; Dawid Węgliński <cla@gentoo.org> amarok-1.4.9.1.ebuild:
+ Stable on amd64 (bug #231061)
+
+ 07 Jul 2008; Diego Pettenò <flameeyes@gentoo.org> amarok-1.4.9.1.ebuild,
+ amarok-1.4.9.1-r1.ebuild:
+ Remove old and no more pertinent configure options from myconf.
+
+*amarok-1.4.9.1-r1 (05 Jul 2008)
+
+ 05 Jul 2008; Peter Alfredsen <loki_val@gentoo.org>
+ +files/amarok-1.4.9.1-libmtp-0.3.0-API.patch, amarok-1.4.9.1.ebuild,
+ +amarok-1.4.9.1-r1.ebuild:
+ Rev bump for libmtp-0.3.0 compat. Bug #230885.
+
+ 27 May 2008; Ingmar Vanhassel <ingmar@gentoo.org>
+ files/amarok-1.4.9.1-helix+gcc-4.3.patch:
+ Fix a typo in amarok-1.4.9.1-helix+gcc-4.3.patch, as noted by Rick Harris
+ in bug 223287.
+
+ 20 May 2008; Diego Pettenò <flameeyes@gentoo.org>
+ files/amarok-1.4.9.1-helix+gcc-4.3.patch:
+ Fix patch to complete building on GCC 4.3.
+
+ 19 May 2008; Tiziano Müller <dev-zero@gentoo.org> amarok-1.4.8.ebuild,
+ amarok-1.4.9.1.ebuild, amarok-1.4.9999-r2.ebuild:
+ Changed dependency for postgresql to virtual/postgresql-base
+
+ 15 May 2008; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4.9.1-helix+gcc-4.3.patch, amarok-1.4.9.1.ebuild:
+ Add patch to fix building with GCC 4.3 with the Helix engine enabled.
+ Closes bug #214278.
+
+ 15 May 2008; Diego Pettenò <flameeyes@gentoo.org> amarok-1.4.9.1.ebuild,
+ amarok-1.4.9999-r2.ebuild:
+ Depend on alsa-lib when using the Helix engine, as ALSA is checked for and
+ build fails without it. As we don't support HelixPlayer itself but just
+ RealPlayer, this is no concern for non-Linux systems.
+
+*amarok-1.4.9.1 (10 Apr 2008)
+
+ 10 Apr 2008; Diego Pettenò <flameeyes@gentoo.org>
+ -amarok-1.4.7-r2.ebuild, amarok-1.4.8.ebuild, +amarok-1.4.9.1.ebuild:
+ Remove old version, disable Amazon support in 1.4.8 version as the
+ protocol is not working anymore, and add a new pre-release ebuild for
+ 1.4.9.1 that is yet to be officially released.
+
+ 19 Feb 2008; Ingmar Vanhassel <ingmar@gentoo.org> amarok-1.4.7-r2.ebuild,
+ amarok-1.4.8.ebuild, amarok-1.4.9999-r2.ebuild:
+ Update kde-base/* dependencies so that KDE 4 doesn't satisfy it. bug 206528.
+
+ 08 Jan 2008; Raúl Porcel <armin76@gentoo.org> amarok-1.4.8.ebuild:
+ sparc stable wrt #204046, thanks to Alex Maclean for testing
+
+ 05 Jan 2008; Diego Pettenò <flameeyes@gentoo.org> amarok-1.4.8.ebuild,
+ amarok-1.4.9999-r2.ebuild:
+ Require at least libgpod 0.5.2, fixes bug #204332.
+
+ 04 Jan 2008; Richard Freeman <rich0@gentoo.org> amarok-1.4.8.ebuild:
+ amd64 stable - bug #204046
+
+ 02 Jan 2008; Brent Baude <ranger@gentoo.org> amarok-1.4.8.ebuild:
+ Marking amarok-1.4.8 ppc for bug 204046
+
+ 02 Jan 2008; Brent Baude <ranger@gentoo.org> amarok-1.4.8.ebuild:
+ Marking amarok-1.4.8 ppc64 for bug 204046
+
+ 02 Jan 2008; Brent Baude <ranger@gentoo.org> ChangeLog:
+ Marking amarok-1.4.7-r2 ppc64 for bug 204046
+
+ 02 Jan 2008; Brent Baude <ranger@gentoo.org> ChangeLog:
+ Marking amarok-1.4.7-r2 ppc for bug 204046
+
+ 02 Jan 2008; Markus Meier <maekke@gentoo.org> amarok-1.4.8.ebuild:
+ x86 stable, bug #204046
+
+ 30 Dec 2007; Diego Pettenò <flameeyes@gentoo.org> metadata.xml:
+ Clarify that RealPlayer is GPL-incompatible.
+
+*amarok-1.4.8 (17 Dec 2007)
+
+ 17 Dec 2007; Diego Pettenò <flameeyes@gentoo.org> +amarok-1.4.8.ebuild:
+ Version bump.
+
+ 23 Nov 2007; Diego Pettenò <flameeyes@gentoo.org> metadata.xml:
+ Add proper documentation of some of the possibly ambiguous USE flags.
+
+*amarok-1.4.9999-r2 (23 Nov 2007)
+
+ 23 Nov 2007; Diego Pettenò <flameeyes@gentoo.org>
+ -amarok-1.4.7-r1.ebuild, amarok-1.4.7-r2.ebuild,
+ -amarok-1.4.9999-r1.ebuild, +amarok-1.4.9999-r2.ebuild:
+ Remove old version, sync amarok-1.4.9999 to the current amarok release ebuild.
+
+ 22 Nov 2007; nixnut <nixnut@gentoo.org> amarok-1.4.7-r2.ebuild:
+ Stable on ppc wrt bug 199547
+
+ 22 Nov 2007; Raúl Porcel <armin76@gentoo.org> amarok-1.4.7-r2.ebuild:
+ sparc stable, thanks to Alex Maclean for testing
+
+ 19 Nov 2007; Wulf C. Krueger <philantrop@gentoo.org>
+ amarok-1.4.7-r2.ebuild:
+ Marked stable on amd64 as per bug 199547.
+
+ 18 Nov 2007; Markus Rothe <corsair@gentoo.org> amarok-1.4.7-r2.ebuild:
+ Stable on ppc64; bug #199547
+
+ 18 Nov 2007; Dawid Węgliński <cla@gentoo.org> amarok-1.4.7-r2.ebuild:
+ Stable on x86 (bug #199547)
+
+*amarok-1.4.7-r2 (18 Nov 2007)
+
+ 18 Nov 2007; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4.7-svn148317.patch, -amarok-1.4.6-r1.ebuild,
+ -amarok-1.4.7.ebuild, +amarok-1.4.7-r2.ebuild:
+ Version bump, add the patch of upstream SVN rev. 148317, to fix KDE bug
+ #148317.
+
+ 17 Nov 2007; Samuli Suominen <drac@gentoo.org> amarok-1.4.7-r1.ebuild:
+ amd64 stable wrt #198711
+
+ 11 Nov 2007; nixnut <nixnut@gentoo.org> amarok-1.4.7-r1.ebuild:
+ Stable on ppc wrt bug 198711
+
+ 10 Nov 2007; Markus Rothe <corsair@gentoo.org> amarok-1.4.7-r1.ebuild:
+ Stable on ppc64; bug #198711
+
+ 10 Nov 2007; Dawid Węgliński <cla@gentoo.org> amarok-1.4.7-r1.ebuild:
+ Stable on x86 (bug #198711)
+
+ 10 Nov 2007; Raúl Porcel <armin76@gentoo.org> amarok-1.4.7-r1.ebuild:
+ sparc stable wrt #192678, thanks to Alex Maclean for testing
+
+*amarok-1.4.7-r1 (10 Nov 2007)
+
+ 10 Nov 2007; Diego Pettenò <flameeyes@gentoo.org>
+ -files/amarok-1.4.5-magnatune.patch,
+ +files/amarok-1.4.7+xine-lib-1.1.8-lastfm.patch, -amarok-1.4.5-r1.ebuild,
+ -amarok-1.4.6.ebuild, +amarok-1.4.7-r1.ebuild:
+ Remove old version, revision bump to blacklist xine-lib-1.1.8 direct last.fm
+ playback as it's broken by server change, 1.1.9 will work again.
+
+ 04 Nov 2007; Christoph Mende <angelos@gentoo.org> amarok-1.4.7.ebuild:
+ Stable on amd64 wrt bug #192678
+
+ 03 Nov 2007; Lars Weiler <pylon@gentoo.org> amarok-1.4.7.ebuild:
+ stable ppc, bug #192678
+
+ 30 Oct 2007; Markus Rothe <corsair@gentoo.org> amarok-1.4.7.ebuild:
+ Stable on ppc64; bug #192678
+
+ 29 Oct 2007; Dawid Węgliński <cla@gentoo.org> amarok-1.4.7.ebuild:
+ Stable on x86 (bug #192678)
+
+ 11 Oct 2007; Samuli Suominen <drac@gentoo.org> amarok-1.4.5-r1.ebuild,
+ amarok-1.4.6.ebuild, amarok-1.4.6-r1.ebuild, amarok-1.4.7.ebuild,
+ amarok-1.4.9999-r1.ebuild:
+ Replace noamazon USE flag with amazon and add it to base/package.use for bug
+ 134493.
+
+*amarok-1.4.7 (30 Aug 2007)
+
+ 30 Aug 2007; Wulf C. Krueger <philantrop@gentoo.org> +amarok-1.4.7.ebuild:
+ Version bump to 1.4.7 as per bug 189236.
+
+ 13 Aug 2007; Tobias Scherbaum <dertobi123@gentoo.org>
+ amarok-1.4.6-r1.ebuild:
+ ppc. stable
+
+ 31 Jul 2007; Christoph Mende <angelos@gentoo.org> amarok-1.4.6-r1.ebuild:
+ Stable on amd64 wrt bug #186324
+
+ 30 Jul 2007; Gustavo Zacarias <gustavoz@gentoo.org>
+ amarok-1.4.6-r1.ebuild:
+ Stable on sparc wrt #186324
+
+ 30 Jul 2007; Markus Rothe <corsair@gentoo.org> amarok-1.4.6-r1.ebuild:
+ Stable on ppc64; bug #186324
+
+ 29 Jul 2007; Raúl Porcel <armin76@gentoo.org> amarok-1.4.6-r1.ebuild:
+ x86 stable wrt #186324
+
+*amarok-1.4.6-r1 (23 Jun 2007)
+
+ 23 Jun 2007; Diego Pettenò <flameeyes@gentoo.org>
+ +amarok-1.4.6-r1.ebuild:
+ Disable system sqlite usage again, produces freezes for some people, it's
+ better avoiding it again.
+
+*amarok-1.4.6 (21 Jun 2007)
+
+ 21 Jun 2007; Diego Pettenò <flameeyes@gentoo.org>
+ -amarok-1.4.6_rc2.ebuild, +amarok-1.4.6.ebuild:
+ Bump to 1.4.6 final; same tarball, but the ebuild replaced aac useflag with
+ the more descriptive mp4 useflag.
+
+*amarok-1.4.6_rc2 (17 Jun 2007)
+
+ 17 Jun 2007; Diego Pettenò <flameeyes@gentoo.org>
+ -files/amarok-1.4.4+libgpod-0.4.0.patch,
+ -files/amarok-1.4.5-lyrc-script.patch, -amarok-1.4.5-r2.ebuild,
+ -amarok-1.4.6_pre20070608.ebuild, -amarok-1.4.6_pre20070608-r1.ebuild,
+ +amarok-1.4.6_rc2.ebuild:
+ Version bump to 1.4.6_rc2 tarball.
+
+*amarok-1.4.9999-r1 (14 Jun 2007)
+*amarok-1.4.6_pre20070608-r1 (14 Jun 2007)
+
+ 14 Jun 2007; Diego Pettenò <flameeyes@gentoo.org>
+ +amarok-1.4.6_pre20070608-r1.ebuild, -amarok-1.4.9999.ebuild,
+ +amarok-1.4.9999-r1.ebuild:
+ Nowadays sqlite3 should be pretty much stable, so use it external again.
+ (both 1.4.6 pre-release snapshot and live svn).
+
+*amarok-1.4.9999 (14 Jun 2007)
+
+ 14 Jun 2007; Diego Pettenò <flameeyes@gentoo.org>
+ +amarok-1.4.9999.ebuild, -amarok-9999-r2.ebuild:
+ Rename amarok-9999-r2 to amarok-1.4.9999 to make explicit that it's a live
+ subversion for the current stable (1.4) branch. Frees up the 9999 slot for
+ 2.0 when it will be feasible.
+
+*amarok-9999-r2 (10 Jun 2007)
+
+ 10 Jun 2007; Diego Pettenò <flameeyes@gentoo.org> -amarok-9999-r1.ebuild,
+ +amarok-9999-r2.ebuild:
+ Bump the live Subversion ebuild to abide to the changes added in 1.4.5-r2
+ (python useflag).
+
+*amarok-1.4.6_pre20070608 (08 Jun 2007)
+
+ 08 Jun 2007; Diego Pettenò <flameeyes@gentoo.org>
+ +amarok-1.4.6_pre20070608.ebuild:
+ Add a snapshot of amarok from SVN to avoid having to backport all the fixes.
+
+*amarok-1.4.5-r2 (07 Jun 2007)
+
+ 07 Jun 2007; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4.5-lyrc-script.patch, +amarok-1.4.5-r2.ebuild:
+ Revision bump: add patch to fix lyrc script, thanks to Jan Spitalnik in bug
+ #166050 and add a python useflag to depend on PyQT as per bug #179472.
+
+ 07 Jun 2007; Diego Pettenò <flameeyes@gentoo.org> metadata.xml,
+ -amarok-1.4.4-r3.ebuild:
+ Remove old version and take over package again.
+
+ 19 Mar 2007; Bryan Østergaard <kloeri@gentoo.org> metadata.xml:
+ Remove flameeyes from metadata.xml due to retirement.
+
+ 24 Feb 2007; Markus Rothe <corsair@gentoo.org> amarok-1.4.5-r1.ebuild:
+ Stable on ppc64; bug #166901
+
+ 21 Feb 2007; Tobias Scherbaum <dertobi123@gentoo.org>
+ amarok-1.4.5-r1.ebuild:
+ Stable on ppc wrt bug #166901.
+
+ 19 Feb 2007; <malc@gentoo.org> amarok-1.4.5-r1.ebuild:
+ Stable on amd64 wrt security bug #166901
+
+ 17 Feb 2007; Markus Rothe <corsair@gentoo.org> amarok-1.4.5-r1.ebuild:
+ Added ~ppc64
+
+ 15 Feb 2007; Gustavo Zacarias <gustavoz@gentoo.org>
+ amarok-1.4.5-r1.ebuild:
+ Stable on sparc wrt security #166901
+
+ 15 Feb 2007; Christian Faulhammer <opfer@gentoo.org>
+ amarok-1.4.5-r1.ebuild:
+ stable x86; security bug 166901
+
+ 14 Feb 2007; Diego Pettenò <flameeyes@gentoo.org>
+ files/amarok-1.4.5-magnatune.patch:
+ Fix the patch, use the proper one.
+
+*amarok-1.4.5-r1 (14 Feb 2007)
+
+ 14 Feb 2007; Diego Pettenò <flameeyes@gentoo.org>
+ -files/amarok-1.4.3-playlist-encoding.patch,
+ +files/amarok-1.4.5-magnatune.patch, -amarok-1.4.4-r4.ebuild,
+ -amarok-1.4.5.ebuild, +amarok-1.4.5-r1.ebuild:
+ Version bump, adding a patch to fix a possible security flaw in the
+ magnatune store support (KDE BUG #138499). Also add unzip as runtime
+ dependency as it is used for the magnatune shop.
+
+ 06 Feb 2007; Diego Pettenò <flameeyes@gentoo.org> amarok-1.4.5.ebuild:
+ Fix dependency for amarok 1.4.5, libgpod 0.4.2 is needed at least.
+
+ 05 Feb 2007; Diego Pettenò <flameeyes@gentoo.org> amarok-1.4.5.ebuild:
+ Add ~ppc as requested by lu_zero in bug #164242.
+
+ 05 Feb 2007; Gustavo Zacarias <gustavoz@gentoo.org> amarok-1.4.5.ebuild:
+ Rekeyworded ~sparc wrt #164242
+
+ 05 Feb 2007; Diego Pettenò <flameeyes@gentoo.org> ChangeLog:
+ Update digest.
+
+ 05 Feb 2007; Jeroen Roovers <jer@gentoo.org> files/digest-amarok-1.4.5,
+ Manifest:
+ Fix the 1.4.5 digest for mabi.
+
+ 04 Feb 2007; Matti Bickel <mabi@gentoo.org> amarok-1.4.4-r4.ebuild:
+ readd ~ppc (bug #164242)
+
+ 01 Feb 2007; Diego Pettenò <flameeyes@gentoo.org> amarok-9999-r1.ebuild:
+ Update not to use trunk anymore for Live SVN.
+
+*amarok-1.4.5 (01 Feb 2007)
+
+ 01 Feb 2007; Diego Pettenò <flameeyes@gentoo.org> +amarok-1.4.5.ebuild,
+ amarok-9999-r1.ebuild:
+ Version bump (pre-release), and update also 9999-r1 to have a daap useflag
+ to disable mongrel dependency.
+
+ 31 Jan 2007; Gustavo Zacarias <gustavoz@gentoo.org>
+ amarok-1.4.4-r4.ebuild:
+ Keyworded ~sparc wrt #164242
+
+*amarok-9999-r1 (28 Jan 2007)
+*amarok-1.4.4-r4 (28 Jan 2007)
+
+ 28 Jan 2007; Diego Pettenò <flameeyes@gentoo.org>
+ -amarok-1.4.3-r1.ebuild, amarok-1.4.4-r3.ebuild, +amarok-1.4.4-r4.ebuild,
+ -amarok-9999.ebuild, +amarok-9999-r1.ebuild:
+ Remove old version; revision bump fo both 1.4.4 release and live Subversion
+ ebuild to depend on mongrel rather than building and installing its own
+ copy. This drops ~ppc ~ppc64 and ~sparc keywords.
+
+ 25 Jan 2007; Diego Pettenò <flameeyes@gentoo.org> amarok-9999.ebuild:
+ Replace -* keyword with empty keywords.
+
+ 19 Jan 2007; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4.4+libgpod-0.4.0.patch, amarok-1.4.4-r3.ebuild:
+ Add patch to fix building with newer versions of libgpod; closes bug
+ #162725; thanks to Alessio Cassiba for reporting, and Olivier Crete for
+ pointing out the problem.
+
+ 31 Dec 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-9999.ebuild:
+ As the current SVN version requires a newer libmtp, make the 9999 ebuild
+ require it too, even if it's not in portage.
+
+*amarok-9999 (28 Dec 2006)
+
+ 28 Dec 2006; Diego Pettenò <flameeyes@gentoo.org> +amarok-9999.ebuild:
+ Add a live SVN version of Amarok. Although not supported and a bad idea in
+ general, it would save me from supporting people with old and broken
+ unofficial amarok-svn ebuilds that usually waste my time.
+
+ 26 Dec 2006; Diego Pettenò <flameeyes@gentoo.org>
+ files/digest-amarok-1.4.4-r3, Manifest:
+ Fix digest.
+
+ 26 Dec 2006; Gustavo Zacarias <gustavoz@gentoo.org>
+ amarok-1.4.4-r3.ebuild:
+ Stable on sparc wrt #158836
+
+ 25 Dec 2006; Andrej Kacian <ticho@gentoo.org> amarok-1.4.4-r3.ebuild:
+ Stable on x86, bug #158836.
+
+ 23 Dec 2006; Matti Bickel <mabi@gentoo.org> amarok-1.4.4-r3.ebuild:
+ ppc stable (bug #158836)
+
+ 23 Dec 2006; Markus Rothe <corsair@gentoo.org> amarok-1.4.4-r3.ebuild:
+ Stable on ppc64; bug #158836
+
+*amarok-1.4.4-r3 (22 Dec 2006)
+
+ 22 Dec 2006; Diego Pettenò <flameeyes@gentoo.org>
+ -files/amarok-1.4.4-asneeded.patch,
+ -files/amarok-1.4.4-lastfm+xine-lib-1.1.3.patch,
+ -files/amarok-1.4.4-musicbrainz.patch,
+ -files/amarok-1.4.4-podcast-fix.patch, -files/amarok-1.4.4-sparc.patch,
+ amarok-1.4.3-r1.ebuild, -amarok-1.4.4.ebuild, -amarok-1.4.4-r1.ebuild,
+ -amarok-1.4.4-r2.ebuild, +amarok-1.4.4-r3.ebuild:
+ Add patch to fix bug #157752 thanks to Grant McDorman for reporting; correct
+ dependency for postgresql/libpq, thanks to Julien Allanos in bug #158812;
+ remove old version, move patches on their own tarball to reduce size of
+ filesdir.
+
+ 01 Dec 2006; Gustavo Zacarias <gustavoz@gentoo.org>
+ amarok-1.4.4-r2.ebuild:
+ Keyworded ~sparc wrt #156599
+
+ 01 Dec 2006; Markus Rothe <corsair@gentoo.org> amarok-1.4.4-r2.ebuild:
+ Added ~ppc64; bug #156599
+
+ 01 Dec 2006; Diego Pettenò <flameeyes@gentoo.org>
+ files/digest-amarok-1.4.3-r1, Manifest:
+ Fix digest, see bug #156834.
+
+ 30 Nov 2006; Matti Bickel <mabi@gentoo.org> amarok-1.4.4-r2.ebuild:
+ Rekeyworded ~ppc (bug #156599)
+
+*amarok-1.4.4-r2 (30 Nov 2006)
+
+ 30 Nov 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4.4-lastfm+xine-lib-1.1.3.patch, +amarok-1.4.4-r2.ebuild:
+ Add patch to fix Last.FM playback with xine-lib 1.1.3.
+
+*amarok-1.4.4-r1 (29 Nov 2006)
+
+ 29 Nov 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4.4-musicbrainz.patch, +amarok-1.4.4-r1.ebuild:
+ Add patch to fix musicbrainz support, and add the useflag back now that it
+ does work when cancelling.
+
+ 23 Nov 2006; Francesco Riosa <vivo@gentoo.org> amarok-1.4.3-r1.ebuild,
+ amarok-1.4.4.ebuild:
+ dev-db/mysql => virtual/mysql
+
+ 22 Nov 2006; Joseph Jezak <josejx@gentoo.org> amarok-1.4.4.ebuild:
+ Marked ~ppc for bug #153024.
+
+ 19 Nov 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4.4-asneeded.patch, amarok-1.4.4.ebuild:
+ Add patch to fix building with libgpod and --as-needed (bug #154022). Thanks
+ to Timothy (drizzt) who gave me the patch.
+
+ 15 Nov 2006; Markus Rothe <corsair@gentoo.org> amarok-1.4.4.ebuild:
+ Added ~ppc64; bug #153024
+
+ 09 Nov 2006; Gustavo Zacarias <gustavoz@gentoo.org> amarok-1.4.4.ebuild:
+ Rekeywording ~sparc wrt #153024
+
+ 08 Nov 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4.4-sparc.patch, amarok-1.4.4.ebuild:
+ Add patch to allow building on SPARC, see bug #153024. Thanks to Jason Wever
+ for reporting and Jurij Smakov for the patch.
+
+ 06 Nov 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.4.3-r1.ebuild,
+ amarok-1.4.4.ebuild:
+ Remove xmms useflag (upstream is going to remove it on their own releases
+ soon anyway).
+
+ 02 Nov 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4.4-podcast-fix.patch, amarok-1.4.4.ebuild:
+ Add micro-fix for podcasts, as reported by jaervosz.
+
+*amarok-1.4.4 (27 Oct 2006)
+
+ 27 Oct 2006; Diego Pettenò <flameeyes@gentoo.org>
+ -files/amarok-1.4.0a-strict-aliasing.patch, -amarok-1.3.8.ebuild,
+ -amarok-1.4.0a-r1.ebuild, +amarok-1.4.4.ebuild:
+ Remove old versions, and add the new 1.4.4 not released yet.
+
+ 21 Oct 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.4.3-r1.ebuild:
+ Allow using libgpod 0.4 with 1.4.3 version.
+
+ 20 Oct 2006; Simon Stelling <blubb@gentoo.org> amarok-1.4.3-r1.ebuild:
+ stable on amd64
+
+ 18 Oct 2006; Joshua Jackson <tsunam@gentoo.org> amarok-1.4.3-r1.ebuild:
+ Stable x86; bug #150988
+
+ 14 Oct 2006; Joseph Jezak <josejx@gentoo.org> amarok-1.4.3-r1.ebuild:
+ Marked ppc stable for bug #150988.
+
+ 14 Oct 2006; Markus Rothe <corsair@gentoo.org> amarok-1.4.3-r1.ebuild:
+ Stable on ppc64; bug #150988
+
+ 14 Oct 2006; Jason Wever <weeve@gentoo.org> amarok-1.4.3-r1.ebuild:
+ Stable on SPARC wrt bug #150988.
+
+ 12 Oct 2006; Diego Pettenò <flameeyes@gentoo.org>
+ -files/amarok-1.4.1-libvisual.patch, -files/amarok-1.4.2-20restarts.patch,
+ -files/amarok-1.4.2-audiocd-freeze.patch,
+ -files/amarok-1.4.2-collection-sqlite.patch,
+ -files/amarok-1.4.2-libmtp.patch, amarok-1.4.0a-r1.ebuild,
+ -amarok-1.4.1-r3.ebuild, -amarok-1.4.2-r1.ebuild, -amarok-1.4.3.ebuild,
+ amarok-1.4.3-r1.ebuild:
+ Fix libgpod dependency on 0.3 version as 0.4 is not supported (see bug
+ #150983); remove old versions as the new target stable is 1.4.3-r1.
+
+*amarok-1.4.3-r1 (15 Sep 2006)
+
+ 15 Sep 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4.3-playlist-encoding.patch, +amarok-1.4.3-r1.ebuild:
+ Add patch from upstream to fix playlist encoding problems.
+
+ 05 Sep 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.4.3.ebuild:
+ Disable libmtp for now, avoid automagic dependency.
+
+ 05 Sep 2006; Gustavo Zacarias <gustavoz@gentoo.org> amarok-1.4.3.ebuild:
+ Rekeyworded ~sparc
+
+*amarok-1.4.3 (05 Sep 2006)
+
+ 05 Sep 2006; Diego Pettenò <flameeyes@gentoo.org> +amarok-1.4.3.ebuild:
+ Version bump.
+
+*amarok-1.4.2-r1 (31 Aug 2006)
+
+ 31 Aug 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4.2-20restarts.patch,
+ +files/amarok-1.4.2-audiocd-freeze.patch,
+ +files/amarok-1.4.2-collection-sqlite.patch,
+ +files/amarok-1.4.2-libmtp.patch, -amarok-1.4.1-r1.ebuild,
+ -amarok-1.4.1-r2.ebuild, -amarok-1.4.2_beta1.ebuild,
+ +amarok-1.4.2-r1.ebuild:
+ Version bump (-r1 as this is not a vanilla version and I want to bump who
+ has already a local 1.4.2 copy for sure). Remove old versions.
+
+ 08 Aug 2006; Simon Stelling <blubb@gentoo.org> amarok-1.4.0a-r1.ebuild:
+ stable on amd64
+
+ 05 Aug 2006; Jason Wever <weeve@gentoo.org> amarok-1.4.1-r3.ebuild:
+ Re-added ~sparc keyword wrt bug #140243.
+
+*amarok-1.4.2_beta1 (30 Jul 2006)
+
+ 30 Jul 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +amarok-1.4.2_beta1.ebuild:
+ Version bump (beta version).
+
+*amarok-1.4.1-r3 (27 Jul 2006)
+
+ 27 Jul 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4.1-libvisual.patch, +amarok-1.4.1-r3.ebuild:
+ Add patch t fix libvisual 0.4 support, thanks to Ian Monroe for providing
+ the commit diff. Closes bug #140563.
+
+ 26 Jul 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.4.1-r2.ebuild:
+ Remove special case for automake 1.9, the ebuild forces that already when
+ needed.
+
+ 25 Jul 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.3.8.ebuild,
+ amarok-1.4.0a-r1.ebuild, amarok-1.4.1-r1.ebuild, amarok-1.4.1-r2.ebuild:
+ Remove musicbrainz support as per bug #140184.
+
+ 20 Jul 2006; Markus Rothe <corsair@gentoo.org> amarok-1.4.1-r2.ebuild:
+ Added ~ppc64; bug #140243
+
+ 18 Jul 2006; Joshua Jackson <tsunam@gentoo.org> amarok-1.4.0a-r1.ebuild:
+ Stable x86; bug #139095
+
+*amarok-1.4.1-r2 (13 Jul 2006)
+
+ 13 Jul 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +amarok-1.4.1-r2.ebuild:
+ Add njb useflag to enable device support, as per bug #140240.
+
+ 08 Jul 2006; Stephanie Lockwood-Childs <wormo@gentoo.org>
+ amarok-1.4.0a-r1.ebuild:
+ stable on ppc (Bug #139095)
+
+ 05 Jul 2006; Joshua Jackson <tsunam@gentoo.org> amarok-1.4.0a-r1.ebuild:
+ Stable x86; bug #139095
+
+ 04 Jul 2006; Gustavo Zacarias <gustavoz@gentoo.org>
+ amarok-1.4.0a-r1.ebuild:
+ Stable on sparc wrt #139095
+
+ 04 Jul 2006; Markus Rothe <corsair@gentoo.org> amarok-1.4.0a-r1.ebuild:
+ Stable on ppc64; bug #139095
+
+ 03 Jul 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.4.1-r1.ebuild:
+ Remove pl docs, as they were broken on release.
+
+*amarok-1.4.1-r1 (03 Jul 2006)
+
+ 03 Jul 2006; Diego Pettenò <flameeyes@gentoo.org> -amarok-1.4.1.ebuild,
+ +amarok-1.4.1-r1.ebuild:
+ Rename lastfm.protocol file to amaroklasfm.protocol to avoid collisions with
+ lastfmplayer. Thanks to Michael Weyershäuser in bug #139032.
+
+*amarok-1.4.1 (03 Jul 2006)
+
+ 03 Jul 2006; Diego Pettenò <flameeyes@gentoo.org> -amarok-1.4.0a.ebuild,
+ -amarok-1.4.1_beta1.ebuild, +amarok-1.4.1.ebuild:
+ Bump to latest version and remove old ones.
+
+*amarok-1.4.1_beta1 (18 Jun 2006)
+
+ 18 Jun 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +amarok-1.4.1_beta1.ebuild:
+ Add new version (beta).
+
+*amarok-1.4.0a-r1 (18 Jun 2006)
+
+ 18 Jun 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4.0a-strict-aliasing.patch, +amarok-1.4.0a-r1.ebuild:
+ Add patch to fix strict-aliasing breakage.
+
+ 08 Jun 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.4.0a.ebuild:
+ Update description line for 1.4.0a ebuild as now it's Amarok rather than
+ amaroK.
+
+ 28 May 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.3.8.ebuild,
+ amarok-1.4.0a.ebuild:
+ Fix libvisual-plugins dependency on the 0.2 slot.
+
+ 25 May 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.4.0a.ebuild:
+ Remove xx value for translation.
+
+ 24 May 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.4.0a.ebuild:
+ Add ~x86-fbsd keyword.
+
+*amarok-1.4.0a (18 May 2006)
+
+ 18 May 2006; Diego Pettenò <flameeyes@gentoo.org>
+ -files/amarok-1.4.0-audiocd.patch, -files/amarok-1.4.0-collectiondb.patch,
+ -amarok-1.4.0-r2.ebuild, +amarok-1.4.0a.ebuild:
+ New upstream release to fix issues when migrating from 1.3 version, should
+ also fix bug #133647.
+
+*amarok-1.4.0-r2 (16 May 2006)
+
+ 16 May 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4.0-collectiondb.patch, -amarok-1.4.0-r1.ebuild,
+ +amarok-1.4.0-r2.ebuild:
+ Add patch to fix leaks on connection db.
+
+*amarok-1.4.0-r1 (15 May 2006)
+
+ 15 May 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4.0-audiocd.patch, -amarok-1.4.0.ebuild,
+ +amarok-1.4.0-r1.ebuild:
+ Add patch from Markus Kaufhold in KDE bug #127388 to fix audiocd playing
+ with xine engine.
+
+ 15 May 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.4.0.ebuild:
+ Force usage of gentoo mirrors.
+
+*amarok-1.4.0 (14 May 2006)
+
+ 14 May 2006; Diego Pettenò <flameeyes@gentoo.org>
+ -amarok-1.4_beta3-r2.ebuild, +amarok-1.4.0.ebuild:
+ Update to 1.4.0 release (still not officially announced). This version
+ intentionally drops GStreamer support. It might return in 1.4.1, but please
+ don't bug me about that, talk with upstream.
+
+ 08 May 2006; Tobias Scherbaum <dertobi123@gentoo.org>
+ amarok-1.4_beta3-r2.ebuild:
+ Added to ~ppc
+
+ 05 May 2006; Diego Pettenò <flameeyes@gentoo.org> -amarok-1.3.6.ebuild,
+ -amarok-1.3.9.ebuild:
+ Drop old versions.
+
+ 28 Apr 2006; Marien Zwart <marienz@gentoo.org> files/digest-amarok-1.3.6,
+ files/digest-amarok-1.3.8, Manifest:
+ Fixing SHA256 digest, pass four
+
+ 17 Apr 2006; Markus Rothe <corsair@gentoo.org> amarok-1.4_beta3-r2.ebuild:
+ Added ~ppc64; bug #129409
+
+ 12 Apr 2006; Diego Pettenò <flameeyes@gentoo.org>
+ amarok-1.4_beta3-r2.ebuild:
+ Drop akode dep (the engine is no more already) and kioslaves support. Thanks
+ to eean for noticing this.
+
+*amarok-1.4_beta3-r2 (11 Apr 2006)
+
+ 11 Apr 2006; Diego Pettenò <flameeyes@gentoo.org>
+ -amarok-1.4_beta3-r1.ebuild, +amarok-1.4_beta3-r2.ebuild:
+ Update to 1.4-beta3c and re-enable helix.
+
+ 11 Apr 2006; Jason Wever <weeve@gentoo.org> amarok-1.4_beta3-r1.ebuild:
+ Added ~sparc keyword wrt bug #129409.
+
+ 11 Apr 2006; Diego Pettenò <flameeyes@gentoo.org>
+ amarok-1.4_beta3-r1.ebuild:
+ Disable helix engine until the missing include file is fixed.
+
+ 10 Apr 2006; Diego Pettenò <flameeyes@gentoo.org> metadata.xml:
+ Make myself direct maintaner of amarok.
+
+*amarok-1.4_beta3-r1 (10 Apr 2006)
+
+ 10 Apr 2006; Diego Pettenò <flameeyes@gentoo.org>
+ -amarok-1.4_beta3.ebuild, +amarok-1.4_beta3-r1.ebuild:
+ Add 1.4_beta3b (as -r1).
+
+ 10 Apr 2006; Diego Pettenò <flameeyes@gentoo.org>
+ amarok-1.4_beta3.ebuild:
+ Make xine the default backend always enabled. gstreamer can be added as extra.
+
+*amarok-1.4_beta3 (10 Apr 2006)
+
+ 10 Apr 2006; Diego Pettenò <flameeyes@gentoo.org>
+ -amarok-1.4_beta2-r1.ebuild, +amarok-1.4_beta3.ebuild:
+ Version bump, dropped ~ppc ~ppc64 and ~sparc keywords because of missing
+ dependencies. This version will go in ~arch.
+
+ 27 Mar 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.3.9.ebuild:
+ Restrict mirroring of 1.3.9 release and update digest as the tarball was
+ changed upstream.
+
+ 26 Mar 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.3.9.ebuild:
+ Remove Polish doc as it's broken in 1.3.9 package.
+
+*amarok-1.3.9 (26 Mar 2006)
+
+ 26 Mar 2006; Diego Pettenò <flameeyes@gentoo.org> +amarok-1.3.9.ebuild:
+ Version bump.
+
+ 15 Mar 2006; Luis Medinas <metalgod@gentoo.org> amarok-1.3.8.ebuild:
+ Stable on amd64. Bug #122609.
+
+ 15 Mar 2006; Diego Pettenò <flameeyes@gentoo.org>
+ amarok-1.4_beta2-r1.ebuild:
+ Drop --without-ifp line, was an artifact.
+
+ 07 Mar 2006; Diego Pettenò <flameeyes@gentoo.org>
+ -amarok-1.4_beta2.ebuild, amarok-1.4_beta2-r1.ebuild:
+ Add ifp useflag to enable iRiver access; thanks to Gabriel Devenyi in bug
+ #122634.
+
+*amarok-1.4_beta2-r1 (05 Mar 2006)
+
+ 05 Mar 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +amarok-1.4_beta2-r1.ebuild:
+ Add -r1 which installs itself in /usr, finally avoid installing in kde's
+ prefix.
+
+*amarok-1.4_beta2 (05 Mar 2006)
+
+ 05 Mar 2006; Diego Pettenò <flameeyes@gentoo.org>
+ -amarok-1.4_beta1.ebuild, -amarok-1.4_beta1-r1.ebuild,
+ +amarok-1.4_beta2.ebuild:
+ Add amarok 1.4_beta2.
+
+*amarok-1.4_beta1-r1 (03 Mar 2006)
+
+ 03 Mar 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +amarok-1.4_beta1-r1.ebuild:
+ Add new revision using gstreamer 0.10. Test required.
+
+ 20 Feb 2006; Gustavo Zacarias <gustavoz@gentoo.org> amarok-1.3.8.ebuild:
+ Stable on sparc wrt #122609
+
+ 19 Feb 2006; Diego Pettenò <flameeyes@gentoo.org>
+ amarok-1.4_beta1.ebuild:
+ Add optional support for helix engine (only with realplayer at the moment).
+
+ 19 Feb 2006; Chris White <chriswhite@gentoo.org> amarok-1.3.8.ebuild:
+ x86 stable per bug #122609.
+
+ 17 Feb 2006; Joseph Jezak <josejx@gentoo.org> amarok-1.3.8.ebuild:
+ Marked ppc stable for bug #122609.
+
+ 17 Feb 2006; Markus Rothe <corsair@gentoo.org> amarok-1.3.8.ebuild:
+ Stable on ppc64; bug #122609
+
+ 13 Feb 2006; Hanno Boeck <hanno@gentoo.org> amarok-1.4_beta1.ebuild:
+ Moodbar / exscalibar support added.
+
+ 13 Feb 2006; Diego Pettenò <flameeyes@gentoo.org>
+ -files/amarok-1.4_beta1-parallelmake.patch, amarok-1.4_beta1.ebuild:
+ The patch for parallel make wasn't enough as configure file should be
+ removed to recreate autotools (was already if using $LINGUAS). Instead of
+ using it, uncomment the sed line fixing it.
+
+ 12 Feb 2006; Diego Pettenò <flameeyes@gentoo.org>
+ -files/amarok-1.3.7-lyrc.patch, -amarok-1.3.7-r1.ebuild:
+ Drop old 1.3.7-r1 version, foreseeing 1.3.8 as future stable.
+
+*amarok-1.4_beta1 (12 Feb 2006)
+
+ 12 Feb 2006; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.4_beta1-parallelmake.patch, +amarok-1.4_beta1.ebuild:
+ Add 1.4_beta1 under package.mask, with patch to fix parallel make issues.
+
+ 05 Feb 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.3.8.ebuild:
+ Move the $LINGUAS handling to kde eclass.
+
+ 31 Jan 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.3.8.ebuild:
+ Make kioslaves an optional dependency on kde useflag, and add a notice about
+ it on postinst.
+
+ 30 Jan 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.3.8.ebuild:
+ Add dependency over kdemultimedia or kdemultimedia-kioslaves, for audiocd:/
+ support.
+
+ 26 Jan 2006; Diego Pettenò <flameeyes@gentoo.org> -files/amarok-gcc4.gz,
+ -amarok-1.2.4.ebuild:
+ Drop old, unsupported version, and compressed gcc4 patch.
+
+ 19 Jan 2006; Marcus D. Hanwell <cryos@gentoo.org> amarok-1.3.6.ebuild:
+ Stable on amd64, bug 114493.
+
+*amarok-1.3.8 (15 Jan 2006)
+
+ 15 Jan 2006; Diego Pettenò <flameeyes@gentoo.org> +amarok-1.3.8.ebuild:
+ Version bump, add support for honouring LINGUAS, avoid building and
+ installing extraneous data.
+
+ 11 Jan 2006; Diego Pettenò <flameeyes@gentoo.org> -amarok-1.3.7.ebuild:
+ Drop old version.
+
+ 09 Jan 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.3.7-r1.ebuild:
+ Drop kdeenablefinal useflag, it used to work back in 1.2 series but it's not
+ unsupported, and next release line will use unsermake so...
+
+ 04 Jan 2006; Diego Pettenò <flameeyes@gentoo.org> amarok-1.3.7-r1.ebuild:
+ Add kdeenablefinal flag that can be used to actually build amaroK using
+ --enable-final.
+
+*amarok-1.3.7-r1 (25 Dec 2005)
+
+ 25 Dec 2005; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.3.7-lyrc.patch, +amarok-1.3.7-r1.ebuild:
+ Add patch to fix lyrics display, thanks to Ian Monroe for letting me know.
+
+ 24 Dec 2005; Michael Hanselmann <hansmi@gentoo.org> amarok-1.3.6.ebuild:
+ Stable on ppc.
+
+ 23 Dec 2005; Markus Rothe <corsair@gentoo.org> amarok-1.3.7.ebuild:
+ Added ~ppc64
+
+ 15 Dec 2005; Diego Pettenò <flameeyes@gentoo.org> amarok-1.3.6.ebuild:
+ Fix dependency on tunepimp to 0.3, as 0.4 breaks API.
+
+ 15 Dec 2005; Chris White <chriswhite@gentoo.org> amarok-1.3.6.ebuild:
+ x86 stable for bug #114493.
+
+ 13 Dec 2005; Diego Pettenò <flameeyes@gentoo.org> amarok-1.3.7.ebuild:
+ Append -fno-inline to fix saltuary crashes on -O3 builds.
+
+*amarok-1.3.7 (07 Dec 2005)
+
+ 07 Dec 2005; Diego Pettenò <flameeyes@gentoo.org> +amarok-1.3.7.ebuild:
+ Update to latest upstream version.
+
+ 05 Dec 2005: Zaheer Merali <zaheerm@gentoo.org> amarok-1.3.6.ebuild,
+ amarok-1.2.4.ebuild:
+ Fix GStreamer dependencies
+
+ 29 Nov 2005; Diego Pettenò <flameeyes@gentoo.org> amarok-1.3.6.ebuild:
+ Move icons in global prefix to close bug #113886.
+
+ 29 Nov 2005; Gregorio Guidi <greg_g@gentoo.org> amarok-1.2.4.ebuild:
+ Change oggvorbis flag into vorbis (#94254).
+
+*amarok-1.3.6 (08 Nov 2005)
+
+ 08 Nov 2005; Diego Pettenò <flameeyes@gentoo.org> -amarok-1.3.5.ebuild,
+ +amarok-1.3.6.ebuild:
+ Update to 1.3.6 (and removal of 1.3.5) that seems to fix the crash at startup.
+
+ 05 Nov 2005; Diego Pettenò <flameeyes@gentoo.org>
+ -files/amarok-1.3.2-playlist.patch, -amarok-1.2.3.ebuild,
+ -amarok-1.3.2-r1.ebuild, -amarok-1.3.3.ebuild:
+ Remove old versions.
+
+ 28 Oct 2005; Jason Wever <weeve@gentoo.org> amarok-1.3.5.ebuild:
+ Changed -sparc keyword to ~sparc.
+
+*amarok-1.3.5 (25 Oct 2005)
+
+ 25 Oct 2005; Diego Pettenò <flameeyes@gentoo.org> -amarok-1.3.4.ebuild,
+ +amarok-1.3.5.ebuild:
+ Update to 1.3.5, as 1.3.4 seemed to have problems.
+
+*amarok-1.3.4 (24 Oct 2005)
+
+ 24 Oct 2005; Diego Pettenò <flameeyes@gentoo.org> +amarok-1.3.4.ebuild:
+ Bumped to 1.3.4.
+
+ 19 Oct 2005; Gregorio Guidi <greg_g@gentoo.org> amarok-1.3.3.ebuild:
+ Do not force arts plugins, avoiding complications due to the fact that
+ kde-base/artsplugins-akode will be providing them in KDE 3.5.
+
+ 11 Oct 2005; Diego Pettenò <flameeyes@gentoo.org> amarok-1.3.3.ebuild:
+ Cleanup configure parameters, make sure musicbrainz is disabled when
+ required, and forcefully disable extra engines.
+
+*amarok-1.3.3 (09 Oct 2005)
+
+ 09 Oct 2005; Diego Pettenò <flameeyes@gentoo.org> +amarok-1.3.3.ebuild:
+ Version bump following upstream.
+
+*amarok-1.3.2-r1 (22 Sep 2005)
+
+ 22 Sep 2005; Diego Pettenò <flameeyes@gentoo.org>
+ -files/amarok-1.3.1-gst-alsaagain.patch,
+ -files/amarok-1.3.1-gst-onlyoss.patch, -files/amarok-1.3.1-qt-3.3.5.patch,
+ +files/amarok-1.3.2-playlist.patch, -amarok-1.3.ebuild,
+ -amarok-1.3.1-r1.ebuild, -amarok-1.3.1-r2.ebuild, -amarok-1.3.2.ebuild,
+ +amarok-1.3.2-r1.ebuild:
+ Added patch to fix crashes on startup with 1.3 series. Thanks to Mark
+ Kretschmann for the patch. Purged old 1.3 ebuilds as they are not stable
+ enough.
+
+*amarok-1.3.2 (20 Sep 2005)
+
+ 20 Sep 2005; Diego Pettenò <flameeyes@gentoo.org> +amarok-1.3.2.ebuild:
+ Version bump.
+
+ 18 Sep 2005; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.3.1-qt-3.3.5.patch, amarok-1.3.1-r2.ebuild:
+ Added patch to compile with qt 3.3.5 from amaroK's SVN repository. Closes
+ bug #106366.
+
+*amarok-1.3.1-r2 (11 Sep 2005)
+
+ 11 Sep 2005; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.3.1-gst-alsaagain.patch, +amarok-1.3.1-r2.ebuild:
+ Added patch to re-add support for alsasink with gstreamer engine. Thanks to
+ Mark Kretschmann for submitting it.
+
+ 08 Sep 2005; Diego Pettenò <flameeyes@gentoo.org> amarok-1.3.1-r1.ebuild:
+ Don't force using gst-plugins-oss, let the uesrs select what they want.
+ Close #105298. The sed for libpq-fe is no more needed. Make musicbrainz
+ optional with musicbrainz useflag. Close #105298.
+
+*amarok-1.3.1-r1 (08 Sep 2005)
+
+ 08 Sep 2005; Diego Pettenò <flameeyes@gentoo.org>
+ +files/amarok-1.3.1-gst-onlyoss.patch, -amarok-1.3.1.ebuild,
+ +amarok-1.3.1-r1.ebuild:
+ Added patch to avoid using autodetection with gstreamer (crashes when using
+ alsa). Added a note for gstreamer users and a dependency over oss plugin.
+ Consider using xine backend if you want alsa output.
+
+*amarok-1.3.1 (06 Sep 2005)
+
+ 06 Sep 2005; Diego Pettenò <flameeyes@gentoo.org> +amarok-1.3.1.ebuild:
+ Added amarok 1.3.1, masked due to problems with gstreamer and alsa.
+
+*amarok-1.3 (15 Aug 2005)
+
+ 15 Aug 2005; Diego Pettenò <flameeyes@gentoo.org>
+ -amarok-1.3_beta3.ebuild, +amarok-1.3.ebuild:
+ Updated to amarok-1.3 final.
+
+ 08 Aug 2005; Gregorio Guidi <greg_g@gentoo.org> amarok-1.2.3.ebuild,
+ amarok-1.2.4.ebuild, amarok-1.3_beta3.ebuild:
+ Raise dependency on mysql for bug #101717.
+
+ 07 Aug 2005; Carsten Lohrke <carlo@gentoo.org> amarok-1.3_beta3.ebuild:
+ fix build with postgres
+
+*amarok-1.3_beta3 (01 Aug 2005)
+
+ 01 Aug 2005; Diego Pettenò <flameeyes@gentoo.org>
+ +amarok-1.3_beta3.ebuild:
+ New upstream version. Closes #101001. Still in package.mask being a beta.
+
+ 31 Jul 2005; Diego Pettenò <flameeyes@gentoo.org> amarok-1.2.3.ebuild,
+ amarok-1.2.4.ebuild, amarok-1.3_beta1.ebuild, amarok-1.3_beta2.ebuild:
+ Use ${KDEDIR} instead of kde-config to set PREFIX as it's not in path during
+ src_compile().
+
+ 30 Jul 2005; Simon Stelling <blubb@gentoo.org> amarok-1.2.4.ebuild:
+ stable on amd64
+
+ 10 Jul 2005; Joseph Jezak <josejx@gentoo.org> amarok-1.2.4.ebuild:
+ Marked ppc stable.
+
+ 08 Jul 2005; Carsten Lohrke <carlo@gentoo.org> amarok-1.2.4.ebuild:
+ stable on x86
+
+ 09 Jul 2005; Gregorio Guidi <greg_g@gentoo.org> amarok-1.3_beta2.ebuild:
+ Move amarok.desktop in /usr/share/applications (#77515).
+
+*amarok-1.3_beta2 (27 Jun 2005)
+
+ 27 Jun 2005; Diego Pettenò <flameeyes@gentoo.org>
+ +amarok-1.3_beta2.ebuild:
+ New upstream beta.
+
+ 22 Jun 2005; Hanno Boeck <hanno@gentoo.org> +files/amarok-gcc4.gz,
+ amarok-1.2.4.ebuild:
+ Fix for gcc4.
+
+ 17 Jun 2005; Joseph Jezak <josejx@gentoo.org> amarok-1.2.3.ebuild:
+ Marked ppc stable.
+
+ 16 Jun 2005; Diego Pettenò <flameeyes@gentoo.org>
+ amarok-1.3_beta1.ebuild:
+ Amarok 1.3 depends on kde 3.3 not 3.4.
+
+ 08 Jun 2005; Gregorio Guidi <greg_g@gentoo.org> amarok-1.3_beta1.ebuild:
+ Change flag 'oggvorbis' into 'vorbis' (#89592). Change 'mad' into 'mp3'. Add
+ missing configure switches.
+
+*amarok-1.3_beta1 (06 Jun 2005)
+
+ 06 Jun 2005; Heinrich Wendel <lanius@gentoo.org> +amarok-1.3_beta1.ebuild:
+ version bump
+
+*amarok-1.2.4 (21 May 2005)
+
+ 21 May 2005; Heinrich Wendel <lanius@gentoo.org> -amarok-1.2.ebuild,
+ -amarok-1.2.1.ebuild, -amarok-1.2.2.ebuild, amarok-1.2.3.ebuild,
+ +amarok-1.2.4.ebuild:
+ version bump, cleanups
+
+ 14 May 2005; Heinrich Wendel <lanius@gentoo.org> amarok-1.2.3.ebuild:
+ stable on amd64 and x86
+
+ 07 Apr 2005; Simon Stelling <blubb@gentoo.org> amarok-1.2.1.ebuild:
+ stable on amd64
+
+*amarok-1.2.3 (29 Mar 2005)
+
+ 29 Mar 2005; Jan Brinkmann <luckyduck@gentoo.org> +amarok-1.2.3.ebuild:
+ new upstream version, thanks to Diego Pettenò <dgp85@users.sourceforge.net>
+
+ 21 Mar 2005; Gregorio Guidi <greg_g@gentoo.org> amarok-1.2.1.ebuild:
+ Stable on x86.
+
+*amarok-1.2.2 (18 Mar 2005)
+
+ 18 Mar 2005; Gregorio Guidi <greg_g@gentoo.org>
+ +files/amarok-1.2.2-contextbrowser-cpu-fix.patch, +amarok-1.2.2.ebuild:
+ New version (#85284). Correct gstreamer dependencies (#84663). Add support for
+ visualization plugins through libvisual (#82165). Warn that aRts support is
+ deprecated (as requested in bug #85542). Add patch to fix kde bug 101524.
+
+*amarok-1.2.1 (01 Mar 2005)
+
+ 01 Mar 2005; Carsten Lohrke <carlo@gentoo.org> +amarok-1.2.1.ebuild:
+ version bump
+
+*amarok-1.2 (13 Feb 2005)
+
+ 13 Feb 2005; Gregorio Guidi <greg_g@gentoo.org> +amarok-1.2.ebuild:
+ Version bump.
+
+ 02 Feb 2005; Gregorio Guidi <greg_g@gentoo.org> -files/amarok-1.0-cjk.diff,
+ amarok-1.2_beta4.ebuild:
+ Removed cjk patch, it does not apply anymore.
+
+*amarok-1.2_beta4 (01 Feb 2005)
+
+ 01 Feb 2005; Gregorio Guidi <greg_g@gentoo.org> -amarok-1.2_beta2.ebuild,
+ -amarok-1.2_beta3.ebuild, +amarok-1.2_beta4.ebuild:
+ Version bump.
+
+ 30 Jan 2005; Jan Brinkmann <luckyduck@gentoo.org> amarok-1.1.1.ebuild:
+ added missing libsdl dependency. fixes #72395
+
+ 15 Jan 2005; Dan Armak <danarmak@gentoo.org> amarok-1.0.2.ebuild,
+ amarok-1.1.1.ebuild, amarok-1.2_beta2.ebuild, amarok-1.2_beta3.ebuild:
+ Changed deps on kdebase, kdemultimedia to accept kdebase-meta and
+ kdemultimedia-meta, the split 'meta' packages. This dep will be narrowed
+ down in the future to the precise split packages required.
+
+*amarok-1.2_beta3 (11 Jan 2005)
+
+ 11 Jan 2005; Jeremy Huddleston <eradicator@gentoo.org>
+ +amarok-1.2_beta3.ebuild:
+ Version bump closes bug #77185.
+
+ 04 Jan 2005; Jeremy Huddleston <eradicator@gentoo.org>
+ amarok-1.1.1.ebuild, amarok-1.2_beta2.ebuild:
+ Updating version on xine dependency per bug #70260.
+
+ 13 Dec 2004; Jeremy Huddleston <eradicator@gentoo.org>
+ -amarok-1.2_beta1.ebuild, amarok-1.2_beta2.ebuild:
+ Added mysql support.
+
+*amarok-1.2_beta2 (12 Dec 2004)
+
+ 12 Dec 2004; Jeremy Huddleston <eradicator@gentoo.org>
+ +amarok-1.2_beta2.ebuild:
+ Version bump.
+
+ 04 Dec 2004; Jeremy Huddleston <eradicator@gentoo.org>
+ amarok-1.1.1.ebuild, amarok-1.2_beta1.ebuild:
+ Relaxing the arts dependency. Closes bug #72869.
+
+ 30 Nov 2004; Sven Wegener <swegener@gentoo.org> amarok-1.1.1.ebuild,
+ amarok-1.2_beta1.ebuild:
+ Fixed invalid atoms in *DEPEND.
+
+*amarok-1.2_beta1 (29 Nov 2004)
+
+ 29 Nov 2004; Jeremy Huddleston <eradicator@gentoo.org>
+ amarok-1.1.1.ebuild, +amarok-1.2_beta1.ebuild:
+ Version bump (package.mask'd beta) and fix missing depend on
+ media-sound/kdemultimedia for CD playback.
+
+ 22 Nov 2004; Jeremy Huddleston <eradicator@gentoo.org>
+ amarok-1.1.1.ebuild:
+ -sparc
+
+ 12 Nov 2004; Jeremy Huddleston <eradicator@gentoo.org> -amarok-0.9.ebuild,
+ amarok-1.1.1.ebuild:
+ Cleanup.
+
+ 07 Nov 2004; Jeremy Huddleston <eradicator@gentoo.org>
+ amarok-1.1.1.ebuild:
+ Readded gstreamer support forcing the mad plugin to be installed for
+ gstreamer support as the ffmpeg plugin won't work (see bug #66902).
+
+ 05 Nov 2004; Jeremy Huddleston <eradicator@gentoo.org>
+ amarok-1.1.1.ebuild:
+ Removing gstreamer support as it is horribly broken and uses 100% CPU under
+ some circumstances... see bug #65434 comment #3.
+
+ 26 Oct 2004; Jeremy Huddleston <eradicator@gentoo.org>
+ amarok-1.1.1.ebuild:
+ Changing dep to =libvisual-0.1.6 to close bug #68731.
+
+*amarok-1.1.1 (09 Oct 2004)
+
+ 09 Oct 2004; Jeremy Huddleston <eradicator@gentoo.org>
+ +amarok-1.1.1.ebuild, -amarok-1.1.ebuild:
+ Version bump for bug #66902.
+
+ 30 Sep 2004; Jeremy Huddleston <eradicator@gentoo.org> amarok-1.1.ebuild:
+ Removed noamazon support as it is broken in this version. Fixed upstream for
+ next release.
+
+ 28 Sep 2004; Jeremy Huddleston <eradicator@gentoo.org> amarok-1.1.ebuild:
+ Added noamazon USE flag to turn off support for downloading covers from
+ amazon.com
+
+*amarok-1.0.1 (27 Sep 2004)
+
+ 27 Sep 2004; Jeremy Huddleston <eradicator@gentoo.org> -amarok-1.0.1.ebuild,
+ -amarok-1.0.ebuild, -amarok-1.1_beta2.ebuild:
+ Version bump and cleanup.
+
+ 22 Sep 2004; Jeremy Huddleston <eradicator@gentoo.org>
+ amarok-1.1_beta2.ebuild:
+ Added arts to IUSE.
+
+*amarok-1.1_beta2 (15 Sep 2004)
+
+ 15 Sep 2004; Jeremy Huddleston <eradicator@gentoo.org>
+ +amarok-1.1_beta2.ebuild:
+ Version bump closes bug #61723.
+
+ 03 Sep 2004; Jeremy Huddleston <eradicator@gentoo.org>
+ -amarok-1.0_beta3.ebuild, -amarok-1.0_beta4.ebuild:
+ 1.0.2 stable amd64, x86. Removing old ebuilds.
+
+*amarok-1.0.2 (09 Aug 2004)
+
+ 09 Aug 2004; Patrick Dawson <pkdawson@gentoo.org> amarok-1.0.2.ebuild:
+ Version bump, closes bug #59600. Added a xine USE flag.
+ Thanks to Andrew Cooks <andrew@expertron.co.za>
+
+ 06 Jul 2004; Frank van de Pol <fvdpol@gentoo.org> :
+ Version bump, closes bug #55898.
+
+ 03 Jul 2004; Carsten Lohrke <carlo@gentoo.org> amarok-1.0.ebuild:
+ QA: need-kde after R/DEPEND
+
+ 18 Jun 2004; Dominik Stadler <centic@gentoo.org> amarok-1.0.ebuild:
+ According to the README we should require gstreamer 0.8.1
+
+*amarok-1.0 (18 Jun 2004)
+
+ 18 Jun 2004; Dominik Stadler <centic@gentoo.org>
+ +files/amarok-1.0-cjk-a.diff, +amarok-1.0.ebuild:
+ Add Version 1.0, fixes Bug 54251 and add ~amd64, fixes Bug 54305
+
+*amarok-1.0_beta4 (15 Jun 2004)
+
+ 15 Jun 2004; Jon Hood <squinky86@gentoo.org> +files/amarok-1.0-cjk.diff,
+ amarok-1.0_beta3.ebuild, +amarok-1.0_beta4.ebuild:
+ adding cjk patch and version bump from Jackey Yang <043936y@acadiau.ca>,
+ closes #52930
+
+*amarok-1.0_beta3 (22 May 2004)
+
+ 22 May 2004; Jon Hood <squinky86@gentoo.org> -amarok-0.7.0.ebuild,
+ -amarok-0.8.3.ebuild, +amarok-1.0_beta3.ebuild:
+ version bump, closes #51133
+
+ 25 Apr 2004; Danny van Dyk <kugelfang@gentoo.org> amarok-0.9.ebuild:
+ marked ~amd64.
+
+ 24 Apr 2004; Heinrich Wendel <lanius@gentoo.org> amarok-0.7.0.ebuild,
+ amarok-0.8.3.ebuild, amarok-0.9.ebuild, amarok-1.0_beta1.ebuild:
+ fix depend
+
+ 20 Apr 2004; Jeremy Huddleston <eradicator@gentoo.org> amarok-0.7.0.ebuild,
+ amarok-0.8.3.ebuild:
+ Added IUSE.
+
+*amarok-1.0_beta1 (12 Apr 2004)
+
+ 12 Apr 2004; Jeremy Huddleston <eradicator@gentoo.org>
+ amarok-1.0_beta1.ebuild:
+ Version bump closes bug #47539.
+
+ 14 Apr 2004; Heinrich Wendel <lanius@gentoo.org> amarok-0.7.0.ebuild,
+ amarok-0.8.3.ebuild, amarok-0.9.ebuild:
+ fix depend, mark 0.9 stable
+
+ 17 Mar 2004; David Holm <dholm@gentoo.org> amarok-0.9.ebuild:
+ Added to ~ppc.
+
+*amarok-0.9 (16 Mar 2004)
+
+ 16 Mar 2004; Heinrich Wendel <lanius@gentoo.org> amarok-0.9.ebuild,
+ amarok-0.9_beta2.ebuild:
+ version bump
+
+ 23 Feb 2004; Heinrich Wendel <lanius@gentoo.org> amarok-0.8.3.ebuild:
+ mark x86
+
+ 23 Feb 2004; Heinrich Wendel <lanius@gentoo.org> amarok-0.9_beta2.ebuild:
+ version bump
+
+*amarok-0.7.0 (22 Jan 2004)
+*amarok-0.8.3 (22 Jan 2004)
+
+ 22 Jan 2004; Heinrich Wendel <lanius@gentoo.org> amarok-0.6.0.ebuild,
+ amarok-0.6.91.ebuild, amarok-0.7.0.ebuild, amarok-0.8.3.ebuild:
+ version bump; mark 0.7.0 x86
+
+ 15 Nov 2003; Heinrich Wendel <lanius@gentoo.org> :
+ bump
+
+*amarok-0.6.91 (30 Oct 2003)
+
+ 30 Oct 2003; Heinrich Wendel <lanius@gentoo.org> amarok-0.6.91.ebuild:
+ bump
+
+ 26 Sep 2003; Alex Veber <coronalvr@gentoo.org> amarok-0.6.0.ebuild:
+ added a missing dep on kdemultimedia
+
+*amarok-0.6.0 (21 Sep 2003)
+
+ 21 Sep 2003; jje <jje@gentoo.org> amarok-0.6.0.ebuild:
+ Initial revision.
+
+ Submitted by: Okrain Genady <mafteah@mafteah.co.il>
diff --git a/media-sound/amarok/Manifest b/media-sound/amarok/Manifest
new file mode 100644
index 0000000..0f1114b
--- /dev/null
+++ b/media-sound/amarok/Manifest
@@ -0,0 +1,11 @@
+AUX amarok-2.3.2-fix-qt-regression.patch 2958 SHA256 2f2a77552a06e6ec30106d8cb1f012f3f4213ac3354e64c7fe7f6933deb6d6ab SHA512 11593a7be35c533bfef88d0683c34fb8c5e42652c0500422c7d89030115b6a14b047bb06468d0fbb4a5748b4d213d9ddab838ead973c8a5dc7dbef8e3190fae9 WHIRLPOOL 45d8341d22be5f5bee2cf948d3ca31c021fb10e6f048efd8c8bc4e34ace29984bde8d9a93a1c1a8eec5e41a5ed4ffa9135f71059a9dd5309100b766e901600ae
+AUX amarok-2.3.2-flac-fix.patch 1233 SHA256 f68f3c9b4fb8be02a37ac21d535d417b8fa6167d123e6e13e98c26fb758e40f1 SHA512 5ca8d8fdd2afb7423e03803bb8409756cbaf1986b9744b0962ded599a680df89f2ee2ff90bcbc6f1a83769b24391893c268ad586a15af13646dfb25b245067ac WHIRLPOOL 1b82bfeea2c5cc775ef40dace49478e5af1a2f82e0e38395fe1f0eb523e7945bdbdcf9dab88f27db548e8cb4801bb24ca28897195079b93e187984d14b96dbc9
+AUX amarok-2.4.0.90-fix-plugin-detection.patch 623 SHA256 aae0ceca58b36ae714516fe46f1a4011836a3e3256a7efd106fdb8568e1fdbcf SHA512 8ee5ecee47ee7590c7888081dc2a6c1fca925e56f39c8fe2354afba2c58f5aab2af84c33962291506b0c861220b31e30fea808fbb6daeb4e93918b3935a8df6f WHIRLPOOL 47dd4592d7a3a16511f86e09f740604adb179b817856680b260ebbeacf07d8075b7067d05a282e262142f88215b891624434d1a2f25658ccfd52242214c1332f
+AUX amarok-2.5.0-fix-context-view-on-startup.patch 1217 SHA256 8e9c224ff81a2d39898820a4a219a589fc9dd12c2cdea7d159db5329179fb49c SHA512 5a73ca88ed7503f69d999ca76f952d7681b172de1e12edff872e164db66d24bc92d89f696e69dbaa85ab55c82b776bf1e4876ffb4db4e67d5e80782efe436238 WHIRLPOOL 13e244cc9f645736469cb4fa991af74ee7d389914494fa6886c685dd41b8b7fbf8de5c417a43de8ad1d27e7c8465f59e627e4e27db469da4c847fe99101d479e
+AUX amarok-2.5.0-kde48.patch 2111 SHA256 4ee6b27d79d42e7fbb5469f46c3ebaf69eef73ff83cb0882e44f4d993ba0ce51 SHA512 27dfba494cf2a12db9b2300de3c2b217c1b84945daa32881152f9e9eddea637ace74ff37cf7d3855a405c6618bfeb45929600e0fedbffc255e91c7dbc5663e8e WHIRLPOOL 3f8968ecd3209dd284de1cae6138613a5c3ab2240f8bd3357884032424f3450b93d0c27f8ede70b6bd5f9136a249cd33508ac0c3df325184edc28c5eab389ada
+AUX amarok-2.5.0-qtdebug.patch 2787 SHA256 a2b4ff34c38741979a76b96e0a741e5da7cadecc1a592035e10773b233d38f29 SHA512 5ea1523e16d9889a027866ee5e3f8bf8bb9efe743f55f7b5871aa6ef1a8f5341744b6858547251a9f472f840911cc516f247021659280a28f35eed41e27f5f85 WHIRLPOOL e2b8a58ad15e3d76e0a66befa044dd5b32e3838ddd0a94f767d723288c40854d257e1fe110f5b13c57b1d5842a47a4489c60711f9c8240c67dfc67524a2a24a6
+AUX amarok-fix-upnp-dep.patch 1896 SHA256 e88481548d77d334adb51250ee2e70186249ee51164f060382a7b1ee2c6839d6 SHA512 7bc7f42ffed5501bd7479705228f4dbb0219f7e3375483bad38f4097ce636390bcde97bbf88d219f2f2af8c034333791086d7854c98fb6da9fabc0a077b9af7b WHIRLPOOL aed5d81ed31de6230f4a142b6668f73a730b1a383de75b94a0c08f6718ae6ec8197346079343a95f8f87c862b666972a04c1686cba5cee40af6e841265dff46d
+DIST amarok-2.6.0.tar.bz2 42331208 SHA256 a91280e588181cf9363d7146f339ef527220fe0c8057f26f010f592b01fdd2c0 SHA512 da67876dfc41dcc3e1f3087698d36dabb43a339cef1669ca0518de191e2d9dd2e3e72122ffe76ecfd763e83547e46c55bba8606c095d35c85058df77bf35fb4a WHIRLPOOL 70fadaff2565fc2e9d8cb628942ec8107c6f4fcea0bd3e898f4ba6a72231ebaca8cb1d924f1413ced7c82940790438c9dcbe2fba7760e356b100eb832d8a2edc
+EBUILD amarok-2.6.0-r1.ebuild 3372 SHA256 e3fc2a2b12e5e9caa48f8a666f16d3e838c440448d794f041a0823823f6c3798 SHA512 ed6714d6690dc839938ebffcb094a4a64c2fa82e84e483d299e7d6493b57398c892dfedc451fad51ab2b58d16efd219268b46ed0707c2bc1c007704e96ef0e05 WHIRLPOOL 34185a1c5db77fd6fe12d740fd3f0cbb862e7f639990bda3cd30fa7f1d536daea93cf9ac95cbad3d75288419aa2c0cff5330d8c21f8613c6de807acd5e99a1f6
+MISC ChangeLog 74665 SHA256 559147db3d9fb09c16d321de4f53e51f28576966fb1ee0864b33ea6a4c4e2793 SHA512 17a83242764dd0bb511fa6c2f00f79461a5e28e3da83d4c5c736465bfe25fd0b455a13be41fe9aca844b6a6674ceebc172b37d402311924c31fc5c573e49f95b WHIRLPOOL 10a6d89aabe776e0a1771935e2c54cdee370b33a5a8e4fdea777e8612210f5868838338c5a9c468b10be3d9661fc25f18de90df2487e9eda0d4847a2ce7648b9
+MISC metadata.xml 1283 SHA256 dbd309064732531993f21257f6db969c681545fcf7dd4766daac33bb41da0451 SHA512 f61fc22596e31125cd7e4964d0699527e79fb5bf39e7708c1051eb1a3bf9f23dbc4310f9e94da58672a81d1a93c57b7924d84fb8af86e9ac78962b0ee3ffee7f WHIRLPOOL 3e408437f2857ba19314e17056da6204226e42362cccc75fe2c26931499b2c05abb6c672255dc29682bd77f2acb069e36dac568daf13a388a047a6cf616a13d8
diff --git a/media-sound/amarok/amarok-2.6.0-r1.ebuild b/media-sound/amarok/amarok-2.6.0-r1.ebuild
new file mode 100644
index 0000000..ae159d1
--- /dev/null
+++ b/media-sound/amarok/amarok-2.6.0-r1.ebuild
@@ -0,0 +1,124 @@
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-sound/amarok/amarok-2.6.0.ebuild,v 1.1 2012/08/11 20:40:33 scarabeus Exp $
+
+EAPI=4
+
+KDE_LINGUAS="bs ca cs da de el en_GB es et eu fi ga gl hu it ja lt lv nb nl pa
+pl pt pt_BR ru sl sr sr@latin sv uk zh_TW"
+KDE_SCM="git"
+KDE_REQUIRED="never"
+inherit flag-o-matic kde4-base
+
+DESCRIPTION="Advanced audio player based on KDE framework."
+HOMEPAGE="http://amarok.kde.org/"
+if [[ ${PV} != *9999* ]]; then
+ SRC_URI="mirror://kde/stable/${PN}/${PV}/src/${P}.tar.bz2"
+ KEYWORDS="~amd64 ~ppc ~ppc64 ~x86"
+else
+ KEYWORDS=""
+fi
+
+LICENSE="GPL-2"
+SLOT="4"
+IUSE="cdda daap debug +embedded ipod lastfm mp3tunes mtp ofa opengl semantic-desktop +utils"
+
+# Tests require gmock - http://code.google.com/p/gmock/
+# It's not in the tree yet
+RESTRICT="test"
+
+# ipod requires gdk enabled and also gtk compiled in libgpod
+COMMONDEPEND="
+ app-crypt/qca:2
+ >=app-misc/strigi-0.5.7
+ $(add_kdebase_dep kdelibs 'opengl?,semantic-desktop?')
+ $(add_kdebase_dep kdebase-kioslaves)
+ >=media-libs/taglib-1.6.1[asf,mp4]
+ >=media-libs/taglib-extras-1.0.1
+ sys-libs/zlib
+ >=virtual/mysql-5.1[embedded?]
+ x11-libs/qt-core:4
+ x11-libs/qt-dbus:4
+ x11-libs/qt-script:4
+ >=x11-libs/qtscriptgenerator-0.1.0
+ cdda? (
+ $(add_kdebase_dep libkcddb)
+ $(add_kdebase_dep libkcompactdisc)
+ )
+ ipod? ( >=media-libs/libgpod-0.7.0[gtk] )
+ lastfm? ( =media-libs/liblastfm-0.3* )
+ mp3tunes? (
+ dev-libs/glib:2
+ dev-libs/libxml2
+ dev-libs/openssl
+ net-libs/loudmouth
+ net-misc/curl
+ x11-libs/qt-core:4[glib]
+ )
+ mtp? ( >=media-libs/libmtp-1.0.0 )
+ ofa? ( >=media-libs/libofa-0.9.0 )
+ opengl? ( virtual/opengl )
+"
+DEPEND="${COMMONDEPEND}
+ dev-util/automoc
+ virtual/pkgconfig
+"
+RDEPEND="${COMMONDEPEND}
+ !media-sound/amarok-utils
+ $(add_kdebase_dep phonon-kde)
+"
+
+src_configure() {
+ # Append minimal-toc cflag for ppc64, see bug 280552 and 292707
+ use ppc64 && append-flags -mminimal-toc
+ local mycmakeargs
+
+ mycmakeargs=(
+ -DWITH_PLAYER=ON
+ -DWITH_Libgcrypt=OFF
+ -DWITH_SPECTRUM_ANALYZER=ON
+ $(cmake-utils_use embedded WITH_MYSQL_EMBEDDED)
+ $(cmake-utils_use_with ipod)
+ $(cmake-utils_use_with ipod Gdk)
+ $(cmake-utils_use_with lastfm LibLastFm)
+ $(cmake-utils_use_with mtp)
+ $(cmake-utils_use_with mp3tunes MP3Tunes)
+ $(cmake-utils_use_with ofa LibOFA)
+ )
+
+ mycmakeargs+=(
+ $(cmake-utils_use_with utils UTILITIES)
+ )
+
+ # $(cmake-utils_use_with semantic-desktop Nepomuk)
+ # $(cmake-utils_use_with semantic-desktop Soprano)
+
+ kde4-base_src_configure
+}
+
+pkg_postinst() {
+ kde4-base_pkg_postinst
+
+ if use daap; then
+ echo
+ elog "You have installed amarok with daap support."
+ elog "You may be interested in installing www-servers/mongrel as well."
+ echo
+ fi
+
+ if ! use embedded; then
+ echo
+ elog "You've disabled the amarok support for embedded mysql DBs."
+ elog "You'll have to configure amarok to use an external db server."
+ echo
+ elog "Please read http://amarok.kde.org/wiki/MySQL_Server for details on how"
+ elog "to configure the external db and migrate your data from the embedded database."
+ echo
+
+ if has_version "virtual/mysql[minimal]"; then
+ elog "You built mysql with the minimal use flag, so it doesn't include the server."
+ elog "You won't be able to use the local mysql installation to store your amarok collection."
+ echo
+ fi
+ fi
+}
diff --git a/media-sound/amarok/files/amarok-2.3.2-fix-qt-regression.patch b/media-sound/amarok/files/amarok-2.3.2-fix-qt-regression.patch
new file mode 100644
index 0000000..4e8faec
--- /dev/null
+++ b/media-sound/amarok/files/amarok-2.3.2-fix-qt-regression.patch
@@ -0,0 +1,83 @@
+From 79d86829294ac54132c01153660e70e30c15c378 Mon Sep 17 00:00:00 2001
+From: Jeff Mitchell <mitchell@kde.org>
+Date: Wed, 22 Sep 2010 18:15:17 -0400
+Subject: [PATCH] Re-add some tests for unprintable but also invalid chars. Apparently Qt's XML classes don't properly check for invalid chars when writing XML, even if you tell them to.
+
+Also switch to QXmlStreamWriter, as apparently going forward it is the more supported class.
+
+BUG: 251762
+---
+ utilities/collectionscanner/CollectionScanner.cpp | 27 +++++++++++++-------
+ 1 files changed, 17 insertions(+), 10 deletions(-)
+
+diff --git a/utilities/collectionscanner/CollectionScanner.cpp b/utilities/collectionscanner/CollectionScanner.cpp
+index 0a23a53..28c554b 100644
+--- a/utilities/collectionscanner/CollectionScanner.cpp
++++ b/utilities/collectionscanner/CollectionScanner.cpp
+@@ -37,13 +37,13 @@
+ #include <QByteArray>
+ #include <QDBusReply>
+ #include <QDir>
+-#include <QDomDocument>
+ #include <QFile>
+ #include <QtDebug>
+ #include <QTextCodec>
+ #include <QTextStream>
+ #include <QTimer>
+ #include <QThread>
++#include <QXmlStreamWriter>
+
+ //Taglib:
+ #include <apetag.h>
+@@ -814,8 +814,10 @@ CollectionScanner::readTags( const QString &path, TagLib::AudioProperties::ReadS
+ void
+ CollectionScanner::writeElement( const QString &name, const AttributeHash &attributes )
+ {
+- QDomDocument doc; // A dummy. We don't really use DOM, but SAX2
+- QDomElement element = doc.createElement( name );
++ QString text;
++ QXmlStreamWriter writer( &text );
++
++ writer.writeStartElement( name );
+
+ QHashIterator<QString, QString> it( attributes );
+ while( it.hasNext() )
+@@ -829,7 +831,15 @@ CollectionScanner::writeElement( const QString &name, const AttributeHash &attri
+ bool noCategory = false;
+ for( unsigned i = 0; i < len; i++ )
+ {
+- if( data[i].category() == QChar::NoCategory )
++ if( data[i].category() == QChar::NoCategory ||
++ data[i].category() == QChar::Other_Surrogate ||
++ (
++ data[i].unicode() < 20 &&
++ data[i].unicode() != 9 &&
++ data[i].unicode() != 10 &&
++ data[i].unicode() != 13
++ )
++ )
+ {
+ noCategory = true;
+ break;
+@@ -838,15 +848,12 @@ CollectionScanner::writeElement( const QString &name, const AttributeHash &attri
+
+ if( noCategory )
+ continue;
+-
+- element.setAttribute( it.key(), it.value() );
++ writer.writeAttribute( it.key(), it.value() );
+ }
+
+- QString text;
+- QTextStream stream( &text, QIODevice::WriteOnly );
+- element.save( stream, 0 );
++ writer.writeEndElement();
+
+- std::cout << text.toUtf8().data() << std::endl;
++ std::cout << text.toUtf8().data() << std::endl << std::endl;
+ }
+
+ // taken verbatim from Qt's sources, since it's stupidly in the QtGui module
+--
+1.7.0.4
+
diff --git a/media-sound/amarok/files/amarok-2.3.2-flac-fix.patch b/media-sound/amarok/files/amarok-2.3.2-flac-fix.patch
new file mode 100644
index 0000000..3415826
--- /dev/null
+++ b/media-sound/amarok/files/amarok-2.3.2-flac-fix.patch
@@ -0,0 +1,21 @@
+commit ce57e4264d0395b15e7253e3cdef48e36a8b129c
+Author: Jeff Mitchell <mitchell@kde.org>
+Date: Fri Sep 17 13:02:38 2010 -0400
+
+ FLAC BPM tags could be read in incorrectly.
+
+ BUG: 234166
+
+diff --git a/utilities/collectionscanner/CollectionScanner.cpp b/utilities/collectionscanner/CollectionScanner.cpp
+index a9d6755..0a23a53 100644
+--- a/utilities/collectionscanner/CollectionScanner.cpp
++++ b/utilities/collectionscanner/CollectionScanner.cpp
+@@ -701,7 +701,7 @@ CollectionScanner::readTags( const QString &path, TagLib::AudioProperties::ReadS
+ attributes["composer"] = TStringToQString( file->xiphComment()->fieldListMap()["COMPOSER"].front() ).trimmed();
+
+ if ( !file->xiphComment()->fieldListMap()[ "BPM" ].isEmpty() )
+- attributes["bpm"] = TStringToQString( file->xiphComment()->fieldListMap()["BPM"].front() ).trimmed().toFloat();
++ attributes["bpm"] = TStringToQString( file->xiphComment()->fieldListMap()["BPM"].front() ).trimmed();
+
+ if ( !file->xiphComment()->fieldListMap()[ "DISCNUMBER" ].isEmpty() )
+ disc = TStringToQString( file->xiphComment()->fieldListMap()["DISCNUMBER"].front() ).trimmed(); \ No newline at end of file
diff --git a/media-sound/amarok/files/amarok-2.4.0.90-fix-plugin-detection.patch b/media-sound/amarok/files/amarok-2.4.0.90-fix-plugin-detection.patch
new file mode 100644
index 0000000..d075ba0
--- /dev/null
+++ b/media-sound/amarok/files/amarok-2.4.0.90-fix-plugin-detection.patch
@@ -0,0 +1,19 @@
+commit 37eda947bd8181a73ad0fffc88e66c25ddd69f28
+Author: Rick W. Chen <stuffcorpse@archlinux.us>
+Date: Thu Mar 17 18:38:19 2011 +1300
+
+ Fix plugin loading and bump_plugin_version.rb script
+
+diff --git a/src/PluginManager.cpp b/src/PluginManager.cpp
+index ff52646..1e34510 100644
+--- a/src/PluginManager.cpp
++++ b/src/PluginManager.cpp
+@@ -32,7 +32,7 @@
+ #include <QFile>
+ #include <QMetaEnum>
+
+-const int Plugins::PluginManager::s_pluginFrameworkVersion = 60;
++const int Plugins::PluginManager::s_pluginFrameworkVersion = 61;
+ Plugins::PluginManager* Plugins::PluginManager::s_instance = 0;
+
+ Plugins::PluginManager*
diff --git a/media-sound/amarok/files/amarok-2.5.0-fix-context-view-on-startup.patch b/media-sound/amarok/files/amarok-2.5.0-fix-context-view-on-startup.patch
new file mode 100644
index 0000000..f39113b
--- /dev/null
+++ b/media-sound/amarok/files/amarok-2.5.0-fix-context-view-on-startup.patch
@@ -0,0 +1,28 @@
+commit a0f4288e0b952830d38151264c0a8b042e32d8a4
+Author: Matěj Laitl <matej@laitl.cz>
+Date: Tue Jun 26 00:42:50 2012 +0200
+
+ Fix Context view not being fully formed on startup
+
+ Something from inside Plasma tries to resize context view's sceneRect()
+ to 200x200 px. I don't know why this happens, but let's hope we'll have
+ QML context view soon, so don't investigate and use a work-around.
+
+ BUG: 292895
+ FIXED-IN: 2.6
+ DIGEST: popular bug fixed in Amarok
+
+diff --git a/src/context/containments/verticallayout/VerticalToolbarContainment.cpp b/src/context/containments/verticallayout/VerticalToolbarContainment.cpp
+index a23305f..8fa6f9b 100644
+--- a/src/context/containments/verticallayout/VerticalToolbarContainment.cpp
++++ b/src/context/containments/verticallayout/VerticalToolbarContainment.cpp
+@@ -129,7 +129,8 @@ Context::VerticalToolbarContainment::updateGeometry()
+ if(!view())
+ return;
+
+- QRectF rect = view()->sceneRect();
++ // mimic ContextView::resizeEvent(), nothing else seems to work, bug 292895
++ QRectF rect( view()->pos(), view()->maximumViewportSize() );
+ setGeometry( rect );
+ m_applets->setGeometry( rect );
+ m_applets->refresh();
diff --git a/media-sound/amarok/files/amarok-2.5.0-kde48.patch b/media-sound/amarok/files/amarok-2.5.0-kde48.patch
new file mode 100644
index 0000000..b110eeb
--- /dev/null
+++ b/media-sound/amarok/files/amarok-2.5.0-kde48.patch
@@ -0,0 +1,62 @@
+diff --git a/src/context/ToolbarView.cpp b/src/context/ToolbarView.cpp
+index f3b4916..840b99b 100644
+--- a/src/context/ToolbarView.cpp
++++ b/src/context/ToolbarView.cpp
+@@ -74,7 +74,9 @@ Context::ToolbarView::ToolbarView( Plasma::Containment* containment, QGraphicsSc
+ setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
+
+ // now we create the toolbar
+- m_toolbar = new AppletToolbar( containment );
++ m_toolbar = new AppletToolbar(0);
++ scene->addItem(m_toolbar.data());
++ m_toolbar.data()->setContainment( qobject_cast<Context::Containment *>(containment) );
+ m_toolbar.data()->setZValue( m_toolbar.data()->zValue() + 1000 );
+ m_toolbar.data()->setPos( TOOLBAR_X_OFFSET, 0 );
+
+@@ -96,7 +98,7 @@ Context::ToolbarView::ToolbarView( Plasma::Containment* containment, QGraphicsSc
+
+ Context::ToolbarView::~ToolbarView()
+ {
+-
++ delete m_toolbar.data();
+ }
+
+ void
+diff --git a/src/context/toolbar/AppletToolbar.cpp b/src/context/toolbar/AppletToolbar.cpp
+index 0e0deb5..c51762c 100644
+--- a/src/context/toolbar/AppletToolbar.cpp
++++ b/src/context/toolbar/AppletToolbar.cpp
+@@ -67,6 +67,19 @@ Context::AppletToolbar::~AppletToolbar()
+ }
+
+ void
++
++Context::AppletToolbar::setContainment( Containment * containment )
++{
++ m_cont = containment;
++}
++
++Context::Containment *
++Context::AppletToolbar::containment() const
++{
++ return m_cont;
++}
++
++void
+ Context::AppletToolbar::resizeEvent( QGraphicsSceneResizeEvent * event )
+ {
+ debug() << "setting layout to" << QRectF( QPointF( 0, 0 ), event->newSize() );
+diff --git a/src/context/toolbar/AppletToolbar.h b/src/context/toolbar/AppletToolbar.h
+index ee8a208..058baae 100644
+--- a/src/context/toolbar/AppletToolbar.h
++++ b/src/context/toolbar/AppletToolbar.h
+@@ -55,6 +55,9 @@ class AppletToolbar : public QGraphicsWidget
+
+ void appletRemoved( Plasma::Applet* applet );
+
++ void setContainment( Containment * containment );
++ Containment* containment() const;
++
+ signals:
+ void showApplet( Plasma::Applet* );
+ void appletAddedToToolbar( Plasma::Applet* applet, int loc );
diff --git a/media-sound/amarok/files/amarok-2.5.0-qtdebug.patch b/media-sound/amarok/files/amarok-2.5.0-qtdebug.patch
new file mode 100644
index 0000000..8c6e022
--- /dev/null
+++ b/media-sound/amarok/files/amarok-2.5.0-qtdebug.patch
@@ -0,0 +1,55 @@
+Patch originally from KDE commit d1a1c80370e4132c26fa636308822fdb3aa1b2e6, modified to work with current Amarok.
+diff -ruN /root/amarok-2.5.0/ChangeLog amarok-2.5.0/ChangeLog
+--- a/amarok-2.5.0/ChangeLog 2011-12-15 02:36:48.000000000 -0500
++++ b/amarok-2.5.0/ChangeLog 2012-06-21 21:05:29.871236927 -0400
+@@ -8,6 +8,7 @@
+ Playlist's layout items.
+
+ BUGFIXES:
++ * Fix crash on start when Qt is build with debugging assertions. (BR 285720)
+ * Do not crash when iPod doesn't have a master playlist. (BR 288936)
+ * Fix Last.fm not finding KDE Wallet. (BR 286741)
+ * Put a border around bottom toolbars, visually separating them from
+diff -ruN /root/amarok-2.5.0/src/browsers/playlistbrowser/QtGroupingProxy.cpp amarok-2.5.0/src/browsers/playlistbrowser/QtGroupingProxy.cpp
+--- a/amarok-2.5.0/src/browsers/playlistbrowser/QtGroupingProxy.cpp 2011-12-15 02:36:48.000000000 -0500
++++ b/amarok-2.5.0/src/browsers/playlistbrowser/QtGroupingProxy.cpp 2012-06-21 21:05:09.810237474 -0400
+@@ -223,23 +223,15 @@
+ {
+ int &rowValue = groupList[insertedProxyRow-1];
+ if( idx.row() <= rowValue )
+- {
+ //increment the rows that come after the new row since they moved one place up.
+ rowValue++;
+- }
+ else
+- {
+ break;
+- }
+ }
+
+ if( updatedGroups.contains( i.key() ) )
+- {
+- //the row needs to be added to this group
+- beginInsertRows( index( i.key() ), insertedProxyRow, insertedProxyRow );
+- groupList.insert( insertedProxyRow, idx.row() );
+- endInsertRows();
+- }
++ // we're inside beginInsertRows() or beginInsertRows(), don't re-enter it.
++ groupList.insert( insertedProxyRow, idx.row() );
+ }
+
+ return updatedGroups;
+diff -ruN /root/amarok-2.5.0/src/browsers/playlistbrowser/QtGroupingProxy.h amarok-2.5.0/src/browsers/playlistbrowser/QtGroupingProxy.h
+--- a/amarok-2.5.0/src/browsers/playlistbrowser/QtGroupingProxy.h 2011-12-15 02:36:48.000000000 -0500
++++ b/amarok-2.5.0/src/browsers/playlistbrowser/QtGroupingProxy.h 2012-06-21 21:04:42.778238198 -0400
+@@ -38,8 +38,8 @@
+ void setGroupedColumn( int groupedColumn );
+
+ /* QAbstractProxyModel methods */
+- virtual QModelIndex index( int, int c = 0,
+- const QModelIndex& parent = QModelIndex() ) const;
++ virtual QModelIndex index( int row, int column = 0,
++ const QModelIndex& parent = QModelIndex() ) const;
+ virtual Qt::ItemFlags flags( const QModelIndex &idx ) const;
+ virtual QModelIndex parent( const QModelIndex &idx ) const;
+ virtual int rowCount( const QModelIndex &idx = QModelIndex() ) const;
diff --git a/media-sound/amarok/files/amarok-fix-upnp-dep.patch b/media-sound/amarok/files/amarok-fix-upnp-dep.patch
new file mode 100644
index 0000000..878c013
--- /dev/null
+++ b/media-sound/amarok/files/amarok-fix-upnp-dep.patch
@@ -0,0 +1,37 @@
+diff -urN amarok-2.4.0.90.orig/CMakeLists.txt amarok-2.4.0.90/CMakeLists.txt
+--- amarok-2.4.0.90.orig/CMakeLists.txt 2011-04-19 00:03:27.910000016 +0000
++++ amarok-2.4.0.90/CMakeLists.txt 2011-04-19 00:06:17.466666683 +0000
+@@ -105,6 +105,10 @@
+ macro_optional_find_package(QJSON)
+ macro_log_feature( QJSON_FOUND "QJson" "Qt JSON Parser used for the Playdar Collection" "http://qjson.sourceforge.net/" FALSE "" "" )
+
++ # HUpnp is required for the upnp plugin
++ macro_optional_find_package(HUpnp)
++ macro_log_feature ( HUPNP_FOUND "HUpnp" "HUpnp is an universal Plug and Play Library" "http://herqq.org/" FALSE "" "" )
++
+ # macro_optional_find_package(Strigi)
+ # macro_log_feature( STRIGI_FOUND "strigi" "Index metadata of files" "http://strigi.sourceforge.net" FALSE "" "" )
+
+diff -urN amarok-2.4.0.90.orig/src/core-impl/collections/CMakeLists.txt amarok-2.4.0.90/src/core-impl/collections/CMakeLists.txt
+--- amarok-2.4.0.90.orig/src/core-impl/collections/CMakeLists.txt 2011-04-19 00:03:27.940000015 +0000
++++ amarok-2.4.0.90/src/core-impl/collections/CMakeLists.txt 2011-04-19 00:07:06.753333348 +0000
+@@ -25,4 +25,6 @@
+ if( QJSON_FOUND )
+ add_subdirectory( playdarcollection )
+ endif( QJSON_FOUND )
+-add_subdirectory( upnpcollection )
++if( HUPNP_FOUND )
++ add_subdirectory( upnpcollection )
++endif( HUPNP_FOUND )
+diff -urN amarok-2.4.0.90.orig/cmake/modules/FindHUpnp.cmake amarok-2.4.0.90/cmake/modules/FindHUpnp.cmake
+--- amarok-2.4.0.90.orig/cmake/modules/FindHUpnp.cmake 2011-04-19 01:59:14.313333349 +0000
++++ amarok-2.4.0.90/cmake/modules/FindHUpnp.cmake 2011-04-19 02:14:13.670000016 +0000
+@@ -6,7 +6,7 @@
+ # HUPNP_LIBRARIES
+ # HUPNP_FOUND
+
+-find_path(HUPNP_INCLUDE_DIR HUpnp HINTS ${KDE4_INCLUDE_DIR})
++find_path(HUPNP_INCLUDE_DIR HUpnp HINTS ${KDE4_INCLUDE_DIR} /usr/include/HUpnpCore)
+
+ find_library(HUPNP_LIBRARIES HUpnp PATHS ${KDE4_LIB_DIR})
+
diff --git a/media-sound/amarok/metadata.xml b/media-sound/amarok/metadata.xml
new file mode 100644
index 0000000..ef23673
--- /dev/null
+++ b/media-sound/amarok/metadata.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<herd>kde</herd>
+<herd>sound</herd>
+<maintainer>
+ <email>jmbsvicetto@gentoo.org</email>
+ <name>Jorge Manuel B. S. Vicetto</name>
+</maintainer>
+<use>
+ <flag name="daap">
+ Enable the scripts for music sharing through DAAP. This flag adds
+ dependencies on <pkg>www-servers/mongrel</pkg> to allow sharing of
+ the Amarok music collection through DAAP protocol. Please note
+ that turning this flag off has no effect on DAAP browsing.
+ </flag>
+ <flag name="embedded">
+ Use libmysqld, MySQL embedded server library.
+ Try disabling this if you encounter -PIC related in amarok,
+ it will make amarok rely only on standalone MySQL server.
+ </flag>
+ <flag name="lastfm">
+ Enable Last.fm streaming services support through
+ <pkg>media-libs/liblastfm</pkg>
+ </flag>
+ <flag name="mp3tunes">Enable mp3tunes integration</flag>
+ <flag name="mtp">
+ Enable support for libMTP (Plays4Sure) devices access through libmtp
+ </flag>
+ <flag name="ofa">
+ Use <pkg>media-libs/libofa</pkg> to compute MusicDNS acoustic
+ fingerprints (used by MusicBrainz)
+ </flag>
+ <flag name="utils">
+ Build the utils - old <pkg>media-sound/amarok-utils</pkg>
+ </flag>
+</use>
+</pkgmetadata>
diff --git a/media-sound/mixxx/ChangeLog b/media-sound/mixxx/ChangeLog
new file mode 100644
index 0000000..e4988c7
--- /dev/null
+++ b/media-sound/mixxx/ChangeLog
@@ -0,0 +1,41 @@
+# ChangeLog for media-sound/mixxx
+# Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2
+# $Header: $
+
+ 05 Oct 2011; Alex Barker (KWhat) <alex@1stleg.com>
+ files/mixxx-1.9.0-flags.patch, files/mixxx-9999-flags.patch:
+ Modifed flags patch to remove CCCOM and CXXCOM overrides that are not needed
+ after scons 1.0. CCFLAG change for mixxx-9999 has been applied upstream.
+
+ 29 Sep 2011; Alex Barker (KWhat) <alex@1stleg.com> mixxx-1.9.0-r2.ebuild,
+ mixxx-9999.ebuild:
+ Added env vars for installation phase.
+
+ 28 Sep 2011; Alex Barker (KWhat) <alex@1stleg.com> -mixxx-1.9.0-r1.ebuild,
+ +mixxx-1.9.0-r2.ebuild, files/mixxx-1.9.0-linux3.patch:
+ Added additional Linux 3.0 support patch from upstream.
+
+ 29 Jun 2011; Alex Barker (KWhat) <alex@1stleg.com> -mixxx-1.9.0.ebuild,
+ +mixxx-1.9.0-r1.ebuild, +files/mixxx-1.9.0-linux3.patch:
+ Added Linux 3.0 support patch from upstream.
+
+ 13 May 2011; Alex Barker (KWhat) <alex@1stleg.com> metadata.xml:
+ Added description for unorthodox pulseaudio use flag
+
+ 06 May 2011; Alex Barker (KWhat) <alex@1stleg.com> -mixxx-1.8.2.ebuild,
+ -files/mixxx-1.8.2-flags.patch, -files/mixxx-1.8.2-libsoundtouch.patch,
+ mixxx-1.9.0.ebuild, mixxx-9999.ebuild, metadata.xml:
+ Developer approved builds. Previous commit was premeture on my part.
+
+ 06 May 2011; Michał Górny <mgorny@gentoo.org> mixxx-1.8.2.ebuild,
+ mixxx-1.9.0.ebuild, mixxx-9999.ebuild:
+ Drop redundant arguments to use_scons.
+
+ 05 May 2011; Alex Barker (KWhat) <alex@1stleg.com> +mixxx-1.8.2.ebuild,
+ +files/mixxx-1.8.2-flags.patch, +files/mixxx-1.8.2-libsoundtouch.patch,
+ +mixxx-1.9.0.ebuild, +files/mixxx-1.9.0-flags.patch,
+ +files/mixxx-1.9.0-libsoundtouch.patch, +mixxx-9999.ebuild,
+ +files/mixxx-9999-flags.patch, +files/mixxx-9999-libsoundtouch.patch,
+ +metadata.xml:
+ New Ebuild for bug 310821
+
diff --git a/media-sound/mixxx/Manifest b/media-sound/mixxx/Manifest
new file mode 100644
index 0000000..bacaf0f
--- /dev/null
+++ b/media-sound/mixxx/Manifest
@@ -0,0 +1,21 @@
+AUX mixxx-1.11.9999-cflags.patch 641 SHA256 5a4a4256cabc06bf10c532c82f055737748f79f066758ae20038815ca8342549 SHA512 8fcd2ba6dba5fb3b0e0a0058b965fe25b6c34b1d787d1d920666f9426ffffc84253913ef5b606e14fd4b0f5dfb26bfeb04d4424c856fe7d57e62b837144dab37 WHIRLPOOL 8528a3ee74925a4e338fed9b9d803944cd001ef3f385892fc1d1abfdaab462f1118a3365599572005f9795a9763fdcb4345e9d9f008cacfcbba7d0f6751fbfa7
+AUX mixxx-1.11.9999-docs.patch 438 SHA256 19377d095e34071010ddda59b03b86a63b82f2663dca32f8dc6771e6d217f1f7 SHA512 c2ebe6043bea9bc793e92d98237ea8369169bc874354f58a88388a59f0d98630e97e44aea169418824b740cd0108689d7b8d4e619b7ce5788c9c72f5ce844846 WHIRLPOOL 31dea2227c3353ade49d7683b32a0c0b9db54870551d30b9d33b69a01762d3dc9a6e452059ee690762632732968043d0c57139fefcd66461c7723f38d66677bf
+AUX mixxx-1.11.9999-no-bzr.patch 1496 SHA256 b50722573af57129892a92f9e7502ddc2d679f29435b27581352dc075d40c5c0 SHA512 16ce2b20dc0fbd916f134926c997911b6f1a83f84b19f01feff5bc4d5237f7f1c2741ffd6adfb851abef04b9ed27538869337060f6e12707b8ec693a0e51ed4d WHIRLPOOL 3e39d2469b464fd4490f42eb306fc4651f456eedb5c62fbcaab883a14d5ce252daeab1a673a23ac2271196b46760a9fd512fc5ddc1614b3f2282719383d25594
+AUX mixxx-1.11.9999-system-libs.patch 6157 SHA256 a9b4737a03a1a4c6c32a1ebc2f501cf2fe74354b5ea09010b59cf9cc360a04fd SHA512 54d60392424e3809054685a595290f713c3688c3558b09ac082204f2da015c91c99ea455f6393ab31d846d7821050e352a77193e3f91813aab83bff291223a50 WHIRLPOOL fd254234b439ffc72eade2cea5cb32fc0fc3921c94fc47c64cb83b4cf5efb71c277257538b18e123d4c587edbe5556e729112fd68d085161f1c6d271c40ad768
+AUX mixxx-1.6.0_beta4-debug.patch 334 SHA256 caf3ee6cbd09853c281a351c9dbabc845c63128cc60a5ceee183a8cec560a0ad SHA512 c51c025dcfbb0131d7d3fd15ba72dbf834540e584221c33dbe6f9224396f4a3ae05298b0c579829f444e013a60ca15bc91601a7724d4ca2d2be0bef3479b3d35 WHIRLPOOL b2a382c73811e9843590dc0517f167400136e2969e295bc2f48b29ba5b2680d857726fa89d978783ab38ad87d76333f44e0e97909689b5d83e969ca09b7bace3
+AUX mixxx-1.9.0-flags.patch 1167 SHA256 491d3a76f704cb739180365d7cd987832c3c0154790e74943ff0753be4563044 SHA512 cf2130d65f4b9c56b85fd7bb8447e064bb6b7774552bd11668c039be208b0da21ae4247039b7c17d745570b690d90adf70542719effbb8a06385490e547aa0a1 WHIRLPOOL 09dbd5ddb827dea4a1c609d1b6877dca23b4c2811cb2a4da263298df13cc5b45139094f27a20f1d85d721561634ebd64dd2c0150d7b9daa5a5305a9ee9554ffd
+AUX mixxx-1.9.0-libsoundtouch.patch 3342 SHA256 234e058145ca14bbbbb0f34fe1c07e5d0ff55999d952547b054744edc5feaa0d SHA512 3d626851d4f0c84582b5862e5d1306fdeef8ac727706b600b8682ed1c9da497dfdabb80bc3497e579dca85ac61071985cae224d65068b4c6e566ef2655e0bf55 WHIRLPOOL 409e1fb722a18589d98cc8b405bdd50da3ee085ca62e050210165563f4887bb1c0d7a2182102cdfecf6eab5677a4f3b5eddc1dcc66e4cee5d47054a3e546dd3f
+AUX mixxx-1.9.0-linux3.patch 877 SHA256 bff40d8de8f6d6aea254c8243fc79f9bde3ac7932fc471aa23ca049fb3614b06 SHA512 9782954dbe0c866d76a3434589fd740c5f859c682e829c424e108acf45ec0b8a4bda00e9eed11f26d2c60e7c732ff196c7c59c31ced7697a1b46afdad3211718 WHIRLPOOL 5392de3e6c165460c27833fcaf0e904943cd78b231aaca1c828f12b6c36033cbcddeefebde2014f2d762edb385d41f161df0d4cb4b17d0f2cb46ac67eab053f9
+AUX mixxx-1.9.2-flags.patch 624 SHA256 1387d7c8e886d5c98b48639628b6ec5c73bcb507b92e0220ee8648a3c7b08dd5 SHA512 d451725c42a7dca4a5f0e98f6e5d91c811923c0c530ae6426c0e560d467148e034caa4650c593506a37694072120e16d825d7b4e11f673f77cb855fca557c910 WHIRLPOOL a8ae930d8efee1628d2e9491adc86f95c1464bf20e60541b571820983b1f5dabc3d178150d80a78a280d2f3e5b7c5d7d5df7b9f68702a6ccaa84df0d5628b5a2
+AUX mixxx-1.9.2-libsoundtouch.patch 3342 SHA256 234e058145ca14bbbbb0f34fe1c07e5d0ff55999d952547b054744edc5feaa0d SHA512 3d626851d4f0c84582b5862e5d1306fdeef8ac727706b600b8682ed1c9da497dfdabb80bc3497e579dca85ac61071985cae224d65068b4c6e566ef2655e0bf55 WHIRLPOOL 409e1fb722a18589d98cc8b405bdd50da3ee085ca62e050210165563f4887bb1c0d7a2182102cdfecf6eab5677a4f3b5eddc1dcc66e4cee5d47054a3e546dd3f
+AUX mixxx-9999-cflags.patch 641 SHA256 5a4a4256cabc06bf10c532c82f055737748f79f066758ae20038815ca8342549 SHA512 8fcd2ba6dba5fb3b0e0a0058b965fe25b6c34b1d787d1d920666f9426ffffc84253913ef5b606e14fd4b0f5dfb26bfeb04d4424c856fe7d57e62b837144dab37 WHIRLPOOL 8528a3ee74925a4e338fed9b9d803944cd001ef3f385892fc1d1abfdaab462f1118a3365599572005f9795a9763fdcb4345e9d9f008cacfcbba7d0f6751fbfa7
+AUX mixxx-9999-docs.patch 438 SHA256 19377d095e34071010ddda59b03b86a63b82f2663dca32f8dc6771e6d217f1f7 SHA512 c2ebe6043bea9bc793e92d98237ea8369169bc874354f58a88388a59f0d98630e97e44aea169418824b740cd0108689d7b8d4e619b7ce5788c9c72f5ce844846 WHIRLPOOL 31dea2227c3353ade49d7683b32a0c0b9db54870551d30b9d33b69a01762d3dc9a6e452059ee690762632732968043d0c57139fefcd66461c7723f38d66677bf
+AUX mixxx-9999-flags.patch 624 SHA256 1387d7c8e886d5c98b48639628b6ec5c73bcb507b92e0220ee8648a3c7b08dd5 SHA512 d451725c42a7dca4a5f0e98f6e5d91c811923c0c530ae6426c0e560d467148e034caa4650c593506a37694072120e16d825d7b4e11f673f77cb855fca557c910 WHIRLPOOL a8ae930d8efee1628d2e9491adc86f95c1464bf20e60541b571820983b1f5dabc3d178150d80a78a280d2f3e5b7c5d7d5df7b9f68702a6ccaa84df0d5628b5a2
+AUX mixxx-9999-libsoundtouch.patch 2233 SHA256 35abe2708d701a7cfaade4b33e76657a11bb620f73d484126d53c5ae95424759 SHA512 61155fcb1b0dee259636e57516cfcdd1d1e885e80f103b4d71595bfe2003785d53873f2f6a8bfea207d97ccb2a18134f67bb09915379a1cf622d8873ac298d4f WHIRLPOOL d7d8eb22d2e9a5ff2db9f9ebc148911ac2e399fc9e38afed7f5e7fc5eea1bb5636664a3a1bd047898319d0a40cfa07716ce845afde739f5b1cc8ffc8306c0ace
+AUX mixxx-9999-no-bzr.patch 1496 SHA256 b50722573af57129892a92f9e7502ddc2d679f29435b27581352dc075d40c5c0 SHA512 16ce2b20dc0fbd916f134926c997911b6f1a83f84b19f01feff5bc4d5237f7f1c2741ffd6adfb851abef04b9ed27538869337060f6e12707b8ec693a0e51ed4d WHIRLPOOL 3e39d2469b464fd4490f42eb306fc4651f456eedb5c62fbcaab883a14d5ce252daeab1a673a23ac2271196b46760a9fd512fc5ddc1614b3f2282719383d25594
+AUX mixxx-9999-qt4_paths.patch 1422 SHA256 6917b59e0b8cbebdffed0c86a26f06d6c212bf1d66bb944cfcc54b8c56903d6f SHA512 f35db1077c04f3b7c7e5d4c5665d633d5150561d7c867875ad1e0906ee4eb367e8d4f9937fb78bb19e4502c348188fc35635012a10a7821e59e3ae2151406b7f WHIRLPOOL f7ee177a83710200a90c319b06d2d48968c919dd9cccf7b4db2f9987418a0a7450b522c4ffc6d1dfd3e138ff90a89e1b67a19da32d6157973c6b6dca55980425
+AUX mixxx-9999-system-libs.patch 6157 SHA256 a9b4737a03a1a4c6c32a1ebc2f501cf2fe74354b5ea09010b59cf9cc360a04fd SHA512 54d60392424e3809054685a595290f713c3688c3558b09ac082204f2da015c91c99ea455f6393ab31d846d7821050e352a77193e3f91813aab83bff291223a50 WHIRLPOOL fd254234b439ffc72eade2cea5cb32fc0fc3921c94fc47c64cb83b4cf5efb71c277257538b18e123d4c587edbe5556e729112fd68d085161f1c6d271c40ad768
+EBUILD mixxx-9999.ebuild 2270 SHA256 20af50eb045a5e31ef713c576dda8b817bc10d04cc83837e6d0d3712391a1295 SHA512 43f18dc5de6dbbafa8d48851e3775b6a729fcde73427cb0168fe58f553ebc180f40187a036436be308e8eaf8b4630f96d20ee1c984e463df45f44535998bb881 WHIRLPOOL 478cdc0760906c6d7a411641f40ce67a125b93e5f800c7e684d761726abf606979829b2651bc2c92d5af1cb1f3b7f6f7efa6cce94bb92e23d63bf922d703ad9f
+MISC ChangeLog 1838 SHA256 8c0de8ac00f09f3ef2ac742421b4412e8092b720a057e73869dbf643a42ffa9a SHA512 9a1b667e364eae782cb0b823184f5e90cd3db6123ae674f1e046dc8f6a617aa8772db2b15465bf25a626c9ef5719ae26d21c8bb2e53473f51af9c8545a4ec6dc WHIRLPOOL e8b215c023449501596235c9db29bcaa73f9a332b017228cb6903d8a94f9bff748fecbb48b233ca912af0ca61cbf8748737bb4e98f2b410335531e5700210fba
+MISC metadata.xml 410 SHA256 812fc2fb4d75f2035068cd2f547174c6aedf91799a1fc64ef54d15c611a28128 SHA512 3ffe2ee7979f57a3a3d4c3b8ee7c792b8e377556ec69ab77de82f63d02e7696475e2c9ef4f14daf6171e81f33e1679cb4d16708b416996dce62ca9814cc5cb58 WHIRLPOOL 6bfe8d9a6b10cd16b46aeeafd1a0b47184e090a132ea3732eee199cb6090d00740107dba9ed58be77f3ef484d841e5a2002a133452d07516e8a554d480705eae
+MISC mixxx-9999-sunrise.ebuild.vorlage 1985 SHA256 223daa9768880775935d9493cd0719327181b7ed947bc76260a37278aa5efe56 SHA512 2d41cefd1a10b755bc1fe28b2c96f7327fac0af46b266de4da6ca3d3d3f8d3f1b880519f4e834cda94cf30646b739107912591f1d7fcc456d335ab23d5a572b4 WHIRLPOOL cc67a480181eb51c0516f514f281726d59e881549fc40f677327b23a7e3f15d3ac58a7e2e3557bad7ab239c2d0e6390b0fb5b7f2f11f64f2f94458bc7adcc4e5
diff --git a/media-sound/mixxx/files/.svn/entries b/media-sound/mixxx/files/.svn/entries
new file mode 100644
index 0000000..38135aa
--- /dev/null
+++ b/media-sound/mixxx/files/.svn/entries
@@ -0,0 +1,198 @@
+10
+
+dir
+12493
+svn://overlays.gentoo.org/proj/sunrise/reviewed/media-sound/mixxx/files
+svn://overlays.gentoo.org/proj/sunrise
+
+
+
+2011-10-09T10:54:47.754812Z
+12451
+hwoarang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+12608f7e-a915-0410-b2f3-ce240db1b126
+
+mixxx-9999-flags.patch
+file
+
+
+
+
+2011-10-09T18:09:26.010466Z
+4cc2f303d44c2b8cf82633823cae9fde
+2011-10-09T10:54:47.754812Z
+12451
+hwoarang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+624
+
+mixxx-1.9.0-flags.patch
+file
+
+
+
+
+2011-10-09T18:09:26.010466Z
+0f029ba026e97a9b26aac957726b3d5e
+2011-10-09T10:54:47.754812Z
+12451
+hwoarang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1167
+
+mixxx-9999-libsoundtouch.patch
+file
+
+
+
+
+2011-08-07T23:55:00.656896Z
+4cfab68bce22794cedcd60ba167f2ae3
+2011-05-26T08:39:11.369734Z
+12092
+mgorny
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3342
+
+mixxx-1.9.0-libsoundtouch.patch
+file
+
+
+
+
+2011-08-07T23:55:00.662896Z
+e61257b36a840ab4df9b01f30dca3209
+2011-05-26T08:39:11.369734Z
+12092
+mgorny
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3342
+
+mixxx-1.9.0-linux3.patch
+file
+
+
+
+
+2011-10-09T18:09:26.011466Z
+691528e8f36b675db60b7aa6f6f2c8c6
+2011-10-09T10:54:47.754812Z
+12451
+hwoarang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+877
+
diff --git a/media-sound/mixxx/files/.svn/text-base/mixxx-1.6.0_beta4-debug.patch.svn-base b/media-sound/mixxx/files/.svn/text-base/mixxx-1.6.0_beta4-debug.patch.svn-base
new file mode 100644
index 0000000..e9488c2
--- /dev/null
+++ b/media-sound/mixxx/files/.svn/text-base/mixxx-1.6.0_beta4-debug.patch.svn-base
@@ -0,0 +1,10 @@
+--- src/enginefilterblock.cpp.orig 2008-05-22 09:27:10.000000000 -0700
++++ src/enginefilterblock.cpp 2008-05-22 09:27:16.000000000 -0700
+@@ -21,6 +21,7 @@
+ #include "enginefilteriir.h"
+ #include "enginefilter.h"
+ #include "enginefilterbutterworth8.h"
++#include <QtDebug>
+
+ EngineFilterBlock::EngineFilterBlock(const char * group)
+ {
diff --git a/media-sound/mixxx/files/.svn/text-base/mixxx-1.9.0-flags.patch.svn-base b/media-sound/mixxx/files/.svn/text-base/mixxx-1.9.0-flags.patch.svn-base
new file mode 100644
index 0000000..09c0088
--- /dev/null
+++ b/media-sound/mixxx/files/.svn/text-base/mixxx-1.9.0-flags.patch.svn-base
@@ -0,0 +1,24 @@
+--- build/mixxx.py.orig 2010-12-22 11:21:56.000000000 -0800
++++ build/mixxx.py 2010-12-22 11:16:22.000000000 -0800
+@@ -189,7 +189,7 @@
+ if os.environ.has_key('CC'):
+ self.env['CC'] = os.environ['CC']
+ if os.environ.has_key('CFLAGS'):
+- self.env['CCFLAGS'] += SCons.Util.CLVar(os.environ['CFLAGS'])
++ self.env['CFLAGS'] += SCons.Util.CLVar(os.environ['CFLAGS'])
+ if os.environ.has_key('CXX'):
+ self.env['CXX'] = os.environ['CXX']
+ if os.environ.has_key('CXXFLAGS'):
+--- build/depends.py.orig 2010-12-22 11:13:22.000000000 -0800
++++ build/depends.py 2010-12-22 11:14:02.000000000 -0800
+@@ -587,10 +587,8 @@
+ if build.toolchain_is_gnu:
+ # Default GNU Options
+ # TODO(XXX) always generate debugging info?
+- build.env.Append(CCFLAGS = '-pipe')
+ build.env.Append(CCFLAGS = '-Wall')
+ build.env.Append(CCFLAGS = '-Wextra')
+- build.env.Append(CCFLAGS = '-g')
+
+ # Check that g++ is present (yeah, SCONS is a bit dumb here)
+ if os.system("which g++ > /dev/null"): #Checks for non-zero return code
diff --git a/media-sound/mixxx/files/.svn/text-base/mixxx-1.9.0-libsoundtouch.patch.svn-base b/media-sound/mixxx/files/.svn/text-base/mixxx-1.9.0-libsoundtouch.patch.svn-base
new file mode 100644
index 0000000..25f349c
--- /dev/null
+++ b/media-sound/mixxx/files/.svn/text-base/mixxx-1.9.0-libsoundtouch.patch.svn-base
@@ -0,0 +1,68 @@
+--- build/depends.py.orig 2010-12-22 11:13:22.000000000 -0800
++++ build/depends.py 2010-12-22 11:33:29.000000000 -0800
+@@ -234,60 +234,16 @@
+ build.env.Append(CPPPATH="#lib/replaygain")
+
+ class SoundTouch(Dependence):
+- SOUNDTOUCH_PATH = 'soundtouch-1.4.1'
+
+ def sources(self, build):
+- sources = ['engine/enginebufferscalest.cpp',
+- '#lib/%s/SoundTouch.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/TDStretch.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/RateTransposer.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/AAFilter.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/FIFOSampleBuffer.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/FIRFilter.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/PeakFinder.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/BPMDetect.cpp' % self.SOUNDTOUCH_PATH]
+- if build.platform_is_windows and build.toolchain_is_msvs:
+- if build.machine_is_64bit:
+- sources.append(
+- '#lib/%s/cpu_detect_x64_win.cpp' % self.SOUNDTOUCH_PATH)
+- elif build.machine == 'x86':
+- sources.append(
+- '#lib/%s/cpu_detect_x86_win.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- raise Exception("Unhandled CPU configuration for SoundTouch")
+- elif build.toolchain_is_gnu:
+- if build.machine == 'x86_64':
+- sources.append(
+- '#lib/%s/cpu_detect_x64_gcc.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- sources.append(
+- '#lib/%s/cpu_detect_x86_gcc.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- raise Exception("Unhandled CPU configuration for SoundTouch")
+-
+- # TODO(XXX) when we figure out a better way to represent features, fix
+- # this.
+- optimize = int(util.get_flags(build.env, 'optimize', 1))
+- if build.machine_is_64bit or \
+- (build.toolchain_is_msvs and optimize > 1) or \
+- (build.toolchain_is_gnu and optimize > 2):
+- sources.extend(
+- ['#lib/%s/mmx_optimized.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/sse_optimized.cpp' % self.SOUNDTOUCH_PATH,
+- ])
+- if build.toolchain_is_msvs and not build.machine_is_64bit:
+- sources.append('#lib/%s/3dnow_win.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- # TODO(XXX) the docs refer to a 3dnow_gcc, but we don't seem to have
+- # it.
+- pass
+-
++ sources = ['engine/enginebufferscalest.cpp']
+ return sources
+
+ def configure(self, build, conf):
+- if build.platform_is_windows:
+- build.env.Append(CPPDEFINES = 'WIN%s' % build.bitwidth)
+- build.env.Append(CPPPATH=['#lib/%s' % self.SOUNDTOUCH_PATH])
++ if not conf.CheckLib(['SoundTouch','libSoundTouch']):
++ raise Exception('Did not find libSoundTouch.a, libSoundTouch.lib, or the libSoundTouch development header files - exiting!')
++ build.env.Append(CPPPATH=[SCons.ARGUMENTS.get('prefix', '/usr/local') + '/include/soundtouch'])
++ build.env.Append(LIBS='SoundTouch')
+
+ # TODO(XXX) when we figure out a better way to represent features, fix
+ # this.
diff --git a/media-sound/mixxx/files/.svn/text-base/mixxx-1.9.0-linux3.patch.svn-base b/media-sound/mixxx/files/.svn/text-base/mixxx-1.9.0-linux3.patch.svn-base
new file mode 100644
index 0000000..89bac8e
--- /dev/null
+++ b/media-sound/mixxx/files/.svn/text-base/mixxx-1.9.0-linux3.patch.svn-base
@@ -0,0 +1,23 @@
+=== modified file 'mixxx/build/mixxx.py'
+--- mixxx/build/mixxx.py 2011-06-13 01:29:39 +0000
++++ mixxx/build/mixxx.py 2011-06-17 17:37:59 +0000
+@@ -188,7 +188,7 @@
+ # Should cover {Net,Open,Free,DragonFly}BSD, but only tested on OpenBSD
+ if 'bsd' in sys.platform:
+ return 'bsd'
+- if 'linux2' == sys.platform:
++ if sys.platform in ['linux2', 'linux3']:
+ return 'linux'
+ if sys.platform == 'darwin':
+ return 'osx'
+--- mixxx/build/qt4.py 2011-09-15 01:05:21.872433812 +0100
++++ mixxx/build/qt4.py 2011-09-15 01:06:34.628431259 +0100
+@@ -409,7 +409,7 @@
+ self.AppendUnique(CPPFLAGS=['-DQT_GUI_LIB'])
+
+ debugSuffix = ''
+- if sys.platform == "linux2" :
++ if sys.platform in ["linux2", "linux3"]:
+ if debug : debugSuffix = '_debug'
+ for module in modules :
+ if module not in pclessModules : continue
diff --git a/media-sound/mixxx/files/.svn/text-base/mixxx-9999-flags.patch.svn-base b/media-sound/mixxx/files/.svn/text-base/mixxx-9999-flags.patch.svn-base
new file mode 100644
index 0000000..c543e76
--- /dev/null
+++ b/media-sound/mixxx/files/.svn/text-base/mixxx-9999-flags.patch.svn-base
@@ -0,0 +1,13 @@
+--- build/depends.py.orig 2010-12-22 11:13:22.000000000 -0800
++++ build/depends.py 2010-12-22 11:14:02.000000000 -0800
+@@ -587,10 +587,8 @@
+ if build.toolchain_is_gnu:
+ # Default GNU Options
+ # TODO(XXX) always generate debugging info?
+- build.env.Append(CCFLAGS = '-pipe')
+ build.env.Append(CCFLAGS = '-Wall')
+ build.env.Append(CCFLAGS = '-Wextra')
+- build.env.Append(CCFLAGS = '-g')
+
+ # Check that g++ is present (yeah, SCONS is a bit dumb here)
+ if os.system("which g++ > /dev/null"): #Checks for non-zero return code
diff --git a/media-sound/mixxx/files/.svn/text-base/mixxx-9999-libsoundtouch.patch.svn-base b/media-sound/mixxx/files/.svn/text-base/mixxx-9999-libsoundtouch.patch.svn-base
new file mode 100644
index 0000000..d18b7b2
--- /dev/null
+++ b/media-sound/mixxx/files/.svn/text-base/mixxx-9999-libsoundtouch.patch.svn-base
@@ -0,0 +1,68 @@
+--- build/depends.py.orig 2011-04-26 11:55:25.000000000 -0700
++++ build/depends.py 2011-04-26 11:58:53.000000000 -0700
+@@ -230,60 +230,16 @@
+ build.env.Append(CPPPATH="#lib/replaygain")
+
+ class SoundTouch(Dependence):
+- SOUNDTOUCH_PATH = 'soundtouch-1.5.0'
+
+ def sources(self, build):
+- sources = ['engine/enginebufferscalest.cpp',
+- '#lib/%s/SoundTouch.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/TDStretch.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/RateTransposer.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/AAFilter.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/FIFOSampleBuffer.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/FIRFilter.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/PeakFinder.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/BPMDetect.cpp' % self.SOUNDTOUCH_PATH]
+- if build.platform_is_windows and build.toolchain_is_msvs:
+- if build.machine_is_64bit:
+- sources.append(
+- '#lib/%s/cpu_detect_x64_win.cpp' % self.SOUNDTOUCH_PATH)
+- elif build.machine == 'x86':
+- sources.append(
+- '#lib/%s/cpu_detect_x86_win.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- raise Exception("Unhandled CPU configuration for SoundTouch")
+- elif build.toolchain_is_gnu:
+- if build.machine == 'x86_64':
+- sources.append(
+- '#lib/%s/cpu_detect_x64_gcc.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- sources.append(
+- '#lib/%s/cpu_detect_x86_gcc.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- raise Exception("Unhandled CPU configuration for SoundTouch")
+-
+- # TODO(XXX) when we figure out a better way to represent features, fix
+- # this.
+- optimize = int(util.get_flags(build.env, 'optimize', 1))
+- if build.machine_is_64bit or \
+- (build.toolchain_is_msvs and optimize > 1) or \
+- (build.toolchain_is_gnu and optimize > 2):
+- sources.extend(
+- ['#lib/%s/mmx_optimized.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/sse_optimized.cpp' % self.SOUNDTOUCH_PATH,
+- ])
+- if build.toolchain_is_msvs and not build.machine_is_64bit:
+- sources.append('#lib/%s/3dnow_win.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- # TODO(XXX) the docs refer to a 3dnow_gcc, but we don't seem to have
+- # it.
+- pass
+-
++ sources = ['engine/enginebufferscalest.cpp']
+ return sources
+
+ def configure(self, build, conf):
+- if build.platform_is_windows:
+- build.env.Append(CPPDEFINES = 'WIN%s' % build.bitwidth)
+- build.env.Append(CPPPATH=['#lib/%s' % self.SOUNDTOUCH_PATH])
++ if not conf.CheckLib(['SoundTouch','libSoundTouch']):
++ raise Exception('Did not find libSoundTouch.a, libSoundTouch.lib, or the libSoundTouch development header files - exiting!')
++ build.env.Append(CPPPATH=[SCons.ARGUMENTS.get('prefix', '/usr/local') + '/include/soundtouch'])
++ build.env.Append(LIBS='SoundTouch')
+
+ # TODO(XXX) when we figure out a better way to represent features, fix
+ # this.
diff --git a/media-sound/mixxx/files/.svn/text-base/mixxx-9999-qt4_paths.patch.svn-base b/media-sound/mixxx/files/.svn/text-base/mixxx-9999-qt4_paths.patch.svn-base
new file mode 100644
index 0000000..3a8ca65
--- /dev/null
+++ b/media-sound/mixxx/files/.svn/text-base/mixxx-9999-qt4_paths.patch.svn-base
@@ -0,0 +1,22 @@
+--- src/SConscript.orig 2007-07-21 13:59:44.000000000 +0200
++++ src/SConscript 2007-07-21 14:02:01.000000000 +0200
+@@ -325,7 +325,7 @@
+ env.Append(LIBS = 'shell32')
+
+ env.Append(CXXFLAGS = ' -DQT3_SUPPORT -DQT3_SUPPORT_WARNINGS -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT') #Stolen from Mixxx's build output
+-env.Append(CXXFLAGS = ' -I$QTDIR/include/Qt3Support -I$QTDIR/include/QtCore -I$QTDIR/include/QtGui -I$QTDIR/include/QtXml -I$QTDIR/include/QtOpenGl -I$QTDIR/include/Qt -I"$VCINSTALLDIR/include/atl"')
++env.Append(CXXFLAGS = ' -I/usr/include/qt4 -I/usr/include/qt4/Qt3Support -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtXml -I/usr/include/qt4/QtOpenGl -I/usr/include/qt4/Qt -I"$VCINSTALLDIR/include/atl"')
+
+ if not platform == 'win32':
+ env.Append(CXXFLAGS = ' -pipe -O3 -pipe -Wall -W -g -D_REENTRANT') # omghax
+--- src/qt4.py.orig 2007-07-21 15:29:25.000000000 +0200
++++ src/qt4.py 2007-07-21 15:31:06.000000000 +0200
+@@ -246,7 +246,7 @@
+ QTDIR = _detect(env),
+ QT4_BINPATH = os.path.join('$QTDIR', 'bin'),
+ QT4_CPPPATH = os.path.join('$QTDIR', 'include'),
+- QT4_LIBPATH = os.path.join('$QTDIR', 'lib'),
++ QT4_LIBPATH = os.path.join('/usr/lib/qt4'),
+ # TODO: This is not reliable to QTDIR value changes but needed in order to support '-qt4' variants
+ QT4_MOC = locateQt4Command(env,'moc', env['QTDIR']),
+ QT4_UIC = locateQt4Command(env,'uic', env['QTDIR']),
diff --git a/media-sound/mixxx/files/mixxx-1.11.9999-cflags.patch b/media-sound/mixxx/files/mixxx-1.11.9999-cflags.patch
new file mode 100644
index 0000000..94ef76e
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-1.11.9999-cflags.patch
@@ -0,0 +1,13 @@
+--- mixxx-9999/build/depends.py 2010-12-22 11:13:22.000000000 -0800
++++ mixxx-9999/build/depends.py 2010-12-22 11:14:02.000000000 -0800
+@@ -587,10 +587,8 @@
+ if build.toolchain_is_gnu:
+ # Default GNU Options
+ # TODO(XXX) always generate debugging info?
+- build.env.Append(CCFLAGS = '-pipe')
+ build.env.Append(CCFLAGS = '-Wall')
+ build.env.Append(CCFLAGS = '-Wextra')
+- build.env.Append(CCFLAGS = '-g')
+
+ # Check that g++ is present (yeah, SCONS is a bit dumb here)
+ if os.system("which g++ > /dev/null"): #Checks for non-zero return code
diff --git a/media-sound/mixxx/files/mixxx-1.11.9999-docs.patch b/media-sound/mixxx/files/mixxx-1.11.9999-docs.patch
new file mode 100644
index 0000000..65bd39d
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-1.11.9999-docs.patch
@@ -0,0 +1,10 @@
+--- mixxx-9999/src/SConscript
++++ mixxx-9999/src/SConscript
+@@ -223,7 +223,6 @@
+ env.Alias('install', keyboardmappings)
+ if int(flags['ladspa']):
+ env.Alias('install', ladspapresets)
+- env.Alias('install', docs)
+ env.Alias('install', dotdesktop)
+ env.Alias('install', icon)
+ env.Alias('install', promotracks)
diff --git a/media-sound/mixxx/files/mixxx-1.11.9999-no-bzr.patch b/media-sound/mixxx/files/mixxx-1.11.9999-no-bzr.patch
new file mode 100644
index 0000000..4476f18
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-1.11.9999-no-bzr.patch
@@ -0,0 +1,38 @@
+--- mixxx-9999/src/SConscript.env
++++ mixxx-9999/src/SConscript.env
+@@ -19,21 +19,6 @@
+ print "Deleting deprecated build file: %s" % defs
+ os.remove(defs)
+
+-#env.Append(CPPDEFINES=[('BUILD_REV', '"%s"' % getBZRRevision())]) #doing this forces a rebuild of everything whenever a commit happens -- not much fun
+-## instead, embed BZR version into build
+-## Put version info into a file, so it doesn't force a rebuild of everything :)
+-f = open("build.h","w")
+-try:
+- branch_name = util.get_bzr_branch_name()
+- modified = util.get_bzr_modified() > 0
+- # Do not emit BUILD_BRANCH on release branches.
+- if not branch_name.startswith('release'):
+- f.write('#define BUILD_BRANCH "%s"\n' % branch_name)
+- f.write('#define BUILD_REV "%s%s"\n' % (util.get_bzr_revision(),
+- '+' if modified else ''))
+-finally:
+- f.close()
+-
+ #Check for dependencies if we're not doing a clean...
+ #if not env.GetOption('clean') and not SCons.Util.containsAny(os.sys.argv, ['-h', '--help']):
+ conf = Configure(env, custom_tests = { 'CheckForPKGConfig' : util.CheckForPKGConfig,
+
+--- mixxx-9999/src/SConscript
++++ mixxx-9999/src/SConscript
+@@ -12,8 +12,8 @@
+ from build import util
+
+ mixxx_version = util.get_mixxx_version()
+-branch_name = util.get_bzr_branch_name()
+-bazaar_revision = util.get_bzr_revision()
++#branch_name = util.get_bzr_branch_name()
++#bazaar_revision = util.get_bzr_revision()
+ print "WE ARE IN:", os.getcwd()
+
+ plugins = []
diff --git a/media-sound/mixxx/files/mixxx-1.11.9999-system-libs.patch b/media-sound/mixxx/files/mixxx-1.11.9999-system-libs.patch
new file mode 100644
index 0000000..41c4af1
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-1.11.9999-system-libs.patch
@@ -0,0 +1,150 @@
+=== modified file 'mixxx/build/depends.py'
+--- mixxx-9999/build/depends.py 2012-04-22 17:33:25 +0000
++++ mixxx-9999/build/depends.py 2012-04-23 23:49:03 +0000
+@@ -189,25 +189,10 @@
+
+ class FidLib(Dependence):
+
+- def sources(self, build):
+- symbol = None
+- if build.platform_is_windows:
+- if build.toolchain_is_msvs:
+- symbol = 'T_MSVC'
+- elif build.crosscompile:
+- # Not sure why, but fidlib won't build with mingw32msvc and
+- # T_MINGW
+- symbol = 'T_LINUX'
+- elif build.toolchain_is_gnu:
+- symbol = 'T_MINGW'
+- else:
+- symbol = 'T_LINUX'
+-
+- return [build.env.StaticObject('#lib/fidlib-0.9.10/fidlib.c',
+- CPPDEFINES=symbol)]
+-
+ def configure(self, build, conf):
+- build.env.Append(CPPPATH='#lib/fidlib-0.9.10/')
++ if not conf.CheckLib('fidlib'):
++ raise Exception('Did not find fidlib library, exiting!')
++ build.env.Append(CPPPATH=[SCons.ARGUMENTS.get('prefix') + '/include/fidlib'])
+
+ class ReplayGain(Dependence):
+
+@@ -218,7 +203,6 @@
+ build.env.Append(CPPPATH="#lib/replaygain")
+
+ class SoundTouch(Dependence):
+- SOUNDTOUCH_PATH = 'soundtouch-1.6.0'
+
+ def sse_enabled(self, build):
+ optimize = int(util.get_flags(build.env, 'optimize', 1))
+@@ -227,42 +211,13 @@
+ (build.toolchain_is_gnu and optimize > 1))
+
+ def sources(self, build):
+- sources = ['engine/enginebufferscalest.cpp',
+- '#lib/%s/SoundTouch.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/TDStretch.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/RateTransposer.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/AAFilter.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/FIFOSampleBuffer.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/FIRFilter.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/PeakFinder.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/BPMDetect.cpp' % self.SOUNDTOUCH_PATH]
+-
+- # SoundTouch CPU optimizations are only for x86
+- # architectures. SoundTouch automatically ignores these files when it is
+- # not being built for an architecture that supports them.
+- cpu_detection = '#lib/%s/cpu_detect_x86_win.cpp' if build.toolchain_is_msvs else \
+- '#lib/%s/cpu_detect_x86_gcc.cpp'
+- sources.append(cpu_detection % self.SOUNDTOUCH_PATH)
+-
+- # Check if the compiler has SSE extention enabled
+- # Allways the case on x64 (core instructions)
+- if self.sse_enabled(build):
+- sources.extend(
+- ['#lib/%s/mmx_optimized.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/sse_optimized.cpp' % self.SOUNDTOUCH_PATH,])
+- return sources
++ return ['engine/enginebufferscalest.cpp']
+
+ def configure(self, build, conf):
+- if build.platform_is_windows:
+- # Regardless of the bitwidth, ST checks for WIN32
+- build.env.Append(CPPDEFINES = 'WIN32')
+- build.env.Append(CPPPATH=['#lib/%s' % self.SOUNDTOUCH_PATH])
+-
+- # Check if the compiler has SSE extention enabled
+- # Allways the case on x64 (core instructions)
+- optimize = int(util.get_flags(build.env, 'optimize', 1))
+- if self.sse_enabled(build):
+- build.env.Append(CPPDEFINES='SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS')
++ if not conf.CheckLib(['SoundTouch','libSoundTouch']):
++ raise Exception('Did not find SoundTouch library, exiting!')
++ build.env.Append(CPPPATH=[SCons.ARGUMENTS.get('prefix') + '/include/soundtouch'])
++ build.env.Append(LIBS='SoundTouch')
+
+ class TagLib(Dependence):
+ def configure(self, build, conf):
+
+--- mixxx-9999/build/features.py 2011-12-08 11:47:54 +0000
++++ mixxx-9999/build/features.py 2012-03-21 20:41:47 +0000
+@@ -595,25 +595,15 @@
+ test_env.Append(CCFLAGS = '-pthread')
+ test_env.Append(LINKFLAGS = '-pthread')
+
+- test_env.Append(CPPPATH="#lib/gtest-1.5.0/include")
+- gtest_dir = test_env.Dir("#lib/gtest-1.5.0")
+- #gtest_dir.addRepository(build.env.Dir('#lib/gtest-1.5.0'))
+- #build.env['EXE_OUTPUT'] = '#/lib/gtest-1.3.0/bin' # example, optional
+- test_env['LIB_OUTPUT'] = '#/lib/gtest-1.5.0/lib'
+-
+- env = test_env
+- SCons.Export('env')
+- env.SConscript(env.File('SConscript', gtest_dir))
+-
+- # build and configure gmock
+- test_env.Append(CPPPATH="#lib/gmock-1.5.0/include")
+- gmock_dir = test_env.Dir("#lib/gmock-1.5.0")
+- #gmock_dir.addRepository(build.env.Dir('#lib/gmock-1.5.0'))
+- test_env['LIB_OUTPUT'] = '#/lib/gmock-1.5.0/lib'
+-
+- env.SConscript(env.File('SConscript', gmock_dir))
+-
+- return []
++ if not conf.CheckLib('gtest'):
++ raise Exception('Did not find gtest library, exiting!')
++ test_env.Append(CPPPATH=[SCons.ARGUMENTS.get('prefix') + '/include/gtest'])
++ test_env.Append(LIBS='gtest')
++
++ if not conf.CheckLib('gmock'):
++ raise Exception('Did not find gmock library, exiting!')
++ test_env.Append(CPPPATH=[SCons.ARGUMENTS.get('prefix') + '/include/gmock'])
++ test_env.Append(LIBS='gmock')
+
+ class Shoutcast(Feature):
+ def description(self):
+
+--- mixxx-9999/src/engine/enginefilter.h 2011-07-24 21:50:31 +0000
++++ mixxx-9999/src/engine/enginefilter.h 2012-03-21 20:41:47 +0000
+@@ -20,7 +20,7 @@
+
+ #define MIXXX
+ #include "engine/engineobject.h"
+-#include "../lib/fidlib-0.9.10/fidlib.h"
++#include "fidlib.h"
+ #include "defs.h"
+
+ enum filterType{
+
+--- mixxx-9999/src/engine/enginefilterbutterworth8.cpp 2011-07-24 21:50:31 +0000
++++ mixxx-9999/src/engine/enginefilterbutterworth8.cpp 2012-03-21 20:41:47 +0000
+@@ -20,7 +20,6 @@
+ #include "engine/enginefilterbutterworth8.h"
+ #include "engine/enginefilter.h"
+ #include "engine/engineobject.h"
+-#include "../lib/fidlib-0.9.10/fidlib.h"
+
+ /* Local Prototypes */
+ inline double _processLowpass(double *coef, double *buf, register double val);
+
diff --git a/media-sound/mixxx/files/mixxx-1.6.0_beta4-debug.patch b/media-sound/mixxx/files/mixxx-1.6.0_beta4-debug.patch
new file mode 100644
index 0000000..e9488c2
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-1.6.0_beta4-debug.patch
@@ -0,0 +1,10 @@
+--- src/enginefilterblock.cpp.orig 2008-05-22 09:27:10.000000000 -0700
++++ src/enginefilterblock.cpp 2008-05-22 09:27:16.000000000 -0700
+@@ -21,6 +21,7 @@
+ #include "enginefilteriir.h"
+ #include "enginefilter.h"
+ #include "enginefilterbutterworth8.h"
++#include <QtDebug>
+
+ EngineFilterBlock::EngineFilterBlock(const char * group)
+ {
diff --git a/media-sound/mixxx/files/mixxx-1.9.0-flags.patch b/media-sound/mixxx/files/mixxx-1.9.0-flags.patch
new file mode 100644
index 0000000..09c0088
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-1.9.0-flags.patch
@@ -0,0 +1,24 @@
+--- build/mixxx.py.orig 2010-12-22 11:21:56.000000000 -0800
++++ build/mixxx.py 2010-12-22 11:16:22.000000000 -0800
+@@ -189,7 +189,7 @@
+ if os.environ.has_key('CC'):
+ self.env['CC'] = os.environ['CC']
+ if os.environ.has_key('CFLAGS'):
+- self.env['CCFLAGS'] += SCons.Util.CLVar(os.environ['CFLAGS'])
++ self.env['CFLAGS'] += SCons.Util.CLVar(os.environ['CFLAGS'])
+ if os.environ.has_key('CXX'):
+ self.env['CXX'] = os.environ['CXX']
+ if os.environ.has_key('CXXFLAGS'):
+--- build/depends.py.orig 2010-12-22 11:13:22.000000000 -0800
++++ build/depends.py 2010-12-22 11:14:02.000000000 -0800
+@@ -587,10 +587,8 @@
+ if build.toolchain_is_gnu:
+ # Default GNU Options
+ # TODO(XXX) always generate debugging info?
+- build.env.Append(CCFLAGS = '-pipe')
+ build.env.Append(CCFLAGS = '-Wall')
+ build.env.Append(CCFLAGS = '-Wextra')
+- build.env.Append(CCFLAGS = '-g')
+
+ # Check that g++ is present (yeah, SCONS is a bit dumb here)
+ if os.system("which g++ > /dev/null"): #Checks for non-zero return code
diff --git a/media-sound/mixxx/files/mixxx-1.9.0-libsoundtouch.patch b/media-sound/mixxx/files/mixxx-1.9.0-libsoundtouch.patch
new file mode 100644
index 0000000..25f349c
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-1.9.0-libsoundtouch.patch
@@ -0,0 +1,68 @@
+--- build/depends.py.orig 2010-12-22 11:13:22.000000000 -0800
++++ build/depends.py 2010-12-22 11:33:29.000000000 -0800
+@@ -234,60 +234,16 @@
+ build.env.Append(CPPPATH="#lib/replaygain")
+
+ class SoundTouch(Dependence):
+- SOUNDTOUCH_PATH = 'soundtouch-1.4.1'
+
+ def sources(self, build):
+- sources = ['engine/enginebufferscalest.cpp',
+- '#lib/%s/SoundTouch.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/TDStretch.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/RateTransposer.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/AAFilter.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/FIFOSampleBuffer.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/FIRFilter.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/PeakFinder.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/BPMDetect.cpp' % self.SOUNDTOUCH_PATH]
+- if build.platform_is_windows and build.toolchain_is_msvs:
+- if build.machine_is_64bit:
+- sources.append(
+- '#lib/%s/cpu_detect_x64_win.cpp' % self.SOUNDTOUCH_PATH)
+- elif build.machine == 'x86':
+- sources.append(
+- '#lib/%s/cpu_detect_x86_win.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- raise Exception("Unhandled CPU configuration for SoundTouch")
+- elif build.toolchain_is_gnu:
+- if build.machine == 'x86_64':
+- sources.append(
+- '#lib/%s/cpu_detect_x64_gcc.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- sources.append(
+- '#lib/%s/cpu_detect_x86_gcc.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- raise Exception("Unhandled CPU configuration for SoundTouch")
+-
+- # TODO(XXX) when we figure out a better way to represent features, fix
+- # this.
+- optimize = int(util.get_flags(build.env, 'optimize', 1))
+- if build.machine_is_64bit or \
+- (build.toolchain_is_msvs and optimize > 1) or \
+- (build.toolchain_is_gnu and optimize > 2):
+- sources.extend(
+- ['#lib/%s/mmx_optimized.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/sse_optimized.cpp' % self.SOUNDTOUCH_PATH,
+- ])
+- if build.toolchain_is_msvs and not build.machine_is_64bit:
+- sources.append('#lib/%s/3dnow_win.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- # TODO(XXX) the docs refer to a 3dnow_gcc, but we don't seem to have
+- # it.
+- pass
+-
++ sources = ['engine/enginebufferscalest.cpp']
+ return sources
+
+ def configure(self, build, conf):
+- if build.platform_is_windows:
+- build.env.Append(CPPDEFINES = 'WIN%s' % build.bitwidth)
+- build.env.Append(CPPPATH=['#lib/%s' % self.SOUNDTOUCH_PATH])
++ if not conf.CheckLib(['SoundTouch','libSoundTouch']):
++ raise Exception('Did not find libSoundTouch.a, libSoundTouch.lib, or the libSoundTouch development header files - exiting!')
++ build.env.Append(CPPPATH=[SCons.ARGUMENTS.get('prefix', '/usr/local') + '/include/soundtouch'])
++ build.env.Append(LIBS='SoundTouch')
+
+ # TODO(XXX) when we figure out a better way to represent features, fix
+ # this.
diff --git a/media-sound/mixxx/files/mixxx-1.9.0-linux3.patch b/media-sound/mixxx/files/mixxx-1.9.0-linux3.patch
new file mode 100644
index 0000000..89bac8e
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-1.9.0-linux3.patch
@@ -0,0 +1,23 @@
+=== modified file 'mixxx/build/mixxx.py'
+--- mixxx/build/mixxx.py 2011-06-13 01:29:39 +0000
++++ mixxx/build/mixxx.py 2011-06-17 17:37:59 +0000
+@@ -188,7 +188,7 @@
+ # Should cover {Net,Open,Free,DragonFly}BSD, but only tested on OpenBSD
+ if 'bsd' in sys.platform:
+ return 'bsd'
+- if 'linux2' == sys.platform:
++ if sys.platform in ['linux2', 'linux3']:
+ return 'linux'
+ if sys.platform == 'darwin':
+ return 'osx'
+--- mixxx/build/qt4.py 2011-09-15 01:05:21.872433812 +0100
++++ mixxx/build/qt4.py 2011-09-15 01:06:34.628431259 +0100
+@@ -409,7 +409,7 @@
+ self.AppendUnique(CPPFLAGS=['-DQT_GUI_LIB'])
+
+ debugSuffix = ''
+- if sys.platform == "linux2" :
++ if sys.platform in ["linux2", "linux3"]:
+ if debug : debugSuffix = '_debug'
+ for module in modules :
+ if module not in pclessModules : continue
diff --git a/media-sound/mixxx/files/mixxx-1.9.2-flags.patch b/media-sound/mixxx/files/mixxx-1.9.2-flags.patch
new file mode 100644
index 0000000..c543e76
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-1.9.2-flags.patch
@@ -0,0 +1,13 @@
+--- build/depends.py.orig 2010-12-22 11:13:22.000000000 -0800
++++ build/depends.py 2010-12-22 11:14:02.000000000 -0800
+@@ -587,10 +587,8 @@
+ if build.toolchain_is_gnu:
+ # Default GNU Options
+ # TODO(XXX) always generate debugging info?
+- build.env.Append(CCFLAGS = '-pipe')
+ build.env.Append(CCFLAGS = '-Wall')
+ build.env.Append(CCFLAGS = '-Wextra')
+- build.env.Append(CCFLAGS = '-g')
+
+ # Check that g++ is present (yeah, SCONS is a bit dumb here)
+ if os.system("which g++ > /dev/null"): #Checks for non-zero return code
diff --git a/media-sound/mixxx/files/mixxx-1.9.2-libsoundtouch.patch b/media-sound/mixxx/files/mixxx-1.9.2-libsoundtouch.patch
new file mode 100644
index 0000000..25f349c
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-1.9.2-libsoundtouch.patch
@@ -0,0 +1,68 @@
+--- build/depends.py.orig 2010-12-22 11:13:22.000000000 -0800
++++ build/depends.py 2010-12-22 11:33:29.000000000 -0800
+@@ -234,60 +234,16 @@
+ build.env.Append(CPPPATH="#lib/replaygain")
+
+ class SoundTouch(Dependence):
+- SOUNDTOUCH_PATH = 'soundtouch-1.4.1'
+
+ def sources(self, build):
+- sources = ['engine/enginebufferscalest.cpp',
+- '#lib/%s/SoundTouch.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/TDStretch.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/RateTransposer.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/AAFilter.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/FIFOSampleBuffer.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/FIRFilter.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/PeakFinder.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/BPMDetect.cpp' % self.SOUNDTOUCH_PATH]
+- if build.platform_is_windows and build.toolchain_is_msvs:
+- if build.machine_is_64bit:
+- sources.append(
+- '#lib/%s/cpu_detect_x64_win.cpp' % self.SOUNDTOUCH_PATH)
+- elif build.machine == 'x86':
+- sources.append(
+- '#lib/%s/cpu_detect_x86_win.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- raise Exception("Unhandled CPU configuration for SoundTouch")
+- elif build.toolchain_is_gnu:
+- if build.machine == 'x86_64':
+- sources.append(
+- '#lib/%s/cpu_detect_x64_gcc.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- sources.append(
+- '#lib/%s/cpu_detect_x86_gcc.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- raise Exception("Unhandled CPU configuration for SoundTouch")
+-
+- # TODO(XXX) when we figure out a better way to represent features, fix
+- # this.
+- optimize = int(util.get_flags(build.env, 'optimize', 1))
+- if build.machine_is_64bit or \
+- (build.toolchain_is_msvs and optimize > 1) or \
+- (build.toolchain_is_gnu and optimize > 2):
+- sources.extend(
+- ['#lib/%s/mmx_optimized.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/sse_optimized.cpp' % self.SOUNDTOUCH_PATH,
+- ])
+- if build.toolchain_is_msvs and not build.machine_is_64bit:
+- sources.append('#lib/%s/3dnow_win.cpp' % self.SOUNDTOUCH_PATH)
+- else:
+- # TODO(XXX) the docs refer to a 3dnow_gcc, but we don't seem to have
+- # it.
+- pass
+-
++ sources = ['engine/enginebufferscalest.cpp']
+ return sources
+
+ def configure(self, build, conf):
+- if build.platform_is_windows:
+- build.env.Append(CPPDEFINES = 'WIN%s' % build.bitwidth)
+- build.env.Append(CPPPATH=['#lib/%s' % self.SOUNDTOUCH_PATH])
++ if not conf.CheckLib(['SoundTouch','libSoundTouch']):
++ raise Exception('Did not find libSoundTouch.a, libSoundTouch.lib, or the libSoundTouch development header files - exiting!')
++ build.env.Append(CPPPATH=[SCons.ARGUMENTS.get('prefix', '/usr/local') + '/include/soundtouch'])
++ build.env.Append(LIBS='SoundTouch')
+
+ # TODO(XXX) when we figure out a better way to represent features, fix
+ # this.
diff --git a/media-sound/mixxx/files/mixxx-9999-cflags.patch b/media-sound/mixxx/files/mixxx-9999-cflags.patch
new file mode 100644
index 0000000..94ef76e
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-9999-cflags.patch
@@ -0,0 +1,13 @@
+--- mixxx-9999/build/depends.py 2010-12-22 11:13:22.000000000 -0800
++++ mixxx-9999/build/depends.py 2010-12-22 11:14:02.000000000 -0800
+@@ -587,10 +587,8 @@
+ if build.toolchain_is_gnu:
+ # Default GNU Options
+ # TODO(XXX) always generate debugging info?
+- build.env.Append(CCFLAGS = '-pipe')
+ build.env.Append(CCFLAGS = '-Wall')
+ build.env.Append(CCFLAGS = '-Wextra')
+- build.env.Append(CCFLAGS = '-g')
+
+ # Check that g++ is present (yeah, SCONS is a bit dumb here)
+ if os.system("which g++ > /dev/null"): #Checks for non-zero return code
diff --git a/media-sound/mixxx/files/mixxx-9999-docs.patch b/media-sound/mixxx/files/mixxx-9999-docs.patch
new file mode 100644
index 0000000..65bd39d
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-9999-docs.patch
@@ -0,0 +1,10 @@
+--- mixxx-9999/src/SConscript
++++ mixxx-9999/src/SConscript
+@@ -223,7 +223,6 @@
+ env.Alias('install', keyboardmappings)
+ if int(flags['ladspa']):
+ env.Alias('install', ladspapresets)
+- env.Alias('install', docs)
+ env.Alias('install', dotdesktop)
+ env.Alias('install', icon)
+ env.Alias('install', promotracks)
diff --git a/media-sound/mixxx/files/mixxx-9999-flags.patch b/media-sound/mixxx/files/mixxx-9999-flags.patch
new file mode 100644
index 0000000..c543e76
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-9999-flags.patch
@@ -0,0 +1,13 @@
+--- build/depends.py.orig 2010-12-22 11:13:22.000000000 -0800
++++ build/depends.py 2010-12-22 11:14:02.000000000 -0800
+@@ -587,10 +587,8 @@
+ if build.toolchain_is_gnu:
+ # Default GNU Options
+ # TODO(XXX) always generate debugging info?
+- build.env.Append(CCFLAGS = '-pipe')
+ build.env.Append(CCFLAGS = '-Wall')
+ build.env.Append(CCFLAGS = '-Wextra')
+- build.env.Append(CCFLAGS = '-g')
+
+ # Check that g++ is present (yeah, SCONS is a bit dumb here)
+ if os.system("which g++ > /dev/null"): #Checks for non-zero return code
diff --git a/media-sound/mixxx/files/mixxx-9999-libsoundtouch.patch b/media-sound/mixxx/files/mixxx-9999-libsoundtouch.patch
new file mode 100644
index 0000000..abd779e
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-9999-libsoundtouch.patch
@@ -0,0 +1,43 @@
+=== modified file 'mixxx/build/depends.py'
+--- build/depends.py 2011-11-08 20:10:32 +0000
++++ build/depends.py 2011-11-08 23:38:43 +0000
+@@ -222,33 +222,19 @@
+ build.env.Append(CPPPATH="#lib/replaygain")
+
+ class SoundTouch(Dependence):
+- SOUNDTOUCH_PATH = 'soundtouch-1.6.0'
+
+ def sources(self, build):
+- sources = ['engine/enginebufferscalest.cpp',
+- '#lib/%s/SoundTouch.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/TDStretch.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/RateTransposer.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/AAFilter.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/FIFOSampleBuffer.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/FIRFilter.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/PeakFinder.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/BPMDetect.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/mmx_optimized.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/sse_optimized.cpp' % self.SOUNDTOUCH_PATH,]
+-
+- # SoundTouch CPU optimizations are only for x86
+- # architectures. SoundTouch automatically ignores these files when it is
+- # not being built for an architecture that supports them.
+- cpu_detection = '#lib/%s/cpu_detect_x86_win.cpp' if build.toolchain_is_msvs else '#lib/%s/cpu_detect_x86_gcc.cpp'
+- sources.append(cpu_detection % self.SOUNDTOUCH_PATH)
++ sources = ['engine/enginebufferscalest.cpp']
+ return sources
+
+ def configure(self, build, conf):
+ if build.platform_is_windows:
+ # Regardless of the bitwidth, ST checks for WIN32
+ build.env.Append(CPPDEFINES = 'WIN32')
+- build.env.Append(CPPPATH=['#lib/%s' % self.SOUNDTOUCH_PATH])
++ if not conf.CheckLib(['SoundTouch','libSoundTouch']):
++ raise Exception('Did not find libSoundTouch.a, libSoundTouch.lib, or the libSoundTouch development header files - exiting!')
++ build.env.Append(CPPPATH=[SCons.ARGUMENTS.get('prefix', '/usr/local') + '/include/soundtouch'])
++ build.env.Append(LIBS='SoundTouch')
+
+ class TagLib(Dependence):
+ def configure(self, build, conf):
+
diff --git a/media-sound/mixxx/files/mixxx-9999-no-bzr.patch b/media-sound/mixxx/files/mixxx-9999-no-bzr.patch
new file mode 100644
index 0000000..4476f18
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-9999-no-bzr.patch
@@ -0,0 +1,38 @@
+--- mixxx-9999/src/SConscript.env
++++ mixxx-9999/src/SConscript.env
+@@ -19,21 +19,6 @@
+ print "Deleting deprecated build file: %s" % defs
+ os.remove(defs)
+
+-#env.Append(CPPDEFINES=[('BUILD_REV', '"%s"' % getBZRRevision())]) #doing this forces a rebuild of everything whenever a commit happens -- not much fun
+-## instead, embed BZR version into build
+-## Put version info into a file, so it doesn't force a rebuild of everything :)
+-f = open("build.h","w")
+-try:
+- branch_name = util.get_bzr_branch_name()
+- modified = util.get_bzr_modified() > 0
+- # Do not emit BUILD_BRANCH on release branches.
+- if not branch_name.startswith('release'):
+- f.write('#define BUILD_BRANCH "%s"\n' % branch_name)
+- f.write('#define BUILD_REV "%s%s"\n' % (util.get_bzr_revision(),
+- '+' if modified else ''))
+-finally:
+- f.close()
+-
+ #Check for dependencies if we're not doing a clean...
+ #if not env.GetOption('clean') and not SCons.Util.containsAny(os.sys.argv, ['-h', '--help']):
+ conf = Configure(env, custom_tests = { 'CheckForPKGConfig' : util.CheckForPKGConfig,
+
+--- mixxx-9999/src/SConscript
++++ mixxx-9999/src/SConscript
+@@ -12,8 +12,8 @@
+ from build import util
+
+ mixxx_version = util.get_mixxx_version()
+-branch_name = util.get_bzr_branch_name()
+-bazaar_revision = util.get_bzr_revision()
++#branch_name = util.get_bzr_branch_name()
++#bazaar_revision = util.get_bzr_revision()
+ print "WE ARE IN:", os.getcwd()
+
+ plugins = []
diff --git a/media-sound/mixxx/files/mixxx-9999-qt4_paths.patch b/media-sound/mixxx/files/mixxx-9999-qt4_paths.patch
new file mode 100644
index 0000000..3a8ca65
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-9999-qt4_paths.patch
@@ -0,0 +1,22 @@
+--- src/SConscript.orig 2007-07-21 13:59:44.000000000 +0200
++++ src/SConscript 2007-07-21 14:02:01.000000000 +0200
+@@ -325,7 +325,7 @@
+ env.Append(LIBS = 'shell32')
+
+ env.Append(CXXFLAGS = ' -DQT3_SUPPORT -DQT3_SUPPORT_WARNINGS -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT') #Stolen from Mixxx's build output
+-env.Append(CXXFLAGS = ' -I$QTDIR/include/Qt3Support -I$QTDIR/include/QtCore -I$QTDIR/include/QtGui -I$QTDIR/include/QtXml -I$QTDIR/include/QtOpenGl -I$QTDIR/include/Qt -I"$VCINSTALLDIR/include/atl"')
++env.Append(CXXFLAGS = ' -I/usr/include/qt4 -I/usr/include/qt4/Qt3Support -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtXml -I/usr/include/qt4/QtOpenGl -I/usr/include/qt4/Qt -I"$VCINSTALLDIR/include/atl"')
+
+ if not platform == 'win32':
+ env.Append(CXXFLAGS = ' -pipe -O3 -pipe -Wall -W -g -D_REENTRANT') # omghax
+--- src/qt4.py.orig 2007-07-21 15:29:25.000000000 +0200
++++ src/qt4.py 2007-07-21 15:31:06.000000000 +0200
+@@ -246,7 +246,7 @@
+ QTDIR = _detect(env),
+ QT4_BINPATH = os.path.join('$QTDIR', 'bin'),
+ QT4_CPPPATH = os.path.join('$QTDIR', 'include'),
+- QT4_LIBPATH = os.path.join('$QTDIR', 'lib'),
++ QT4_LIBPATH = os.path.join('/usr/lib/qt4'),
+ # TODO: This is not reliable to QTDIR value changes but needed in order to support '-qt4' variants
+ QT4_MOC = locateQt4Command(env,'moc', env['QTDIR']),
+ QT4_UIC = locateQt4Command(env,'uic', env['QTDIR']),
diff --git a/media-sound/mixxx/files/mixxx-9999-system-libs.patch b/media-sound/mixxx/files/mixxx-9999-system-libs.patch
new file mode 100644
index 0000000..41c4af1
--- /dev/null
+++ b/media-sound/mixxx/files/mixxx-9999-system-libs.patch
@@ -0,0 +1,150 @@
+=== modified file 'mixxx/build/depends.py'
+--- mixxx-9999/build/depends.py 2012-04-22 17:33:25 +0000
++++ mixxx-9999/build/depends.py 2012-04-23 23:49:03 +0000
+@@ -189,25 +189,10 @@
+
+ class FidLib(Dependence):
+
+- def sources(self, build):
+- symbol = None
+- if build.platform_is_windows:
+- if build.toolchain_is_msvs:
+- symbol = 'T_MSVC'
+- elif build.crosscompile:
+- # Not sure why, but fidlib won't build with mingw32msvc and
+- # T_MINGW
+- symbol = 'T_LINUX'
+- elif build.toolchain_is_gnu:
+- symbol = 'T_MINGW'
+- else:
+- symbol = 'T_LINUX'
+-
+- return [build.env.StaticObject('#lib/fidlib-0.9.10/fidlib.c',
+- CPPDEFINES=symbol)]
+-
+ def configure(self, build, conf):
+- build.env.Append(CPPPATH='#lib/fidlib-0.9.10/')
++ if not conf.CheckLib('fidlib'):
++ raise Exception('Did not find fidlib library, exiting!')
++ build.env.Append(CPPPATH=[SCons.ARGUMENTS.get('prefix') + '/include/fidlib'])
+
+ class ReplayGain(Dependence):
+
+@@ -218,7 +203,6 @@
+ build.env.Append(CPPPATH="#lib/replaygain")
+
+ class SoundTouch(Dependence):
+- SOUNDTOUCH_PATH = 'soundtouch-1.6.0'
+
+ def sse_enabled(self, build):
+ optimize = int(util.get_flags(build.env, 'optimize', 1))
+@@ -227,42 +211,13 @@
+ (build.toolchain_is_gnu and optimize > 1))
+
+ def sources(self, build):
+- sources = ['engine/enginebufferscalest.cpp',
+- '#lib/%s/SoundTouch.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/TDStretch.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/RateTransposer.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/AAFilter.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/FIFOSampleBuffer.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/FIRFilter.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/PeakFinder.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/BPMDetect.cpp' % self.SOUNDTOUCH_PATH]
+-
+- # SoundTouch CPU optimizations are only for x86
+- # architectures. SoundTouch automatically ignores these files when it is
+- # not being built for an architecture that supports them.
+- cpu_detection = '#lib/%s/cpu_detect_x86_win.cpp' if build.toolchain_is_msvs else \
+- '#lib/%s/cpu_detect_x86_gcc.cpp'
+- sources.append(cpu_detection % self.SOUNDTOUCH_PATH)
+-
+- # Check if the compiler has SSE extention enabled
+- # Allways the case on x64 (core instructions)
+- if self.sse_enabled(build):
+- sources.extend(
+- ['#lib/%s/mmx_optimized.cpp' % self.SOUNDTOUCH_PATH,
+- '#lib/%s/sse_optimized.cpp' % self.SOUNDTOUCH_PATH,])
+- return sources
++ return ['engine/enginebufferscalest.cpp']
+
+ def configure(self, build, conf):
+- if build.platform_is_windows:
+- # Regardless of the bitwidth, ST checks for WIN32
+- build.env.Append(CPPDEFINES = 'WIN32')
+- build.env.Append(CPPPATH=['#lib/%s' % self.SOUNDTOUCH_PATH])
+-
+- # Check if the compiler has SSE extention enabled
+- # Allways the case on x64 (core instructions)
+- optimize = int(util.get_flags(build.env, 'optimize', 1))
+- if self.sse_enabled(build):
+- build.env.Append(CPPDEFINES='SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS')
++ if not conf.CheckLib(['SoundTouch','libSoundTouch']):
++ raise Exception('Did not find SoundTouch library, exiting!')
++ build.env.Append(CPPPATH=[SCons.ARGUMENTS.get('prefix') + '/include/soundtouch'])
++ build.env.Append(LIBS='SoundTouch')
+
+ class TagLib(Dependence):
+ def configure(self, build, conf):
+
+--- mixxx-9999/build/features.py 2011-12-08 11:47:54 +0000
++++ mixxx-9999/build/features.py 2012-03-21 20:41:47 +0000
+@@ -595,25 +595,15 @@
+ test_env.Append(CCFLAGS = '-pthread')
+ test_env.Append(LINKFLAGS = '-pthread')
+
+- test_env.Append(CPPPATH="#lib/gtest-1.5.0/include")
+- gtest_dir = test_env.Dir("#lib/gtest-1.5.0")
+- #gtest_dir.addRepository(build.env.Dir('#lib/gtest-1.5.0'))
+- #build.env['EXE_OUTPUT'] = '#/lib/gtest-1.3.0/bin' # example, optional
+- test_env['LIB_OUTPUT'] = '#/lib/gtest-1.5.0/lib'
+-
+- env = test_env
+- SCons.Export('env')
+- env.SConscript(env.File('SConscript', gtest_dir))
+-
+- # build and configure gmock
+- test_env.Append(CPPPATH="#lib/gmock-1.5.0/include")
+- gmock_dir = test_env.Dir("#lib/gmock-1.5.0")
+- #gmock_dir.addRepository(build.env.Dir('#lib/gmock-1.5.0'))
+- test_env['LIB_OUTPUT'] = '#/lib/gmock-1.5.0/lib'
+-
+- env.SConscript(env.File('SConscript', gmock_dir))
+-
+- return []
++ if not conf.CheckLib('gtest'):
++ raise Exception('Did not find gtest library, exiting!')
++ test_env.Append(CPPPATH=[SCons.ARGUMENTS.get('prefix') + '/include/gtest'])
++ test_env.Append(LIBS='gtest')
++
++ if not conf.CheckLib('gmock'):
++ raise Exception('Did not find gmock library, exiting!')
++ test_env.Append(CPPPATH=[SCons.ARGUMENTS.get('prefix') + '/include/gmock'])
++ test_env.Append(LIBS='gmock')
+
+ class Shoutcast(Feature):
+ def description(self):
+
+--- mixxx-9999/src/engine/enginefilter.h 2011-07-24 21:50:31 +0000
++++ mixxx-9999/src/engine/enginefilter.h 2012-03-21 20:41:47 +0000
+@@ -20,7 +20,7 @@
+
+ #define MIXXX
+ #include "engine/engineobject.h"
+-#include "../lib/fidlib-0.9.10/fidlib.h"
++#include "fidlib.h"
+ #include "defs.h"
+
+ enum filterType{
+
+--- mixxx-9999/src/engine/enginefilterbutterworth8.cpp 2011-07-24 21:50:31 +0000
++++ mixxx-9999/src/engine/enginefilterbutterworth8.cpp 2012-03-21 20:41:47 +0000
+@@ -20,7 +20,6 @@
+ #include "engine/enginefilterbutterworth8.h"
+ #include "engine/enginefilter.h"
+ #include "engine/engineobject.h"
+-#include "../lib/fidlib-0.9.10/fidlib.h"
+
+ /* Local Prototypes */
+ inline double _processLowpass(double *coef, double *buf, register double val);
+
diff --git a/media-sound/mixxx/metadata.xml b/media-sound/mixxx/metadata.xml
new file mode 100644
index 0000000..211ab6b
--- /dev/null
+++ b/media-sound/mixxx/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer><email>maintainer-wanted@gentoo.org</email></maintainer>
+ <use>
+ <flag name="pulseaudio">Disables <pkg>media-sound/pulseaudio</pkg> support for mixxx with pasuspender</flag>
+ <flag name="shout">Enables <pkg>media-libs/libshout</pkg> support</flag>
+ </use>
+</pkgmetadata>
diff --git a/media-sound/mixxx/mixxx-9999-sunrise.ebuild.vorlage b/media-sound/mixxx/mixxx-9999-sunrise.ebuild.vorlage
new file mode 100644
index 0000000..a51a5bf
--- /dev/null
+++ b/media-sound/mixxx/mixxx-9999-sunrise.ebuild.vorlage
@@ -0,0 +1,85 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=3
+
+inherit bzr eutils multilib scons-utils toolchain-funcs
+
+DESCRIPTION="A QT based Digital DJ tool"
+HOMEPAGE="http://mixxx.sourceforge.net"
+EBZR_REPO_URI="lp:mixxx"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="aac debug mp4 pulseaudio shout wavpack"
+
+RDEPEND="media-libs/flac
+ media-libs/libid3tag
+ media-libs/libmad
+ media-libs/libogg
+ media-libs/libvorbis
+ media-libs/libsndfile
+ >=media-libs/libsoundtouch-1.5
+ >=media-libs/portaudio-19_pre
+ media-libs/portmidi
+ media-libs/taglib
+ virtual/opengl
+ virtual/glu
+ >=x11-libs/qt-gui-4.6:4
+ >=x11-libs/qt-svg-4.6:4
+ >=x11-libs/qt-opengl-4.6:4
+ >=x11-libs/qt-qt3support-4.6:4
+ >=x11-libs/qt-webkit-4.6:4
+ >=x11-libs/qt-xmlpatterns-4.6:4
+ aac? ( media-libs/faad2 )
+ mp4? ( media-libs/faad2
+ media-libs/libmp4v2
+ )
+ pulseaudio? ( media-sound/pulseaudio )
+ shout? ( media-libs/libshout )
+ wavpack? ( media-sound/wavpack )"
+DEPEND="${RDEPEND}
+ dev-util/pkgconfig"
+
+SCONS_MIN_VERSION="2.0.1"
+
+S=${S}/${PN}
+
+src_prepare() {
+ # patch CFLAGS issue
+ epatch "${FILESDIR}"/${P}-flags.patch
+
+ # patch external libsoundtouch
+# epatch "${FILESDIR}"/${P}-libsoundtouch.patch
+
+ # Patch startup command if not using pulse audio
+ use pulseaudio || sed -i -e 's:pasuspender ::' src/mixxx.desktop || die
+}
+
+src_compile() {
+ CC="$(tc-getCC)" CXX="$(tc-getCXX)" LINKFLAGS="${LDFLAGS}" \
+ LIBPATH="/usr/$(get_libdir)" escons \
+ prefix=/usr \
+ qtdir=/usr/$(get_libdir)/qt4 \
+ $(use_scons aac faad) \
+ $(use_scons debug qdebug) \
+ $(use_scons mp4 m4a) \
+ $(use_scons shout shoutcast) \
+ $(use_scons wavpack wv) \
+ $(use_scons ipod ipod) \
+ $(use_scons ffmpeg ffmpeg) \
+ $(use_scons ladspa ladspa) \
+ hifieq=1 \
+ vinylcontrol=1 \
+ optimize=0 \
+ || die
+}
+
+src_install() {
+ CC="$(tc-getCC)" CXX="$(tc-getCXX)" LINKFLAGS="${LDFLAGS}" \
+ LIBPATH="/usr/$(get_libdir)" escons install \
+ prefix=/usr \
+ install_root="${D}"/usr \
+ || die
+}
diff --git a/media-sound/mixxx/mixxx-9999.ebuild b/media-sound/mixxx/mixxx-9999.ebuild
new file mode 100644
index 0000000..f914d05
--- /dev/null
+++ b/media-sound/mixxx/mixxx-9999.ebuild
@@ -0,0 +1,90 @@
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=4
+
+inherit bzr eutils multilib scons-utils toolchain-funcs
+
+DESCRIPTION="A Qt based Digital DJ tool"
+HOMEPAGE="http://mixxx.sourceforge.net"
+EBZR_REPO_URI="lp:mixxx"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS=""
+IUSE="aac debug doc mp3 mp4 pulseaudio shout wavpack"
+
+RDEPEND="dev-libs/protobuf
+ media-libs/fidlib
+ media-libs/flac
+ media-libs/libid3tag
+ media-libs/libogg
+ media-libs/libsndfile
+ >=media-libs/libsoundtouch-1.5
+ media-libs/libvorbis
+ >=media-libs/portaudio-19_pre
+ media-libs/portmidi
+ media-libs/taglib
+ media-libs/vamp-plugin-sdk
+ virtual/glu
+ virtual/opengl
+ x11-libs/qt-gui:4
+ x11-libs/qt-opengl:4
+ x11-libs/qt-sql:4
+ x11-libs/qt-svg:4
+ x11-libs/qt-webkit:4
+ x11-libs/qt-xmlpatterns:4
+ aac? (
+ media-libs/faad2
+ media-libs/libmp4v2:0
+ )
+ mp3? ( media-libs/libmad )
+ mp4? ( media-libs/libmp4v2 )
+ pulseaudio? ( media-sound/pulseaudio )
+ shout? ( media-libs/libshout )
+ wavpack? ( media-sound/wavpack )"
+DEPEND="${RDEPEND}
+ dev-util/pkgconfig"
+
+S=${S}/${PN}
+
+src_prepare() {
+ epatch "${FILESDIR}"/${P}-cflags.patch
+ epatch "${FILESDIR}"/${P}-system-libs.patch
+ epatch "${FILESDIR}"/${P}-docs.patch
+ #epatch "${FILESDIR}"/${P}-no-bzr.patch
+
+ # use multilib compatible directory for plugins
+ sed -i -e "/unix_lib_path =/s/'lib'/'$(get_libdir)'/" src/SConscript || die
+
+ # alter startup command when pulseaudio support is disabled
+ if ! use pulseaudio ; then
+ sed -i -e 's:pasuspender ::' src/mixxx.desktop || die
+ fi
+}
+
+src_compile() {
+ CC="$(tc-getCC)" CXX="$(tc-getCXX)" LINKFLAGS="${LDFLAGS}" \
+ LIBPATH="/usr/$(get_libdir)" escons \
+ prefix=/usr \
+ qtdir=/usr/$(get_libdir)/qt4 \
+ hifieq=1 \
+ vinylcontrol=1 \
+ optimize=0 \
+ $(use_scons aac faad) \
+ $(use_scons debug qdebug) \
+ $(use_scons mp3 mad) \
+ $(use_scons mp4 m4a) \
+ $(use_scons shout shoutcast) \
+ $(use_scons wavpack wv)
+}
+
+src_install() {
+ CC="$(tc-getCC)" CXX="$(tc-getCXX)" LINKFLAGS="${LDFLAGS}" \
+ LIBPATH="/usr/$(get_libdir)" escons install \
+ prefix=/usr \
+ install_root="${D}"/usr
+
+ dodoc README Mixxx-Manual.pdf
+}
diff --git a/media-sound/mumble/Manifest b/media-sound/mumble/Manifest
new file mode 100644
index 0000000..8925477
--- /dev/null
+++ b/media-sound/mumble/Manifest
@@ -0,0 +1,6 @@
+AUX mumble-jack-support-r2.patch 16201 RMD160 03d3f838be6a4ec4e9553cd7aeacec56fbbce7de SHA1 4192cf9d18862f237f3b7e87161ab682caa1c983 SHA256 a2b6fc5a0f5d4b399af89f474c4b0ff878ce77fac01848f1681c9eec32739efb
+AUX mumble-jack-support.patch 16200 RMD160 2f060b1db79b2393daa52b4a42870a00fddc4b90 SHA1 bc1f8eca9c0399409cf75fd3c43f42c6aedeaba7 SHA256 8fb331d65363e394b7020c321e1105418c2150208bb9ab5f974e6f361dc557d4
+DIST mumble-1.2.2.tar.gz 2920587 RMD160 501aa1c4c170fb5aad2841cdfe3421376e62a07b SHA1 b2a7fd50e70147b3ea2361cbc5a577b0e1ae45ea SHA256 2c564e3d5b7481129482f2365375a2dc77e134c0c00012073cfdfbeadaa49be8
+DIST mumble-1.2.3.tar.gz 3448053 RMD160 c02e1c42e6996e7b6052772089febd22be67582d SHA1 420e245ef978d7e51ca3ed97922acf13f5ef982d SHA256 05895122ae4abec3fb62ef24ed9d167ffd768e7080ed179c8bf3afca96d18a5c
+EBUILD mumble-1.2.2-r1.ebuild 3437 RMD160 de7cbe3e4c6d26f9a7b1dcb01fc7c412f60aadf2 SHA1 03512ed9bccc432b55f6472cf271f08e235a7bd0 SHA256 44f8ac6159aa91c3590bc2b38df357763481bf111cc36439f7867d678e83c8dd
+EBUILD mumble-1.2.3-r2.ebuild 3656 RMD160 89e045ccfcaecdd778fa07e54ee2f4629704f48e SHA1 e84db7964d904aff477cb4bb03cd4015e4d7bf8b SHA256 3c8e802cbcdcf61678dfbecbc29ca781b7037782a9c5eaa557abeb8774d42b68
diff --git a/media-sound/mumble/files/mumble-jack-support-r2.patch b/media-sound/mumble/files/mumble-jack-support-r2.patch
new file mode 100644
index 0000000..fa94f44
--- /dev/null
+++ b/media-sound/mumble/files/mumble-jack-support-r2.patch
@@ -0,0 +1,454 @@
+diff -U 3 -H -d -r -N -- mumble-1.2.3/src/mumble/JackAudio.cpp mumble-1.2.3/src/mumble/JackAudio.cpp
+--- mumble-1.2.3/src/mumble/JackAudio.cpp 1970-01-01 01:00:00.000000000 +0100
++++ mumble-1.2.3/src/mumble/JackAudio.cpp 2011-01-26 06:02:00.000000000 +0000
+@@ -0,0 +1,314 @@
++/* Copyright (C) 2011, Benjamin Jemlich <pcgod@users.sourceforge.net>
++ Copyright (C) 2011, Filipe Coelho <falktx@gmail.com>
++
++ All rights reserved.
++
++ Redistribution and use in source and binary forms, with or without
++ modification, are permitted provided that the following conditions
++ are met:
++
++ - Redistributions of source code must retain the above copyright notice,
++ this list of conditions and the following disclaimer.
++ - Redistributions in binary form must reproduce the above copyright notice,
++ this list of conditions and the following disclaimer in the documentation
++ and/or other materials provided with the distribution.
++ - Neither the name of the Mumble Developers nor the names of its
++ contributors may be used to endorse or promote products derived from this
++ software without specific prior written permission.
++
++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
++ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
++ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++*/
++
++#include "JackAudio.h"
++#include "User.h"
++#include "Global.h"
++#include "MainWindow.h"
++#include "Timer.h"
++
++#include <cstring>
++
++static JackAudioSystem *jasys = NULL;
++
++class JackAudioInputRegistrar : public AudioInputRegistrar {
++ public:
++ JackAudioInputRegistrar();
++ virtual AudioInput *create();
++ virtual const QList<audioDevice> getDeviceChoices();
++ virtual void setDeviceChoice(const QVariant &, Settings &);
++ virtual bool canEcho(const QString &) const;
++};
++
++class JackAudioOutputRegistrar : public AudioOutputRegistrar {
++ public:
++ JackAudioOutputRegistrar();
++ virtual AudioOutput *create();
++ virtual const QList<audioDevice> getDeviceChoices();
++ virtual void setDeviceChoice(const QVariant &, Settings &);
++};
++
++class JackAudioInit : public DeferInit {
++ public:
++ JackAudioInputRegistrar *airJackAudio;
++ JackAudioOutputRegistrar *aorJackAudio;
++ void initialize() {
++ jasys = new JackAudioSystem();
++ jasys->init_jack();
++ jasys->qmWait.lock();
++ jasys->qwcWait.wait(&jasys->qmWait, 1000);
++ jasys->qmWait.unlock();
++ if (jasys->bJackIsGood) {
++ airJackAudio = new JackAudioInputRegistrar();
++ aorJackAudio = new JackAudioOutputRegistrar();
++ } else {
++ airJackAudio = NULL;
++ aorJackAudio = NULL;
++ delete jasys;
++ jasys = NULL;
++ }
++ };
++ void destroy() {
++ if (airJackAudio)
++ delete airJackAudio;
++ if (aorJackAudio)
++ delete aorJackAudio;
++ if (jasys) {
++ jasys->close_jack();
++ delete jasys;
++ jasys = NULL;
++ }
++ };
++};
++
++static JackAudioInit jackinit; //unused
++
++JackAudioSystem::JackAudioSystem() {
++ bJackIsGood = false;
++ iSampleRate = 0;
++}
++
++JackAudioSystem::~JackAudioSystem() {
++}
++
++void JackAudioSystem::init_jack()
++{
++ client = jack_client_open("mumble", JackNullOption, 0);
++
++ if (client) {
++ in_port = jack_port_register(client, "input", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
++ out_port = jack_port_register(client, "output", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
++ jack_set_process_callback(client, process_callback, this);
++ jack_set_sample_rate_callback(client, srate_callback, this);
++ jack_on_shutdown(client, shutdown_callback, this);
++
++ iSampleRate = jack_get_sample_rate(client);
++
++ if (jack_activate(client) || in_port == NULL || out_port == NULL) {
++ client = NULL;
++ return;
++ }
++
++ int port_flags;
++ unsigned i = -1;
++ const char** ports = jack_get_ports(client, 0, 0, JackPortIsPhysical);
++
++ if (ports) {
++ while (ports[++i])
++ {
++ jack_port_t* port = jack_port_by_name(client, ports[i]);
++ port_flags = jack_port_flags(port);
++
++ if (port_flags & (JackPortIsPhysical|JackPortIsOutput) && strstr(jack_port_type(port), "audio")) {
++ jack_connect(client, ports[i], jack_port_name(in_port));
++ }
++ if (port_flags & (JackPortIsPhysical|JackPortIsInput) && strstr(jack_port_type(port), "audio")) {
++ jack_connect(client, jack_port_name(out_port), ports[i]);
++ }
++ }
++ }
++
++ jack_free(ports);
++
++ // If we made it this far, then everything is okay
++ qhInput.insert(QString(), tr("Hardware Ports"));
++ qhOutput.insert(QString(), tr("Hardware Ports"));
++ bJackIsGood = true;
++
++ } else {
++ bJackIsGood = false;
++ client = NULL;
++ }
++}
++
++void JackAudioSystem::close_jack()
++{
++ if (client) {
++ jack_deactivate(client);
++ jack_client_close(client);
++ client = NULL;
++ }
++}
++
++int JackAudioSystem::process_callback(jack_nframes_t nframes, void *arg)
++{
++ JackAudioSystem *jas = (JackAudioSystem*)arg;
++
++ if (jas && jas->bJackIsGood) {
++ AudioInputPtr ai = g.ai;
++ AudioOutputPtr ao = g.ao;
++ JackAudioInput *jai = (JackAudioInput*)(ai.get());
++ JackAudioOutput *jao = (JackAudioOutput*)(ao.get());
++
++ if (jai && jai->bRunning && jai->iMicChannels > 0 && !jai->isFinished()) {
++ void* input = jack_port_get_buffer(jas->in_port, nframes);
++ if ((float*)input != 0)
++ jai->addMic(input, nframes);
++ }
++
++ if (jao && jao->bRunning && jao->iChannels > 0 && !jao->isFinished()) {
++ jack_default_audio_sample_t* output = (jack_default_audio_sample_t*)jack_port_get_buffer(jas->out_port, nframes);
++ memset(output, 0, sizeof(jack_default_audio_sample_t)*nframes); //TEST
++ jao->mix(output, nframes);
++ }
++ }
++
++ return 0;
++}
++
++int JackAudioSystem::srate_callback(jack_nframes_t frames, void *arg)
++{
++ JackAudioSystem *jas = (JackAudioSystem*)arg;
++ jas->iSampleRate = frames;
++ return 0;
++}
++
++void JackAudioSystem::shutdown_callback(void *arg)
++{
++ JackAudioSystem *jas = (JackAudioSystem*)arg;
++ jas->bJackIsGood = false;
++}
++
++JackAudioInputRegistrar::JackAudioInputRegistrar() : AudioInputRegistrar(QLatin1String("JACK"), 10) {
++}
++
++AudioInput *JackAudioInputRegistrar::create() {
++ return new JackAudioInput();
++}
++
++const QList<audioDevice> JackAudioInputRegistrar::getDeviceChoices() {
++ QList<audioDevice> qlReturn;
++
++ QStringList qlInputDevs = jasys->qhInput.keys();
++ qSort(qlInputDevs);
++
++ foreach(const QString &dev, qlInputDevs) {
++ qlReturn << audioDevice(jasys->qhInput.value(dev), dev);
++ }
++
++ return qlReturn;
++}
++
++void JackAudioInputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) {
++ Q_UNUSED(choice);
++ Q_UNUSED(s);
++}
++
++bool JackAudioInputRegistrar::canEcho(const QString &osys) const {
++ Q_UNUSED(osys);
++ return false;
++}
++
++JackAudioOutputRegistrar::JackAudioOutputRegistrar() : AudioOutputRegistrar(QLatin1String("JACK"), 10) {
++}
++
++AudioOutput *JackAudioOutputRegistrar::create() {
++ return new JackAudioOutput();
++}
++
++const QList<audioDevice> JackAudioOutputRegistrar::getDeviceChoices() {
++ QList<audioDevice> qlReturn;
++
++ QStringList qlOutputDevs = jasys->qhOutput.keys();
++ qSort(qlOutputDevs);
++
++ foreach(const QString &dev, qlOutputDevs) {
++ qlReturn << audioDevice(jasys->qhOutput.value(dev), dev);
++ }
++
++ return qlReturn;
++}
++
++void JackAudioOutputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) {
++ Q_UNUSED(choice);
++ Q_UNUSED(s);
++}
++
++JackAudioInput::JackAudioInput() {
++ bRunning = true;
++ iMicChannels = 0;
++};
++
++JackAudioInput::~JackAudioInput() {
++ bRunning = false;
++ iMicChannels = 0;
++ qmMutex.lock();
++ qwcWait.wakeAll();
++ qmMutex.unlock();
++ wait();
++}
++
++void JackAudioInput::run() {
++ if (jasys && jasys->bJackIsGood) {
++ iMicFreq = jasys->iSampleRate;
++ iMicChannels = 1;
++ eMicFormat = SampleFloat;
++ initializeMixer();
++ }
++
++ qmMutex.lock();
++ while (bRunning)
++ qwcWait.wait(&qmMutex);
++ qmMutex.unlock();
++}
++
++JackAudioOutput::JackAudioOutput() {
++ bRunning = true;
++ iChannels = 0;
++}
++
++JackAudioOutput::~JackAudioOutput() {
++ bRunning = false;
++ iChannels = 0;
++ qmMutex.lock();
++ qwcWait.wakeAll();
++ qmMutex.unlock();
++ wait();
++}
++
++void JackAudioOutput::run() {
++ if (jasys && jasys->bJackIsGood) {
++ unsigned int chanmasks[32];
++
++ chanmasks[0] = SPEAKER_FRONT_LEFT;
++ chanmasks[1] = SPEAKER_FRONT_RIGHT;
++
++ eSampleFormat = SampleFloat;
++ iMixerFreq = jasys->iSampleRate;
++ iChannels = 1;
++ initializeMixer(chanmasks);
++ }
++
++ qmMutex.lock();
++ while (bRunning)
++ qwcWait.wait(&qmMutex);
++ qmMutex.unlock();
++}
+diff -U 3 -H -d -r -N -- mumble-1.2.3/src/mumble/JackAudio.h mumble-1.2.3/src/mumble/JackAudio.h
+--- mumble-1.2.3/src/mumble/JackAudio.h 1970-01-01 01:00:00.000000000 +0100
++++ mumble-1.2.3/src/mumble/JackAudio.h 2011-01-26 06:03:58.000000000 +0000
+@@ -0,0 +1,97 @@
++/* Copyright (C) 2011, Benjamin Jemlich <pcgod@users.sourceforge.net>
++ Copyright (C) 2011, Filipe Coelho <falktx@gmail.com>
++
++ All rights reserved.
++
++ Redistribution and use in source and binary forms, with or without
++ modification, are permitted provided that the following conditions
++ are met:
++
++ - Redistributions of source code must retain the above copyright notice,
++ this list of conditions and the following disclaimer.
++ - Redistributions in binary form must reproduce the above copyright notice,
++ this list of conditions and the following disclaimer in the documentation
++ and/or other materials provided with the distribution.
++ - Neither the name of the Mumble Developers nor the names of its
++ contributors may be used to endorse or promote products derived from this
++ software without specific prior written permission.
++
++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
++ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
++ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++*/
++
++#ifndef _JACKAUDIO_H
++#define _JACKAUDIO_H
++
++#include "AudioInput.h"
++#include "AudioOutput.h"
++#include <jack/jack.h>
++
++class JackAudioOutput;
++class JackAudioInput;
++
++class JackAudioSystem : public QObject {
++ private:
++ Q_OBJECT
++ Q_DISABLE_COPY(JackAudioSystem)
++ protected:
++ jack_client_t* client;
++ jack_port_t* in_port;
++ jack_port_t* out_port;
++
++ static int process_callback(jack_nframes_t nframes, void *arg);
++ static int srate_callback(jack_nframes_t frames, void *arg);
++ static void shutdown_callback(void *arg);
++ public:
++ QHash<QString, QString> qhInput;
++ QHash<QString, QString> qhOutput;
++ bool bJackIsGood;
++ int iSampleRate;
++ QMutex qmWait;
++ QWaitCondition qwcWait;
++
++ void init_jack();
++ void close_jack();
++
++ JackAudioSystem();
++ ~JackAudioSystem();
++};
++
++class JackAudioInput : public AudioInput {
++ friend class JackAudioSystem;
++ private:
++ Q_OBJECT
++ Q_DISABLE_COPY(JackAudioInput)
++ protected:
++ QMutex qmMutex;
++ QWaitCondition qwcWait;
++ public:
++ JackAudioInput();
++ ~JackAudioInput();
++ void run();
++};
++
++class JackAudioOutput : public AudioOutput {
++ friend class JackAudioSystem;
++ private:
++ Q_OBJECT
++ Q_DISABLE_COPY(JackAudioOutput)
++ protected:
++ QMutex qmMutex;
++ QWaitCondition qwcWait;
++ public:
++ JackAudioOutput();
++ ~JackAudioOutput();
++ void run();
++};
++
++#endif
+diff -U 3 -H -d -r -N -- mumble-1.2.3/src/mumble/mumble.pro mumble-1.2.3/src/mumble/mumble.pro
+--- mumble-1.2.3/src/mumble/mumble.pro 2011-02-19 22:35:17.000000000 +0000
++++ mumble-1.2.3/src/mumble/mumble.pro 2011-08-22 00:19:05.000000000 +0000
+@@ -99,11 +100,17 @@
+ unix {
+ HAVE_PULSEAUDIO=$$system(pkg-config --modversion --silence-errors libpulse)
+ HAVE_PORTAUDIO=$$system(pkg-config --modversion --silence-errors portaudio-2.0)
++ HAVE_JACKAUDIO=$$system(pkg-config --modversion --silence-errors jack)
+
+ !isEmpty(HAVE_PORTAUDIO):!CONFIG(no-portaudio) {
+ CONFIG *= portaudio
+ }
+
++ !isEmpty(HAVE_JACKAUDIO):!CONFIG(no-jackaudio) {
++ CONFIG -= portaudio
++ CONFIG *= jackaudio
++ }
++
+ !isEmpty(HAVE_PULSEAUDIO):!CONFIG(no-pulseaudio) {
+ CONFIG -= portaudio
+ CONFIG *= pulseaudio
+@@ -116,6 +123,13 @@
+ QMAKE_CXXFLAGS_DEBUG *= -I../../speex/include -I../../speexbuild
+ }
+
++ jackaudio {
++ DEFINES *= USE_JACKAUDIO
++ PKGCONFIG *= jack
++ HEADERS *= JackAudio.h
++ SOURCES *= JackAudio.cpp
++ }
++
+ CONFIG *= link_pkgconfig
+
+ PKGCONFIG *= openssl sndfile
diff --git a/media-sound/mumble/files/mumble-jack-support.patch b/media-sound/mumble/files/mumble-jack-support.patch
new file mode 100644
index 0000000..8ab2d07
--- /dev/null
+++ b/media-sound/mumble/files/mumble-jack-support.patch
@@ -0,0 +1,454 @@
+diff -U 3 -H -d -r -N -- mumble-1.2.2/src/mumble/JackAudio.cpp mumble-1.2.2/src/mumble/JackAudio.cpp
+--- mumble-1.2.2/src/mumble/JackAudio.cpp 1970-01-01 01:00:00.000000000 +0100
++++ mumble-1.2.2/src/mumble/JackAudio.cpp 2011-01-26 06:02:00.000000000 +0000
+@@ -0,0 +1,314 @@
++/* Copyright (C) 2011, Benjamin Jemlich <pcgod@users.sourceforge.net>
++ Copyright (C) 2011, Filipe Coelho <falktx@gmail.com>
++
++ All rights reserved.
++
++ Redistribution and use in source and binary forms, with or without
++ modification, are permitted provided that the following conditions
++ are met:
++
++ - Redistributions of source code must retain the above copyright notice,
++ this list of conditions and the following disclaimer.
++ - Redistributions in binary form must reproduce the above copyright notice,
++ this list of conditions and the following disclaimer in the documentation
++ and/or other materials provided with the distribution.
++ - Neither the name of the Mumble Developers nor the names of its
++ contributors may be used to endorse or promote products derived from this
++ software without specific prior written permission.
++
++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
++ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
++ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++*/
++
++#include "JackAudio.h"
++#include "User.h"
++#include "Global.h"
++#include "MainWindow.h"
++#include "Timer.h"
++
++#include <cstring>
++
++static JackAudioSystem *jasys = NULL;
++
++class JackAudioInputRegistrar : public AudioInputRegistrar {
++ public:
++ JackAudioInputRegistrar();
++ virtual AudioInput *create();
++ virtual const QList<audioDevice> getDeviceChoices();
++ virtual void setDeviceChoice(const QVariant &, Settings &);
++ virtual bool canEcho(const QString &) const;
++};
++
++class JackAudioOutputRegistrar : public AudioOutputRegistrar {
++ public:
++ JackAudioOutputRegistrar();
++ virtual AudioOutput *create();
++ virtual const QList<audioDevice> getDeviceChoices();
++ virtual void setDeviceChoice(const QVariant &, Settings &);
++};
++
++class JackAudioInit : public DeferInit {
++ public:
++ JackAudioInputRegistrar *airJackAudio;
++ JackAudioOutputRegistrar *aorJackAudio;
++ void initialize() {
++ jasys = new JackAudioSystem();
++ jasys->init_jack();
++ jasys->qmWait.lock();
++ jasys->qwcWait.wait(&jasys->qmWait, 1000);
++ jasys->qmWait.unlock();
++ if (jasys->bJackIsGood) {
++ airJackAudio = new JackAudioInputRegistrar();
++ aorJackAudio = new JackAudioOutputRegistrar();
++ } else {
++ airJackAudio = NULL;
++ aorJackAudio = NULL;
++ delete jasys;
++ jasys = NULL;
++ }
++ };
++ void destroy() {
++ if (airJackAudio)
++ delete airJackAudio;
++ if (aorJackAudio)
++ delete aorJackAudio;
++ if (jasys) {
++ jasys->close_jack();
++ delete jasys;
++ jasys = NULL;
++ }
++ };
++};
++
++static JackAudioInit jackinit; //unused
++
++JackAudioSystem::JackAudioSystem() {
++ bJackIsGood = false;
++ iSampleRate = 0;
++}
++
++JackAudioSystem::~JackAudioSystem() {
++}
++
++void JackAudioSystem::init_jack()
++{
++ client = jack_client_open("mumble", JackNullOption, 0);
++
++ if (client) {
++ in_port = jack_port_register(client, "input", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
++ out_port = jack_port_register(client, "output", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
++ jack_set_process_callback(client, process_callback, this);
++ jack_set_sample_rate_callback(client, srate_callback, this);
++ jack_on_shutdown(client, shutdown_callback, this);
++
++ iSampleRate = jack_get_sample_rate(client);
++
++ if (jack_activate(client) || in_port == NULL || out_port == NULL) {
++ client = NULL;
++ return;
++ }
++
++ int port_flags;
++ unsigned i = -1;
++ const char** ports = jack_get_ports(client, 0, 0, JackPortIsPhysical);
++
++ if (ports) {
++ while (ports[++i])
++ {
++ jack_port_t* port = jack_port_by_name(client, ports[i]);
++ port_flags = jack_port_flags(port);
++
++ if (port_flags & (JackPortIsPhysical|JackPortIsOutput) && strstr(jack_port_type(port), "audio")) {
++ jack_connect(client, ports[i], jack_port_name(in_port));
++ }
++ if (port_flags & (JackPortIsPhysical|JackPortIsInput) && strstr(jack_port_type(port), "audio")) {
++ jack_connect(client, jack_port_name(out_port), ports[i]);
++ }
++ }
++ }
++
++ jack_free(ports);
++
++ // If we made it this far, then everything is okay
++ qhInput.insert(QString(), tr("Hardware Ports"));
++ qhOutput.insert(QString(), tr("Hardware Ports"));
++ bJackIsGood = true;
++
++ } else {
++ bJackIsGood = false;
++ client = NULL;
++ }
++}
++
++void JackAudioSystem::close_jack()
++{
++ if (client) {
++ jack_deactivate(client);
++ jack_client_close(client);
++ client = NULL;
++ }
++}
++
++int JackAudioSystem::process_callback(jack_nframes_t nframes, void *arg)
++{
++ JackAudioSystem *jas = (JackAudioSystem*)arg;
++
++ if (jas && jas->bJackIsGood) {
++ AudioInputPtr ai = g.ai;
++ AudioOutputPtr ao = g.ao;
++ JackAudioInput *jai = (JackAudioInput*)(ai.get());
++ JackAudioOutput *jao = (JackAudioOutput*)(ao.get());
++
++ if (jai && jai->bRunning && jai->iMicChannels > 0 && !jai->isFinished()) {
++ void* input = jack_port_get_buffer(jas->in_port, nframes);
++ if ((float*)input != 0)
++ jai->addMic(input, nframes);
++ }
++
++ if (jao && jao->bRunning && jao->iChannels > 0 && !jao->isFinished()) {
++ jack_default_audio_sample_t* output = (jack_default_audio_sample_t*)jack_port_get_buffer(jas->out_port, nframes);
++ memset(output, 0, sizeof(jack_default_audio_sample_t)*nframes); //TEST
++ jao->mix(output, nframes);
++ }
++ }
++
++ return 0;
++}
++
++int JackAudioSystem::srate_callback(jack_nframes_t frames, void *arg)
++{
++ JackAudioSystem *jas = (JackAudioSystem*)arg;
++ jas->iSampleRate = frames;
++ return 0;
++}
++
++void JackAudioSystem::shutdown_callback(void *arg)
++{
++ JackAudioSystem *jas = (JackAudioSystem*)arg;
++ jas->bJackIsGood = false;
++}
++
++JackAudioInputRegistrar::JackAudioInputRegistrar() : AudioInputRegistrar(QLatin1String("JACK"), 10) {
++}
++
++AudioInput *JackAudioInputRegistrar::create() {
++ return new JackAudioInput();
++}
++
++const QList<audioDevice> JackAudioInputRegistrar::getDeviceChoices() {
++ QList<audioDevice> qlReturn;
++
++ QStringList qlInputDevs = jasys->qhInput.keys();
++ qSort(qlInputDevs);
++
++ foreach(const QString &dev, qlInputDevs) {
++ qlReturn << audioDevice(jasys->qhInput.value(dev), dev);
++ }
++
++ return qlReturn;
++}
++
++void JackAudioInputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) {
++ Q_UNUSED(choice);
++ Q_UNUSED(s);
++}
++
++bool JackAudioInputRegistrar::canEcho(const QString &osys) const {
++ Q_UNUSED(osys);
++ return false;
++}
++
++JackAudioOutputRegistrar::JackAudioOutputRegistrar() : AudioOutputRegistrar(QLatin1String("JACK"), 10) {
++}
++
++AudioOutput *JackAudioOutputRegistrar::create() {
++ return new JackAudioOutput();
++}
++
++const QList<audioDevice> JackAudioOutputRegistrar::getDeviceChoices() {
++ QList<audioDevice> qlReturn;
++
++ QStringList qlOutputDevs = jasys->qhOutput.keys();
++ qSort(qlOutputDevs);
++
++ foreach(const QString &dev, qlOutputDevs) {
++ qlReturn << audioDevice(jasys->qhOutput.value(dev), dev);
++ }
++
++ return qlReturn;
++}
++
++void JackAudioOutputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) {
++ Q_UNUSED(choice);
++ Q_UNUSED(s);
++}
++
++JackAudioInput::JackAudioInput() {
++ bRunning = true;
++ iMicChannels = 0;
++};
++
++JackAudioInput::~JackAudioInput() {
++ bRunning = false;
++ iMicChannels = 0;
++ qmMutex.lock();
++ qwcWait.wakeAll();
++ qmMutex.unlock();
++ wait();
++}
++
++void JackAudioInput::run() {
++ if (jasys && jasys->bJackIsGood) {
++ iMicFreq = jasys->iSampleRate;
++ iMicChannels = 1;
++ eMicFormat = SampleFloat;
++ initializeMixer();
++ }
++
++ qmMutex.lock();
++ while (bRunning)
++ qwcWait.wait(&qmMutex);
++ qmMutex.unlock();
++}
++
++JackAudioOutput::JackAudioOutput() {
++ bRunning = true;
++ iChannels = 0;
++}
++
++JackAudioOutput::~JackAudioOutput() {
++ bRunning = false;
++ iChannels = 0;
++ qmMutex.lock();
++ qwcWait.wakeAll();
++ qmMutex.unlock();
++ wait();
++}
++
++void JackAudioOutput::run() {
++ if (jasys && jasys->bJackIsGood) {
++ unsigned int chanmasks[32];
++
++ chanmasks[0] = SPEAKER_FRONT_LEFT;
++ chanmasks[1] = SPEAKER_FRONT_RIGHT;
++
++ eSampleFormat = SampleFloat;
++ iMixerFreq = jasys->iSampleRate;
++ iChannels = 1;
++ initializeMixer(chanmasks);
++ }
++
++ qmMutex.lock();
++ while (bRunning)
++ qwcWait.wait(&qmMutex);
++ qmMutex.unlock();
++}
+diff -U 3 -H -d -r -N -- mumble-1.2.2/src/mumble/JackAudio.h mumble-1.2.2/src/mumble/JackAudio.h
+--- mumble-1.2.2/src/mumble/JackAudio.h 1970-01-01 01:00:00.000000000 +0100
++++ mumble-1.2.2/src/mumble/JackAudio.h 2011-01-26 06:03:58.000000000 +0000
+@@ -0,0 +1,97 @@
++/* Copyright (C) 2011, Benjamin Jemlich <pcgod@users.sourceforge.net>
++ Copyright (C) 2011, Filipe Coelho <falktx@gmail.com>
++
++ All rights reserved.
++
++ Redistribution and use in source and binary forms, with or without
++ modification, are permitted provided that the following conditions
++ are met:
++
++ - Redistributions of source code must retain the above copyright notice,
++ this list of conditions and the following disclaimer.
++ - Redistributions in binary form must reproduce the above copyright notice,
++ this list of conditions and the following disclaimer in the documentation
++ and/or other materials provided with the distribution.
++ - Neither the name of the Mumble Developers nor the names of its
++ contributors may be used to endorse or promote products derived from this
++ software without specific prior written permission.
++
++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
++ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
++ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++*/
++
++#ifndef _JACKAUDIO_H
++#define _JACKAUDIO_H
++
++#include "AudioInput.h"
++#include "AudioOutput.h"
++#include <jack/jack.h>
++
++class JackAudioOutput;
++class JackAudioInput;
++
++class JackAudioSystem : public QObject {
++ private:
++ Q_OBJECT
++ Q_DISABLE_COPY(JackAudioSystem)
++ protected:
++ jack_client_t* client;
++ jack_port_t* in_port;
++ jack_port_t* out_port;
++
++ static int process_callback(jack_nframes_t nframes, void *arg);
++ static int srate_callback(jack_nframes_t frames, void *arg);
++ static void shutdown_callback(void *arg);
++ public:
++ QHash<QString, QString> qhInput;
++ QHash<QString, QString> qhOutput;
++ bool bJackIsGood;
++ int iSampleRate;
++ QMutex qmWait;
++ QWaitCondition qwcWait;
++
++ void init_jack();
++ void close_jack();
++
++ JackAudioSystem();
++ ~JackAudioSystem();
++};
++
++class JackAudioInput : public AudioInput {
++ friend class JackAudioSystem;
++ private:
++ Q_OBJECT
++ Q_DISABLE_COPY(JackAudioInput)
++ protected:
++ QMutex qmMutex;
++ QWaitCondition qwcWait;
++ public:
++ JackAudioInput();
++ ~JackAudioInput();
++ void run();
++};
++
++class JackAudioOutput : public AudioOutput {
++ friend class JackAudioSystem;
++ private:
++ Q_OBJECT
++ Q_DISABLE_COPY(JackAudioOutput)
++ protected:
++ QMutex qmMutex;
++ QWaitCondition qwcWait;
++ public:
++ JackAudioOutput();
++ ~JackAudioOutput();
++ void run();
++};
++
++#endif
+diff -U 3 -H -d -r -N -- mumble-1.2.2/src/mumble/mumble.pro mumble-1.2.2/src/mumble/mumble.pro
+--- mumble-1.2.2/src/mumble/mumble.pro 2010-02-09 16:34:51.000000000 +0000
++++ mumble-1.2.2/src/mumble/mumble.pro 2011-01-26 01:45:55.000000000 +0000
+@@ -93,11 +93,17 @@
+ unix {
+ HAVE_PULSEAUDIO=$$system(pkg-config --modversion --silence-errors libpulse)
+ HAVE_PORTAUDIO=$$system(pkg-config --modversion --silence-errors portaudio-2.0)
++ HAVE_JACKAUDIO=$$system(pkg-config --modversion --silence-errors jack)
+
+ !isEmpty(HAVE_PORTAUDIO):!CONFIG(no-portaudio) {
+ CONFIG *= portaudio
+ }
+
++ !isEmpty(HAVE_JACKAUDIO):!CONFIG(no-jackaudio) {
++ CONFIG -= portaudio
++ CONFIG *= jackaudio
++ }
++
+ !isEmpty(HAVE_PULSEAUDIO):!CONFIG(no-pulseaudio) {
+ CONFIG -= portaudio
+ CONFIG *= pulseaudio
+@@ -110,6 +116,13 @@
+ QMAKE_CXXFLAGS_DEBUG *= -I../../speex/include -I../../speexbuild
+ }
+
++ jackaudio {
++ DEFINES *= USE_JACKAUDIO
++ PKGCONFIG *= jack
++ HEADERS *= JackAudio.h
++ SOURCES *= JackAudio.cpp
++ }
++
+ CONFIG *= link_pkgconfig
+
+ PKGCONFIG *= openssl sndfile
diff --git a/media-sound/mumble/mumble-1.2.2-r1.ebuild b/media-sound/mumble/mumble-1.2.2-r1.ebuild
new file mode 100644
index 0000000..e86f0d6
--- /dev/null
+++ b/media-sound/mumble/mumble-1.2.2-r1.ebuild
@@ -0,0 +1,117 @@
+# Copyright 1999-2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-sound/mumble/mumble-1.2.2.ebuild,v 1.1 2010/02/10 21:48:20 tgurr Exp $
+
+EAPI="2"
+
+inherit eutils multilib qt4
+
+MY_P="${PN}-${PV/_/~}"
+
+DESCRIPTION="Mumble is an open source, low-latency, high quality voice chat software."
+HOMEPAGE="http://mumble.sourceforge.net/"
+SRC_URI="http://mumble.info/snapshot/${MY_P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="+alsa +dbus debug g15 jack oss pch portaudio pulseaudio speech zeroconf"
+
+RDEPEND=">=dev-libs/boost-1.36.0-r1
+ dev-libs/openssl
+ >=dev-libs/protobuf-2.2.0
+ >=media-libs/celt-0.7.0
+ >=media-libs/libsndfile-1.0.20
+ >=media-libs/speex-1.2_rc1
+ x11-libs/qt-core:4[ssl]
+ x11-libs/qt-gui:4
+ x11-libs/qt-opengl:4
+ x11-libs/qt-sql:4[sqlite]
+ x11-libs/qt-svg:4
+ x11-libs/qt-xmlpatterns:4
+ x11-proto/inputproto
+ alsa? ( media-libs/alsa-lib )
+ dbus? ( x11-libs/qt-dbus:4 )
+ g15? ( app-misc/g15daemon )
+ portaudio? ( media-libs/portaudio )
+ pulseaudio? ( media-sound/pulseaudio )
+ speech? ( app-accessibility/speech-dispatcher )
+ zeroconf? ( || ( net-dns/avahi[mdnsresponder-compat] net-misc/mDNSResponder ) )"
+DEPEND="${RDEPEND}
+ dev-util/pkgconfig"
+
+S="${WORKDIR}/${MY_P}"
+
+src_unpack() {
+ unpack ${A}
+ use jack && cd "${S}"
+ use jack && epatch "${FILESDIR}"/mumble-jack-support.patch
+}
+
+src_configure() {
+ local conf_add
+
+ if has_version '<=sys-devel/gcc-4.2'; then
+ conf_add="${conf_add} no-pch"
+ else
+ use pch || conf_add="${conf_add} no-pch"
+ fi
+
+ use alsa || conf_add="${conf_add} no-alsa"
+ use dbus || conf_add="${conf_add} no-dbus"
+ use debug && conf_add="${conf_add} symbols debug" || conf_add="${conf_add} release"
+ use g15 || conf_add="${conf_add} no-g15"
+ use oss || conf_add="${conf_add} no-oss"
+ use portaudio || conf_add="${conf_add} no-portaudio"
+ use pulseaudio || conf_add="${conf_add} no-pulseaudio"
+ use speech || conf_add="${conf_add} no-speechd"
+ use zeroconf || conf_add="${conf_add} no-bonjour"
+
+ eqmake4 "${S}/main.pro" -recursive \
+ CONFIG+="${conf_add} \
+ no-11x \
+ no-bundled-celt \
+ no-bundled-speex \
+ no-embed-qt-translations \
+ no-server" \
+ DEFINES+="PLUGIN_PATH=/usr/$(get_libdir)/mumble" \
+ || die "eqmake4 failed."
+}
+
+src_install() {
+ newdoc README.Linux README || die "Installing docs failed."
+ dodoc CHANGES || die "Installing docs failed."
+
+ local dir
+ if use debug; then
+ dir=debug
+ else
+ dir=release
+ fi
+
+ dobin "${dir}"/mumble || die "Installing mumble binary failed."
+ dobin scripts/mumble-overlay || die "Installing overlay script failed."
+
+ insinto /usr/share/services
+ doins scripts/mumble.protocol || die "Installing mumble.protocol file failed."
+
+ domenu scripts/mumble.desktop || die "Installing menu entry failed."
+
+ insinto /usr/share/icons/hicolor/scalable/apps
+ doins icons/mumble.svg || die "Installing icon failed."
+
+ doman man/mumble-overlay.1 || die "Installing mumble-overlay manpage failed."
+ doman man/mumble.1 || die "Installing mumble manpage failed."
+
+ insopts -o root -g root -m 0755
+ insinto "/usr/$(get_libdir)/mumble"
+ doins "${dir}"/lib*.so* || die "Installing plugins failed."
+ doins "${dir}"/plugins/lib*.so* || die "Installing plugins failed."
+}
+
+pkg_postinst() {
+ echo
+ elog "Visit http://mumble.sourceforge.net/ for futher configuration instructions."
+ elog "Run mumble-overlay to start the OpenGL overlay (after starting mumble)."
+ echo
+}
diff --git a/media-sound/mumble/mumble-1.2.3-r2.ebuild b/media-sound/mumble/mumble-1.2.3-r2.ebuild
new file mode 100644
index 0000000..687e375
--- /dev/null
+++ b/media-sound/mumble/mumble-1.2.3-r2.ebuild
@@ -0,0 +1,118 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-sound/mumble/mumble-1.2.3-r1.ebuild,v 1.2 2011/06/14 20:10:41 maekke Exp $
+
+EAPI="2"
+
+inherit eutils multilib qt4-r2
+
+DESCRIPTION="Mumble is an open source, low-latency, high quality voice chat software"
+HOMEPAGE="http://mumble.sourceforge.net/"
+SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="amd64 x86"
+IUSE="+alsa +dbus debug g15 jack oss pch portaudio pulseaudio speech zeroconf"
+
+RDEPEND=">=dev-libs/boost-1.41.0
+ >=dev-libs/openssl-1.0.0b
+ >=dev-libs/protobuf-2.2.0
+ >=media-libs/libsndfile-1.0.20[-minimal]
+ >=media-libs/speex-1.2_rc1
+ sys-apps/lsb-release
+ x11-libs/qt-core:4[ssl]
+ x11-libs/qt-gui:4
+ x11-libs/qt-opengl:4
+ x11-libs/qt-sql:4[sqlite]
+ x11-libs/qt-svg:4
+ x11-libs/qt-xmlpatterns:4
+ x11-proto/inputproto
+ alsa? ( media-libs/alsa-lib )
+ dbus? ( x11-libs/qt-dbus:4 )
+ g15? ( app-misc/g15daemon )
+ portaudio? ( media-libs/portaudio )
+ pulseaudio? ( media-sound/pulseaudio )
+ speech? ( app-accessibility/speech-dispatcher )
+ zeroconf? ( || ( net-dns/avahi[mdnsresponder-compat] net-misc/mDNSResponder ) )"
+DEPEND="${RDEPEND}
+ dev-util/pkgconfig"
+
+PATCHDIR="${WORKDIR}/${MY_P}"
+
+src_unpack() {
+ unpack ${A}
+ use jack && cd ${PATCHDIR}
+ use jack && epatch "${FILESDIR}"/mumble-jack-support-r2.patch
+}
+
+src_configure() {
+ local conf_add
+
+ if has_version '<=sys-devel/gcc-4.2'; then
+ conf_add="${conf_add} no-pch"
+ else
+ use pch || conf_add="${conf_add} no-pch"
+ fi
+
+ use alsa || conf_add="${conf_add} no-alsa"
+ use dbus || conf_add="${conf_add} no-dbus"
+ use debug && conf_add="${conf_add} symbols debug" || conf_add="${conf_add} release"
+ use g15 || conf_add="${conf_add} no-g15"
+ use oss || conf_add="${conf_add} no-oss"
+ use portaudio || conf_add="${conf_add} no-portaudio"
+ use pulseaudio || conf_add="${conf_add} no-pulseaudio"
+ use speech || conf_add="${conf_add} no-speechd"
+ use zeroconf || conf_add="${conf_add} no-bonjour"
+
+ eqmake4 "${S}/main.pro" -recursive \
+ CONFIG+="${conf_add} \
+ bundled-celt \
+ no-11x \
+ no-bundled-speex \
+ no-embed-qt-translations \
+ no-server \
+ no-update" \
+ DEFINES+="PLUGIN_PATH=/usr/$(get_libdir)/mumble" \
+ || die "eqmake4 failed."
+}
+
+src_install() {
+ newdoc README.Linux README || die "Installing docs failed."
+ dodoc CHANGES || die "Installing docs failed."
+
+ local dir
+ if use debug; then
+ dir=debug
+ else
+ dir=release
+ fi
+
+ dobin "${dir}"/mumble || die "Installing mumble binary failed."
+ dobin scripts/mumble-overlay || die "Installing overlay script failed."
+
+ insinto /usr/share/services
+ doins scripts/mumble.protocol || die "Installing mumble.protocol file failed."
+
+ domenu scripts/mumble.desktop || die "Installing menu entry failed."
+
+ insinto /usr/share/icons/hicolor/scalable/apps
+ doins icons/mumble.svg || die "Installing icon failed."
+
+ doman man/mumble-overlay.1 || die "Installing mumble-overlay manpage failed."
+ doman man/mumble.1 || die "Installing mumble manpage failed."
+
+ insopts -o root -g root -m 0755
+ insinto "/usr/$(get_libdir)/mumble"
+ doins "${dir}"/libmumble.so.${PV} || die "Installing mumble lib failed."
+ dosym libmumble.so.${PV} /usr/$(get_libdir)/mumble/libmumble.so.1 || die "Installing libmumble symlink failed."
+ doins "${dir}"/libcelt0.so.0.{7,11}.0 || die "Installing celt libs failed."
+ doins "${dir}"/plugins/lib*.so* || die "Installing plugins failed."
+}
+
+pkg_postinst() {
+ echo
+ elog "Visit http://mumble.sourceforge.net/ for futher configuration instructions."
+ elog "Run mumble-overlay to start the OpenGL overlay (after starting mumble)."
+ echo
+}
diff --git a/media-sound/pyjama/Manifest b/media-sound/pyjama/Manifest
new file mode 100644
index 0000000..4475226
--- /dev/null
+++ b/media-sound/pyjama/Manifest
@@ -0,0 +1,2 @@
+DIST pyjama-0.3.0.1.tar.gz 845105 RMD160 646f4d09ad2dfd3a5addaabbaccb841ace277c5f SHA1 f2059bf6b05f04dccb01c2f3c1ec50419281f92d SHA256 6354cb364aa9f2aee69949b2d1c0f01a937dd27f65a10b1bd680198b326a0120
+EBUILD pyjama-0.3.0.1.ebuild 1467 RMD160 93ecff60ca3575a2822d23eb719f01f2672660d1 SHA1 adb3cae4b095b9541620f9148a39c3e77e841093 SHA256 d430576c48d7259e3aff2930b7e8c2a0d18447e8b54ff576a4f5b97ea3131fc0
diff --git a/media-sound/pyjama/pyjama-0.3.0.1.ebuild b/media-sound/pyjama/pyjama-0.3.0.1.ebuild
new file mode 100644
index 0000000..41e7fb1
--- /dev/null
+++ b/media-sound/pyjama/pyjama-0.3.0.1.ebuild
@@ -0,0 +1,53 @@
+# Copyright 2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v3
+# $Header: $
+
+EAPI=2
+
+DESCRIPTION="A Python/GTK application to play free music from Jamendo"
+HOMEPAGE="https://launchpad.net/pyjama"
+SRC_URI="http://launchpad.net/pyjama/trunk/0.3/+download/${P}_all.tar.gz
+ -> ${P}.tar.gz"
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~x86 ~amd64"
+IUSE="gnome"
+
+RDEPEND="dev-python/pygtk
+ dev-python/simplejson
+ || ( dev-python/lxml dev-python/pyxml )
+ || ( dev-lang/python:2.6[sqlite] dev-python/pysqlite )
+ dev-lang/python:2.6
+ >=dev-python/gst-python-0.10
+ >=media-plugins/gst-plugins-soup-0.10
+ gnome? ( dev-python/gnome-python-extras )"
+
+DEPEND="${DEPEND}"
+
+src_compile() {
+ einfo "Nothing to compile for ${P}."
+}
+
+src_install() {
+
+ if [ -e /usr/lib/pyjama/pyjama.py ]
+ then
+ ewarn "Please delete /usr/lib/pyjama!"
+ ewarn "This directory is not needed any more"
+ fi
+
+ einfo "1/3 Copying files"
+ dodir /usr/share/apps/pyjama
+ cp -R "${S}_all"/src/* ${D}/usr/share/apps/pyjama/
+ dosym /usr/share/apps/pyjama/pyjama.py /usr/bin/pyjama
+
+ einfo "2/3 Checking modules..."
+ ${D}/usr/bin/pyjama check-modules
+
+ einfo "3/3 Creating menu-entry for pyjama"
+ dosym /usr/share/apps/pyjama/images/pyjama.xpm /usr/share/pixmaps/pyjama.xpm
+ dosym /usr/share/apps/pyjama/pyjama.desktop /usr/share/applications/pyjama.desktop
+
+ einfo "Pyjama has been installed. Just type 'pyjama' to run it."
+}
diff --git a/media-tv/xbmc/ChangeLog b/media-tv/xbmc/ChangeLog
new file mode 100644
index 0000000..afade56
--- /dev/null
+++ b/media-tv/xbmc/ChangeLog
@@ -0,0 +1,426 @@
+# ChangeLog for media-tv/xbmc
+# Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/media-tv/xbmc/ChangeLog,v 1.104 2011/10/12 22:53:27 vapier Exp $
+
+ 12 Oct 2011; Mike Frysinger <vapier@gentoo.org> xbmc-10.1.ebuild,
+ xbmc-9999.ebuild:
+ Now that gettext itself takes care of the internal vcs dep, drop the cvs
+ workaround #386635 by BT.
+
+ 09 Oct 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild,
+ metadata.xml:
+ Add USE=goom to control GOOM support #385447 by BT. Run autotools in new goom
+ subdir #386471 by BT.
+
+ 09 Oct 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild,
+ metadata.xml:
+ Add USE=projectm to control visualization plugin #385449 by BT.
+
+ 01 Oct 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild,
+ metadata.xml:
+ Make plist depend into USE=airplay #384571 by BT.
+
+ 29 Sep 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Make samba support optional now that upstream allows it to be disabled
+ #383759 by BT.
+
+ 29 Sep 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild,
+ metadata.xml:
+ Make slick screensavers optional #383785 by BT.
+
+ 18 Sep 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Migrate to git-2 eclass.
+
+ 18 Sep 2011; Mike Frysinger <vapier@gentoo.org> xbmc-10.1.ebuild,
+ +files/xbmc-10.1-headers.patch, +files/xbmc-10.1-libpng-1.5.patch:
+ Fix building with libpng-1.5+ #380127#4 by Ian Stakenvicius.
+
+ 28 Aug 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Upstream xbmc now needs libplist #380785 by Michael Kirkland.
+
+ 11 Aug 2011; Mike Frysinger <vapier@gentoo.org> xbmc-10.1.ebuild,
+ xbmc-9999.ebuild:
+ Pull in libpng #378231 by Diego Elio Pettenò.
+
+ 09 Jun 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Add yajl to depend since upstream now needs it #370229 by BT.
+
+ 18 May 2011; Mike Frysinger <vapier@gentoo.org> xbmc-10.1.ebuild,
+ +files/xbmc-10.1-gcc-4.6.patch:
+ Add fix from upstream for building with gcc-4.6 #367261 by Nils Larsson.
+
+ 18 May 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Update autoconf list #367835 by Alexandre B.
+
+ 11 Apr 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Drop python sed now that upstream isnt bundling it #363057 by BT.
+
+ 06 Apr 2011; Mike Frysinger <vapier@gentoo.org> xbmc-10.1.ebuild,
+ xbmc-9999.ebuild:
+ Force more recent versions of random packages #352571 by Frossie.
+
+ 06 Apr 2011; Mike Frysinger <vapier@gentoo.org> xbmc-10.1.ebuild,
+ xbmc-9999.ebuild:
+ Use new virtual/ffmpeg #362117 by Tomáš Chvátal.
+
+ 06 Apr 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Drop libdts autoconf since the dir no longer exists #359103 by BT.
+
+ 12 Mar 2011; Mike Frysinger <vapier@gentoo.org> xbmc-10.1.ebuild:
+ Drop hal support in release too #349523 by Samuli Suominen.
+
+*xbmc-10.1 (12 Mar 2011)
+
+ 12 Mar 2011; Mike Frysinger <vapier@gentoo.org> +xbmc-10.1.ebuild:
+ Version bump #358473 by BT.
+
+ 01 Mar 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Dont force a52/dts disabling since the pkg no longer offers the options at
+ all #356157 by BT.
+
+ 26 Feb 2011; Kevin McCarthy <signals@gentoo.org> xbmc-9.11-r5.ebuild,
+ xbmc-10.0.ebuild, xbmc-9999.ebuild:
+ Updated depends from media-libs/jpeg to virtual/jpeg
+
+ 26 Feb 2011; Mike Frysinger <vapier@gentoo.org> xbmc-10.0.ebuild:
+ Use internal python for release.
+
+ 26 Feb 2011; Mike Frysinger <vapier@gentoo.org> xbmc-10.0.ebuild,
+ xbmc-9999.ebuild:
+ Enable xrandr by default per upstream.
+
+ 19 Feb 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Drop faad2 dep since xbmc no longer uses it #355371 by BT.
+
+ 10 Feb 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Drop libmms dep since xbmc now uses ffmpeg #353919 by BT.
+
+ 06 Feb 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Update paths after filesystem shuffle in git repo #352806 by hal.
+
+ 06 Feb 2011; Mike Frysinger <vapier@gentoo.org> xbmc-10.0.ebuild,
+ xbmc-9999.ebuild:
+ Drop unrar depend since xbmc itself includes an unrar lib #353314 by Marco
+ Clocchiatti.
+
+ 18 Jan 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Convert to git #346381 by Mathieu Rochette.
+
+ 03 Jan 2011; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild,
+ metadata.xml:
+ Add USE=bluray support #350362 by hal.
+
+ 02 Jan 2011; Mike Frysinger <vapier@gentoo.org> xbmc-10.0.ebuild,
+ xbmc-9999.ebuild:
+ Punt deprecated liba52/libdts usage #350360 by hal.
+
+ 01 Jan 2011; Mike Frysinger <vapier@gentoo.org> xbmc-10.0.ebuild,
+ +files/xbmc-10.0-python-2.7.patch:
+ Add support from upstream for python-2.7 #350098 by Tom Flair.
+
+ 31 Dec 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Patch by Samuli Suominen to drop hal support in favor of upstream
+ replacements #349523.
+
+ 23 Dec 2010; Mike Frysinger <vapier@gentoo.org> xbmc-10.0.ebuild,
+ xbmc-9999.ebuild:
+ Require USE=cxx in libpcre #349533 by Oliver Schinagl.
+
+*xbmc-10.0 (22 Dec 2010)
+
+ 22 Dec 2010; Mike Frysinger <vapier@gentoo.org> +xbmc-10.0.ebuild:
+ Version bump.
+
+ 22 Dec 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Only delay for 3 seconds when dbus services are missing #348580 by James
+ Bowlin.
+
+ 19 Nov 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Drop USE=aac like upstream has #345939 by BT.
+
+*xbmc-9.11-r5 (18 Sep 2010)
+
+ 18 Sep 2010; Mike Frysinger <vapier@gentoo.org> +xbmc-9.11-r5.ebuild,
+ +files/xbmc-9.11-external-python.patch, +files/xbmc-9.11-libdca.patch:
+ Force internal python usage #304521 by Domen Kožar. Build against libdca
+ rather than libdts #330201 by Füves Zoltán.
+
+ 18 Sep 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9.11-r4.ebuild,
+ xbmc-9999.ebuild:
+ Update postinst URL #337762 by Ewoud Kohl van Wijngaarden.
+
+ 28 Aug 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Add gperf to DEPEND #334845 by Cyril.
+
+ 24 Aug 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Force recent ffmpeg #334059 by Domen Kožar.
+
+ 14 Aug 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild,
+ metadata.xml:
+ Add support for USE=webserver #305229 by Jan Vansteenkiste.
+
+ 12 Aug 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild,
+ metadata.xml:
+ Update paths to run autotools in #330473 by hal. Add support for USE=rtmp
+ #331983 by Daniel Marmander.
+
+ 11 Jul 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Update lsb_release sed to match latest svn #326949 by BT.
+
+ 11 Jul 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9.11-r4.ebuild,
+ xbmc-9999.ebuild:
+ Only require libsdl[alsa] when xbmc is being built with USE=alsa #327727
+ by Džen.
+
+ 21 Jun 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9.11-r4.ebuild:
+ Fix building with ffmpeg-0.6 #324293 by Alexis Ballier.
+
+ 19 Jun 2010; Jonathan Callen <abcd@gentoo.org> xbmc-9999.ebuild:
+ Moving dev-util/cvs* to dev-vcs/cvs*
+
+ 23 May 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Run autotools in more subdirs, update docdir install, and convert to
+ emake+DESTDIR for installing.
+
+ 23 May 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Make hal support optional via USE=hal now that upstream supports it
+ #319193 by hal.
+
+ 23 May 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9.11-r4.ebuild,
+ xbmc-9999.ebuild:
+ Sync recent updates between the release/live ebuilds.
+
+*xbmc-9.11-r4 (23 May 2010)
+
+ 23 May 2010; Mike Frysinger <vapier@gentoo.org> +xbmc-9.11-r4.ebuild,
+ +files/xbmc-9.11-TexturePacker-parallel-build.patch,
+ +files/xbmc-9.11-shader-upscalers.patch:
+ Force python-2.4 usage #304521 by Domen Kožar. Apply upshader patch from
+ upstream #306661 by zehner. Install the xbmc-send helper python script
+ #309885 by James Broadhead.
+
+ 23 May 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild,
+ metadata.xml:
+ Stop installing web styles since they no longer exist #305969 by Thomas
+ Andersson. Require opengl support in libsdl #311891 by Stijn Tintel, and
+ require -minimal support in libcdio #311893 by Stijn Tintel. Update dodoc
+ line #316081 by Diego E. Pettenò. Add USE=vaapi support #319701 by hal.
+
+ 23 May 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9.11-r3.ebuild:
+ Update dodoc line #316081 by Diego E. Pettenò.
+
+ 14 May 2010; Samuli Suominen <ssuominen@gentoo.org> xbmc-9.11-r3.ebuild:
+ Don't apply -libpng14.patch with libpng12 wrt #319721 by Martin von
+ Gagern.
+
+ 10 May 2010; Samuli Suominen <ssuominen@gentoo.org> xbmc-9.11-r3.ebuild,
+ +files/xbmc-9.11-libpng14.patch:
+ Fix building with libpng14 wrt #319113 by Manuel Nickschas.
+
+ 07 Apr 2010; Patrick Lauer <patrick@gentoo.org> xbmc-9.11.ebuild,
+ xbmc-9.11-r3.ebuild, xbmc-9999.ebuild:
+ Fixing samba deps
+
+ 07 Apr 2010; Tomáš Chvátal <scarabeus@gentoo.org> xbmc-9.11.ebuild,
+ xbmc-9.11-r3.ebuild, xbmc-9999.ebuild:
+ Drop unrar-gpl dependencies. Unrar-gpl cant open most rars that are
+ around.
+
+*xbmc-9.11-r3 (18 Mar 2010)
+
+ 18 Mar 2010; Fabio Erculiani <lxnay@gentoo.org> -xbmc-9.11-r2.ebuild,
+ +xbmc-9.11-r3.ebuild,
+ +files/xbmc-9.11-use-cdio-system-headers-on-non-win32.patch:
+ backport libcdio patch from trunk, makes DVD playback working, close
+ #303030, upstream reference #8026
+
+*xbmc-9.11-r2 (18 Mar 2010)
+
+ 18 Mar 2010; Fabio Erculiani <lxnay@gentoo.org> -xbmc-9.11-r1.ebuild,
+ +xbmc-9.11-r2.ebuild:
+ temp. workaround inability to play DVDs, see bug #303030
+
+ 07 Mar 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Pull in libmodplug #305911 by Michael Lange. Disable the webserver for now
+ #305229 by Jan Vansteenkiste.
+
+ 25 Jan 2010; Samuli Suominen <ssuominen@gentoo.org> xbmc-9.11-r1.ebuild,
+ xbmc-9999.ebuild:
+ Require SLOT="0" of media-libs/jpeg for headers.
+
+ 18 Jan 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9.11-r1.ebuild,
+ xbmc-9999.ebuild:
+ Disable support for USE=-opengl #298529 by Diego E. Pettenò.
+
+*xbmc-9.11-r1 (17 Jan 2010)
+
+ 17 Jan 2010; Mike Frysinger <vapier@gentoo.org> +xbmc-9.11-r1.ebuild,
+ +files/xbmc-9.11-jpeg-speedup.patch:
+ Add fix from upstream for high cpu usage with jpeg images #300909 by
+ mikopp.
+
+ 17 Jan 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9.11.ebuild,
+ xbmc-9999.ebuild:
+ Require USE=smbclient with newer versions of samba #301233 by Darren
+ Smith.
+
+ 05 Jan 2010; Mike Frysinger <vapier@gentoo.org> xbmc-9.11.ebuild,
+ xbmc-9999.ebuild:
+ Update vdpau dependency #299398 by Fabio Erculiani.
+
+*xbmc-9.11 (26 Dec 2009)
+
+ 26 Dec 2009; Mike Frysinger <vapier@gentoo.org> +xbmc-9.11.ebuild,
+ +files/xbmc-9.11-wavpack.patch:
+ Version bump #298226 by hal.
+
+*xbmc-9.11_rc1 (19 Dec 2009)
+
+ 19 Dec 2009; Mike Frysinger <vapier@gentoo.org> +xbmc-9.11_rc1.ebuild,
+ +files/xbmc-9.11_rc1-wavpack.patch, xbmc-9999.ebuild:
+ Version bump #297520.
+
+ 18 Dec 2009; Mike Frysinger <vapier@gentoo.org> -xbmc-9.04.ebuild,
+ -xbmc-9.04.1.ebuild, -files/xbmc-9.04-gcc.patch:
+ Punt older versions with random build problems.
+
+ 15 Dec 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Regen libbdnav autotools when needed #296792 by Martin Berkemeier.
+
+ 04 Dec 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Install all webui styles #293093 by hal.
+
+ 04 Dec 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Enable epatch_user #293109 by hal.
+
+ 22 Nov 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Drop pmount depend now #293108 by hal. Switch back to external faad2
+ #294059 by Michael Lawrence. Add USE="avahi css aac midi xrandr" and add
+ missing deps for USE="pulseaudio vdpau" #293968 by Craig Andrews.
+
+ 08 Nov 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Control squish altivec/sse support via USE #290564 by Francisco González.
+
+ 08 Nov 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Pull in jbigkit/tiff #289621 by Michael Lange.
+
+ 17 Oct 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Force libass-0.9.7+ #285328#10.
+
+ 17 Oct 2009; Samuli Suominen <ssuominen@gentoo.org> xbmc-9999.ebuild:
+ Remove libmpcdec (SV7) support.
+
+ 01 Oct 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild,
+ -files/xbmc-9999-libass.patch:
+ Drop libass patch as upstream has fixed things.
+
+ 26 Sep 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild,
+ +files/xbmc-9999-libass.patch:
+ Fix by Jan Vansteenkiste for building with newer versions of libass
+ #285328 by Dirk Best.
+
+ 26 Sep 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9.04.ebuild,
+ xbmc-9.04.1.ebuild, xbmc-9999.ebuild:
+ Update SVN paths as upstream has moved stuff around.
+
+ 05 Sep 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Generate autotools since upstream no longer includes them in svn #283722
+ by Kevin.
+
+*xbmc-9.04.1 (05 Sep 2009)
+
+ 05 Sep 2009; Mike Frysinger <vapier@gentoo.org> +xbmc-9.04.1.ebuild:
+ Version bump #283608 by zehner.
+
+ 27 Aug 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Force internal faad2 for now #278400. Pull in more deps #279062 #281078.
+
+ 27 Aug 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Drop unzip step since upstream has integrated it #282739 by Jan
+ Vansteenkiste.
+
+ 27 Jul 2009; Stephanie Lockwood-Childs <wormo@gentoo.org>
+ xbmc-9.04.ebuild, xbmc-9999.ebuild:
+ Use http instead of https for source download (thanks to Xake, bug #279174)
+
+ 20 Jul 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Add more libraries to DEPEND #278294 by BT and move to external libraries
+ #275844 by candrews.
+
+ 20 Jul 2009; Mike Frysinger <vapier@gentoo.org> files/xbmc-9.04-gcc.patch:
+ Update gcc-4.4 patch #277562 by Diego E. Pettenò.
+
+ 29 May 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9.04.ebuild,
+ xbmc-9999.ebuild:
+ Allow unrar-gpl for unrar needs #270728 by Mathy Vanvoorden.
+
+*xbmc-9.04 (16 May 2009)
+
+ 16 May 2009; Mike Frysinger <vapier@gentoo.org> +xbmc-9.04.ebuild,
+ +files/xbmc-9.04-gcc.patch:
+ Version bump #269400 by Tim Bastiaenssens.
+
+ 16 May 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Add libsamplerate to DEPEND #269673 by Jan Vansteenkiste.
+
+ 29 Apr 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999:
+ Dont install session anymore since upstream does it #267631 by BT and Jan
+ Vansteenkiste, and stop bothering with the xbmc.sh wrapper since it has
+ been updated as well.
+
+ 27 Apr 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999:
+ Pull in zip as the build process likes to make zips #266414 by Robert
+ Kerr.
+
+ 26 Mar 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Fix readline detection in python subdir #262822 by Scott.
+
+ 26 Mar 2009; Mike Frysinger <vapier@gentoo.org> metadata.xml,
+ xbmc-9999.ebuild:
+ Add USE=vdpau #263435 by Michael Lange.
+
+ 23 Mar 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Require libcdio #263430 by BT.
+
+ 23 Mar 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Require audio/video USE flags in libsdl #263349.
+
+ 07 Mar 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Pull in xdpyinfo #261556 by Michael Lange.
+
+ 07 Mar 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Drop tre from DEPEND #261501 by BT.
+
+ 05 Mar 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Add mesa-progs to the depend list #261226 by Michalis Adamidis.
+
+ 24 Feb 2009; Mike Frysinger <vapier@gentoo.org> -files/xbmc-fribidi.patch,
+ -files/xbmc-readsector.patch, xbmc-9999.ebuild:
+ And now the fribidi/readsector patches have been merged upstream.
+
+ 23 Feb 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Upstream now allows SVN_REV to override svnversion.
+
+ 22 Feb 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ MACDll build flags have been merged upstream.
+
+ 22 Feb 2009; Mike Frysinger <vapier@gentoo.org>
+ -files/xbmc-alsa-params.patch, xbmc-9999.ebuild:
+ Upstream has fixed the ALSA bug, so drop our workaround.
+
+ 21 Feb 2009; Mike Frysinger <vapier@gentoo.org> -files/xbmc-noexec.patch,
+ xbmc-9999.ebuild:
+ The noexec patch has been merged upstream.
+
+ 21 Feb 2009; Mike Frysinger <vapier@gentoo.org> xbmc-9999.ebuild:
+ Generate an Xsession so people can log in with xbmc in full screen.
+
+*xbmc-9999 (21 Feb 2009)
+
+ 21 Feb 2009; Mike Frysinger <vapier@gentoo.org>
+ +files/xbmc-alsa-params.patch, +files/xbmc-fribidi.patch,
+ +files/xbmc-noexec.patch, +files/xbmc-readsector.patch, +metadata.xml,
+ +xbmc-9999.ebuild:
+ Initial ebuild by many people at #198849 (Peter Fern, Rick Harris, etc...)
+ cleaned up by me.
+
diff --git a/media-tv/xbmc/Manifest b/media-tv/xbmc/Manifest
new file mode 100644
index 0000000..a4805d4
--- /dev/null
+++ b/media-tv/xbmc/Manifest
@@ -0,0 +1,14 @@
+AUX xbmc-10.0-python-2.7.patch 30308 RMD160 15f01d93b0db903eadb5deb94d5092b0a4b68de4 SHA1 4f6da8045b575a80fd7d556c5b1f2fbbe2bc2da4 SHA256 8f6b2a0a962ad250fc317542d0fa180585d3c9e630ca98f99299b6f750555085
+AUX xbmc-10.1-gcc-4.6.patch 4295 RMD160 4aee4c91f9d2f9e947d37cd39f2700fc0eaec353 SHA1 5ae755b20e06560aaf1508b80c1f7661ef36802f SHA256 cef1154bc3352b215bfece1a749d901d43ec7aa0c6d050921ae8745c553e84c9
+AUX xbmc-10.1-headers.patch 294 RMD160 74536be4a5e3b939c6360bbc715f30e08226af46 SHA1 2435642148ec291d10bded3036592a6104f5ff03 SHA256 8b8e86cf7edef227e8267c52d60545b753eea11261f078131ee30f9eac8bb002
+AUX xbmc-10.1-libpng-1.5.patch 19253 RMD160 1488504816e668fceb1c3f762738864ea81fa940 SHA1 06e90834bc665eabc3f4e587d551b93af87c1ba5 SHA256 1a0985b91ee9862a538a43689d005dc88d49bf5a70d917896fb69ee416369ff7
+AUX xbmc-10.1~beta1-jack.patch 57053 RMD160 ab2bfa6740b750ae9e3d72f2e195918098e1a746 SHA1 ed262a96460d10c3de600b65e1261dc37892dfce SHA256 f9fc4a1366c51e15ae1f11327aa874a5c7bf98db1daaf46d24d1ad5f037a2e3e
+AUX xbmc-10.1~beta1-jack.patch.bkp 57733 RMD160 5762a1b5d0c788e718c13e334e6c175e4853c1eb SHA1 8fa5c0ec02c86a03d58e57b72384b4452e95097b SHA256 be6e1636c2cc474a3c50c7ce6671d7be42980647b4e83187e8b418500225f478
+AUX xbmc-9.11~beta1-jack.patch 57731 RMD160 2639e772619b0ad75bcb4570253ed21fa4ab5676 SHA1 4f7c8bb1e58c3d7f7254fb2843e7a362f26da7e8 SHA256 dec8129e826449b234fc1658306b2474d63a9e5dc503dee8a9f83d91b62577f8
+AUX xbmc-99999~beta1-jack.patch 57708 RMD160 3a704fda587a94af274690a5fa18f6b26bfc0d46 SHA1 13b0ae77f866df21e5f1c080d9e0df363fd5f478 SHA256 ef2e3e356d53ab925458a2b5cd332907e914429938147e99608511fe903e802f
+DIST xbmc-10.1.tar.gz 130187822 RMD160 a4ddb06b396b8ae437bf30bea5b44396b54ebc5b SHA1 7a9f4e2c18a23d687ecfc744f2e051e4f88ef01a SHA256 3403195b7eb1d076523f2394793b7f050df00743892b031f6fea86b998559d8a
+EBUILD xbmc-10.1-r1.ebuild 5423 RMD160 a1a7af37e9800ac5035c944418ef2957b85db2cf SHA1 d58cda9e14b9d41018139b21dc2ee94311b71c98 SHA256 d629a9fd0b4c0a4019dd2282079eed8ced9a0a3e90db086de079062cbcb3aba2
+EBUILD xbmc-10.1.ebuild 5390 RMD160 ccb062b93f485e70ffba8d108aae662d10533c12 SHA1 99bcc61eed8b3086085caeaa476e1c646e24bdd1 SHA256 df2669bfd06df9b2cbdb12ba25a5ad2858827f8613f495b2267109a1158a5d35
+EBUILD xbmc-99999.ebuild 5201 RMD160 1b933673a1b0417457c192fc4d0e3f6160075010 SHA1 01f87900d6b3975f08d25b9155e78da591b5c540 SHA256 1e9b7b947d65003d028c473d858bd17d523cb11a58016109fdbe107b398802be
+MISC ChangeLog 16527 RMD160 31bae291b8a31893fc9f9afb700f01526ad1b564 SHA1 2c9c34a82727fb15d904197526dcc678da66d1be SHA256 0bfd553f782bd42d86df8276c204b9aa92dc1a60709f0bb21d4d37b659791a82
+MISC metadata.xml 885 RMD160 67687f56afd352af492d990c0d1f0b35e08c16bc SHA1 6e4782708b211b5b45d039c633e14b324f0d3805 SHA256 8a5abffe9692e42653163891290a3f48c1ae68d73597b56e3fcc8ee60ee22c2b
diff --git a/media-tv/xbmc/files/xbmc-10.0-python-2.7.patch b/media-tv/xbmc/files/xbmc-10.0-python-2.7.patch
new file mode 100644
index 0000000..e3d17a5
--- /dev/null
+++ b/media-tv/xbmc/files/xbmc-10.0-python-2.7.patch
@@ -0,0 +1,768 @@
+patch from upstream
+
+https://bugs.gentoo.org/350098
+
+From ab0f816c6307f38d7248d0469379c981f94b816d Mon Sep 17 00:00:00 2001
+From: ceros7 <ceros7@568bbfeb-2a22-0410-94d2-cc84cf5bfa90>
+Date: Mon, 30 Aug 2010 16:46:50 +0000
+Subject: [PATCH] Support external python2.7.
+
+git-svn-id: https://xbmc.svn.sourceforge.net/svnroot/xbmc/branches/python2.7@33342 568bbfeb-2a22-0410-94d2-cc84cf5bfa90
+---
+ configure.in | 10 ++++++-
+ xbmc/lib/libPython/XBPyThread.cpp | 5 +++-
+ xbmc/lib/libPython/XBPyThread.h | 4 ++-
+ xbmc/lib/libPython/XBPython.cpp | 24 +++++++++++++++-----
+ xbmc/lib/libPython/XBPythonDll.cpp | 4 ++-
+ xbmc/lib/libPython/XBPythonDllFuncs.S | 4 ++-
+ xbmc/lib/libPython/linux/Makefile.in | 5 +++-
+ xbmc/lib/libPython/xbmcmodule/GUIPythonWindow.h | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/PythonAddon.h | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/PythonPlayer.h | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/action.h | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/control.h | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/controlbutton.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/controlcheckmark.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/controlfadelabel.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/controlgroup.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/controlimage.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/controllabel.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/controllist.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/controlprogress.cpp | 4 ++-
+ .../libPython/xbmcmodule/controlradiobutton.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/controlslider.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/controlspin.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/controltextbox.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/dialog.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/dialog.h | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/infotagmusic.h | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/infotagvideo.h | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/keyboard.h | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/listitem.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/listitem.h | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/player.h | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/pyplaylist.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/pyplaylist.h | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/pyutil.h | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/window.h | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/winxml.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/winxml.h | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/winxmldialog.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/xbmcaddonmodule.cpp | 4 ++-
+ xbmc/lib/libPython/xbmcmodule/xbmcguimodule.cpp | 5 +++-
+ xbmc/lib/libPython/xbmcmodule/xbmcmodule.cpp | 4 ++-
+ 42 files changed, 149 insertions(+), 48 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 4c0b1b7..cd3429e 100644
+--- a/configure.in
++++ b/configure.in
+@@ -901,7 +901,11 @@ fi
+
+ # External Python
+ if test "$use_external_python" = "yes"; then
+- AC_CHECK_LIB([python2.6], [main],
++ AC_CHECK_LIB([python2.7], [main],
++ [AC_DEFINE([HAVE_LIBPYTHON2_7], [1],
++ [Define to 1 if you have the 'python2.7' library.])
++ USE_PYTHON2_7=1],
++ [AC_CHECK_LIB([python2.6], [main],
+ [AC_DEFINE([HAVE_LIBPYTHON2_6], [1],
+ [Define to 1 if you have the 'python2.6' library.])
+ USE_PYTHON2_6=1],
+@@ -913,9 +917,10 @@ if test "$use_external_python" = "yes"; then
+ [AC_DEFINE([HAVE_LIBPYTHON2_4], [1],
+ [Define to 1 if you have the 'python2.4' library.])
+ USE_PYTHON2_4=1],
+- [AC_MSG_ERROR($missing_library)] )] )] )
++ [AC_MSG_ERROR($missing_library)] )] )] )] )
+
+ AC_MSG_NOTICE($external_python_enabled)
++ test "$USE_PYTHON2_7" && AC_MSG_NOTICE([Using Python 2.7])
+ test "$USE_PYTHON2_6" && AC_MSG_NOTICE([Using Python 2.6])
+ test "$USE_PYTHON2_5" && AC_MSG_NOTICE([Using Python 2.5])
+ test "$USE_PYTHON2_4" && AC_MSG_NOTICE([Using Python 2.4])
+@@ -1471,6 +1476,7 @@ AC_SUBST(USE_INTERNAL_LIBDTS)
+ AC_SUBST(USE_EXTERNAL_LIBMPEG2)
+ AC_SUBST(USE_EXTERNAL_LIBWAVPACK)
+ AC_SUBST(USE_EXTERNAL_PYTHON)
++AC_SUBST(USE_PYTHON2_7)
+ AC_SUBST(USE_PYTHON2_6)
+ AC_SUBST(USE_PYTHON2_5)
+ AC_SUBST(USE_PYTHON2_4)
+diff --git a/xbmc/lib/libPython/XBPyThread.cpp b/xbmc/lib/libPython/XBPyThread.cpp
+index 3a6f34e..71b4b9a 100644
+--- a/xbmc/lib/libPython/XBPyThread.cpp
++++ b/xbmc/lib/libPython/XBPyThread.cpp
+@@ -24,7 +24,10 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #include <python2.7/osdefs.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #include <python2.6/osdefs.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+diff --git a/xbmc/lib/libPython/XBPyThread.h b/xbmc/lib/libPython/XBPyThread.h
+index c3da337..eea7fea 100644
+--- a/xbmc/lib/libPython/XBPyThread.h
++++ b/xbmc/lib/libPython/XBPyThread.h
+@@ -26,7 +26,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/XBPython.cpp b/xbmc/lib/libPython/XBPython.cpp
+index e52cdfb..defcf14 100644
+--- a/xbmc/lib/libPython/XBPython.cpp
++++ b/xbmc/lib/libPython/XBPython.cpp
+@@ -24,7 +24,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+@@ -61,7 +63,9 @@ XBPython g_pythonParser;
+ #define PYTHON_DLL "special://xbmcbin/system/python/python24-x86-osx.so"
+ #endif
+ #elif defined(__x86_64__)
+-#if (defined HAVE_LIBPYTHON2_6)
++#if (defined HAVE_LIBPYTHON2_7)
++#define PYTHON_DLL "special://xbmcbin/system/python/python27-x86_64-linux.so"
++#elif (defined HAVE_LIBPYTHON2_6)
+ #define PYTHON_DLL "special://xbmcbin/system/python/python26-x86_64-linux.so"
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #define PYTHON_DLL "special://xbmcbin/system/python/python25-x86_64-linux.so"
+@@ -69,7 +73,9 @@ XBPython g_pythonParser;
+ #define PYTHON_DLL "special://xbmcbin/system/python/python24-x86_64-linux.so"
+ #endif
+ #elif defined(_POWERPC)
+-#if (defined HAVE_LIBPYTHON2_6)
++#if (defined HAVE_LIBPYTHON2_7)
++#define PYTHON_DLL "special://xbmcbin/system/python/python27-powerpc-linux.so"
++#elif (defined HAVE_LIBPYTHON2_6)
+ #define PYTHON_DLL "special://xbmcbin/system/python/python26-powerpc-linux.so"
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #define PYTHON_DLL "special://xbmcbin/system/python/python25-powerpc-linux.so"
+@@ -77,7 +83,9 @@ XBPython g_pythonParser;
+ #define PYTHON_DLL "special://xbmcbin/system/python/python24-powerpc-linux.so"
+ #endif
+ #elif defined(_POWERPC64)
+-#if (defined HAVE_LIBPYTHON2_6)
++#if (defined HAVE_LIBPYTHON2_7)
++#define PYTHON_DLL "special://xbmcbin/system/python/python27-powerpc64-linux.so"
++#elif (defined HAVE_LIBPYTHON2_6)
+ #define PYTHON_DLL "special://xbmcbin/system/python/python26-powerpc64-linux.so"
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #define PYTHON_DLL "special://xbmcbin/system/python/python25-powerpc64-linux.so"
+@@ -85,7 +93,9 @@ XBPython g_pythonParser;
+ #define PYTHON_DLL "special://xbmcbin/system/python/python24-powerpc64-linux.so"
+ #endif
+ #elif defined(_ARMEL)
+-#if (defined HAVE_LIBPYTHON2_6)
++#if (defined HAVE_LIBPYTHON2_7)
++#define PYTHON_DLL "special://xbmc/system/python/python27-arm.so"
++#elif (defined HAVE_LIBPYTHON2_6)
+ #define PYTHON_DLL "special://xbmc/system/python/python26-arm.so"
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #define PYTHON_DLL "special://xbmc/system/python/python25-arm.so"
+@@ -93,7 +103,9 @@ XBPython g_pythonParser;
+ #define PYTHON_DLL "special://xbmc/system/python/python24-arm.so"
+ #endif
+ #else /* !__x86_64__ && !__powerpc__ */
+-#if (defined HAVE_LIBPYTHON2_6)
++#if (defined HAVE_LIBPYTHON2_7)
++#define PYTHON_DLL "special://xbmcbin/system/python/python27-i486-linux.so"
++#elif (defined HAVE_LIBPYTHON2_6)
+ #define PYTHON_DLL "special://xbmcbin/system/python/python26-i486-linux.so"
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #define PYTHON_DLL "special://xbmcbin/system/python/python25-i486-linux.so"
+diff --git a/xbmc/lib/libPython/XBPythonDll.cpp b/xbmc/lib/libPython/XBPythonDll.cpp
+index bc9d827..87ac7d7 100644
+--- a/xbmc/lib/libPython/XBPythonDll.cpp
++++ b/xbmc/lib/libPython/XBPythonDll.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/pyconfig.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/pyconfig.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/pyconfig.h>
+diff --git a/xbmc/lib/libPython/XBPythonDllFuncs.S b/xbmc/lib/libPython/XBPythonDllFuncs.S
+index 6b7a6c3..f59b192 100644
+--- a/xbmc/lib/libPython/XBPythonDllFuncs.S
++++ b/xbmc/lib/libPython/XBPythonDllFuncs.S
+@@ -2,7 +2,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/pyconfig.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/pyconfig.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/pyconfig.h>
+diff --git a/xbmc/lib/libPython/linux/Makefile.in b/xbmc/lib/libPython/linux/Makefile.in
+index 7011434..0786937 100644
+--- a/xbmc/lib/libPython/linux/Makefile.in
++++ b/xbmc/lib/libPython/linux/Makefile.in
+@@ -5,7 +5,10 @@ LDFLAGS=@LDFLAGS@
+ SHELL=/bin/bash
+ SYSDIR=../../../../system/python
+
+-ifeq (@USE_PYTHON2_6@,1)
++ifeq (@USE_PYTHON2_7@,1)
++ PYVERSION=python2.7
++ SO=python27-$(ARCH).so
++else ifeq (@USE_PYTHON2_6@,1)
+ PYVERSION=python2.6
+ SO=python26-$(ARCH).so
+ else ifeq (@USE_PYTHON2_5@,1)
+diff --git a/xbmc/lib/libPython/xbmcmodule/GUIPythonWindow.h b/xbmc/lib/libPython/xbmcmodule/GUIPythonWindow.h
+index 620d9bd..06fa146 100644
+--- a/xbmc/lib/libPython/xbmcmodule/GUIPythonWindow.h
++++ b/xbmc/lib/libPython/xbmcmodule/GUIPythonWindow.h
+@@ -26,7 +26,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/PythonAddon.h b/xbmc/lib/libPython/xbmcmodule/PythonAddon.h
+index ec7ed28..41eb8ea 100644
+--- a/xbmc/lib/libPython/xbmcmodule/PythonAddon.h
++++ b/xbmc/lib/libPython/xbmcmodule/PythonAddon.h
+@@ -25,7 +25,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/PythonPlayer.h b/xbmc/lib/libPython/xbmcmodule/PythonPlayer.h
+index ecee993..24a1c87 100644
+--- a/xbmc/lib/libPython/xbmcmodule/PythonPlayer.h
++++ b/xbmc/lib/libPython/xbmcmodule/PythonPlayer.h
+@@ -25,7 +25,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/action.h b/xbmc/lib/libPython/xbmcmodule/action.h
+index 0e20000..7f8b1bc 100644
+--- a/xbmc/lib/libPython/xbmcmodule/action.h
++++ b/xbmc/lib/libPython/xbmcmodule/action.h
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/control.h b/xbmc/lib/libPython/xbmcmodule/control.h
+index c76b37c..a9ec63d 100644
+--- a/xbmc/lib/libPython/xbmcmodule/control.h
++++ b/xbmc/lib/libPython/xbmcmodule/control.h
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/controlbutton.cpp b/xbmc/lib/libPython/xbmcmodule/controlbutton.cpp
+index b24ccce..7455ca7 100644
+--- a/xbmc/lib/libPython/xbmcmodule/controlbutton.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/controlbutton.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/controlcheckmark.cpp b/xbmc/lib/libPython/xbmcmodule/controlcheckmark.cpp
+index 96e4743..86a7d8b 100644
+--- a/xbmc/lib/libPython/xbmcmodule/controlcheckmark.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/controlcheckmark.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/controlfadelabel.cpp b/xbmc/lib/libPython/xbmcmodule/controlfadelabel.cpp
+index 68442d8..c6eb052 100644
+--- a/xbmc/lib/libPython/xbmcmodule/controlfadelabel.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/controlfadelabel.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/controlgroup.cpp b/xbmc/lib/libPython/xbmcmodule/controlgroup.cpp
+index aadfc17..8275324 100644
+--- a/xbmc/lib/libPython/xbmcmodule/controlgroup.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/controlgroup.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/controlimage.cpp b/xbmc/lib/libPython/xbmcmodule/controlimage.cpp
+index 79835d6..f106e90 100644
+--- a/xbmc/lib/libPython/xbmcmodule/controlimage.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/controlimage.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/controllabel.cpp b/xbmc/lib/libPython/xbmcmodule/controllabel.cpp
+index aca22e4..38a9c07 100644
+--- a/xbmc/lib/libPython/xbmcmodule/controllabel.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/controllabel.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/controllist.cpp b/xbmc/lib/libPython/xbmcmodule/controllist.cpp
+index 0c67b5c..bb57776 100644
+--- a/xbmc/lib/libPython/xbmcmodule/controllist.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/controllist.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/controlprogress.cpp b/xbmc/lib/libPython/xbmcmodule/controlprogress.cpp
+index a21e462..b460a2a 100644
+--- a/xbmc/lib/libPython/xbmcmodule/controlprogress.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/controlprogress.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/controlradiobutton.cpp b/xbmc/lib/libPython/xbmcmodule/controlradiobutton.cpp
+index ec54efd..b966a17 100644
+--- a/xbmc/lib/libPython/xbmcmodule/controlradiobutton.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/controlradiobutton.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/controlslider.cpp b/xbmc/lib/libPython/xbmcmodule/controlslider.cpp
+index 21ea5e7..c5f65b3 100644
+--- a/xbmc/lib/libPython/xbmcmodule/controlslider.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/controlslider.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/controlspin.cpp b/xbmc/lib/libPython/xbmcmodule/controlspin.cpp
+index 4e24e14..feead3c 100644
+--- a/xbmc/lib/libPython/xbmcmodule/controlspin.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/controlspin.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/controltextbox.cpp b/xbmc/lib/libPython/xbmcmodule/controltextbox.cpp
+index b4c44d5..4a7c688 100644
+--- a/xbmc/lib/libPython/xbmcmodule/controltextbox.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/controltextbox.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/dialog.cpp b/xbmc/lib/libPython/xbmcmodule/dialog.cpp
+index caa8986..cffe485 100644
+--- a/xbmc/lib/libPython/xbmcmodule/dialog.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/dialog.cpp
+@@ -24,7 +24,9 @@
+ #endif
+ #include "dialog.h"
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/dialog.h b/xbmc/lib/libPython/xbmcmodule/dialog.h
+index edcae41..a61c4b1 100644
+--- a/xbmc/lib/libPython/xbmcmodule/dialog.h
++++ b/xbmc/lib/libPython/xbmcmodule/dialog.h
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/infotagmusic.h b/xbmc/lib/libPython/xbmcmodule/infotagmusic.h
+index d202e48..590b858 100644
+--- a/xbmc/lib/libPython/xbmcmodule/infotagmusic.h
++++ b/xbmc/lib/libPython/xbmcmodule/infotagmusic.h
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/infotagvideo.h b/xbmc/lib/libPython/xbmcmodule/infotagvideo.h
+index f2bb300..e808573 100644
+--- a/xbmc/lib/libPython/xbmcmodule/infotagvideo.h
++++ b/xbmc/lib/libPython/xbmcmodule/infotagvideo.h
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/keyboard.h b/xbmc/lib/libPython/xbmcmodule/keyboard.h
+index e5c817f..0f069e3 100644
+--- a/xbmc/lib/libPython/xbmcmodule/keyboard.h
++++ b/xbmc/lib/libPython/xbmcmodule/keyboard.h
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/listitem.cpp b/xbmc/lib/libPython/xbmcmodule/listitem.cpp
+index 137436e..20105ef 100644
+--- a/xbmc/lib/libPython/xbmcmodule/listitem.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/listitem.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/listitem.h b/xbmc/lib/libPython/xbmcmodule/listitem.h
+index 7ebcd6c..3d4a6c8 100644
+--- a/xbmc/lib/libPython/xbmcmodule/listitem.h
++++ b/xbmc/lib/libPython/xbmcmodule/listitem.h
+@@ -25,7 +25,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/player.h b/xbmc/lib/libPython/xbmcmodule/player.h
+index 48dc9c7..34a102d 100644
+--- a/xbmc/lib/libPython/xbmcmodule/player.h
++++ b/xbmc/lib/libPython/xbmcmodule/player.h
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/pyplaylist.cpp b/xbmc/lib/libPython/xbmcmodule/pyplaylist.cpp
+index c7e7f62..6df8548 100644
+--- a/xbmc/lib/libPython/xbmcmodule/pyplaylist.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/pyplaylist.cpp
+@@ -26,7 +26,9 @@
+ #include "Util.h"
+ #include "pyplaylist.h"
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/pyplaylist.h b/xbmc/lib/libPython/xbmcmodule/pyplaylist.h
+index f2334bb..2410314 100644
+--- a/xbmc/lib/libPython/xbmcmodule/pyplaylist.h
++++ b/xbmc/lib/libPython/xbmcmodule/pyplaylist.h
+@@ -25,7 +25,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/pyutil.h b/xbmc/lib/libPython/xbmcmodule/pyutil.h
+index 4acf6e5..1a156f8 100644
+--- a/xbmc/lib/libPython/xbmcmodule/pyutil.h
++++ b/xbmc/lib/libPython/xbmcmodule/pyutil.h
+@@ -25,7 +25,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/window.h b/xbmc/lib/libPython/xbmcmodule/window.h
+index 6ce8e72..40304ff 100644
+--- a/xbmc/lib/libPython/xbmcmodule/window.h
++++ b/xbmc/lib/libPython/xbmcmodule/window.h
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/winxml.cpp b/xbmc/lib/libPython/xbmcmodule/winxml.cpp
+index d3b703f..3e1b3c8 100644
+--- a/xbmc/lib/libPython/xbmcmodule/winxml.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/winxml.cpp
+@@ -24,7 +24,9 @@
+ #endif
+ #include "winxml.h"
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/winxml.h b/xbmc/lib/libPython/xbmcmodule/winxml.h
+index 6e6489e..f3a8dd8 100644
+--- a/xbmc/lib/libPython/xbmcmodule/winxml.h
++++ b/xbmc/lib/libPython/xbmcmodule/winxml.h
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/winxmldialog.cpp b/xbmc/lib/libPython/xbmcmodule/winxmldialog.cpp
+index b021501..92d9903 100644
+--- a/xbmc/lib/libPython/xbmcmodule/winxmldialog.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/winxmldialog.cpp
+@@ -24,7 +24,9 @@
+ #endif
+ #include "winxml.h"
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/xbmcaddonmodule.cpp b/xbmc/lib/libPython/xbmcmodule/xbmcaddonmodule.cpp
+index b8bc0a3..c65aded 100644
+--- a/xbmc/lib/libPython/xbmcmodule/xbmcaddonmodule.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/xbmcaddonmodule.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+diff --git a/xbmc/lib/libPython/xbmcmodule/xbmcguimodule.cpp b/xbmc/lib/libPython/xbmcmodule/xbmcguimodule.cpp
+index 87c0ead..9941769 100644
+--- a/xbmc/lib/libPython/xbmcmodule/xbmcguimodule.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/xbmcguimodule.cpp
+@@ -23,7 +23,10 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #include <python2.7/structmember.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #include <python2.6/structmember.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+diff --git a/xbmc/lib/libPython/xbmcmodule/xbmcmodule.cpp b/xbmc/lib/libPython/xbmcmodule/xbmcmodule.cpp
+index 3bab5a9..1e2c480 100644
+--- a/xbmc/lib/libPython/xbmcmodule/xbmcmodule.cpp
++++ b/xbmc/lib/libPython/xbmcmodule/xbmcmodule.cpp
+@@ -23,7 +23,9 @@
+ #include "config.h"
+ #endif
+ #if (defined USE_EXTERNAL_PYTHON)
+- #if (defined HAVE_LIBPYTHON2_6)
++ #if (defined HAVE_LIBPYTHON2_7)
++ #include <python2.7/Python.h>
++ #elif (defined HAVE_LIBPYTHON2_6)
+ #include <python2.6/Python.h>
+ #elif (defined HAVE_LIBPYTHON2_5)
+ #include <python2.5/Python.h>
+--
+1.7.3.1
+
diff --git a/media-tv/xbmc/files/xbmc-10.1-gcc-4.6.patch b/media-tv/xbmc/files/xbmc-10.1-gcc-4.6.patch
new file mode 100644
index 0000000..b3e8c7c
--- /dev/null
+++ b/media-tv/xbmc/files/xbmc-10.1-gcc-4.6.patch
@@ -0,0 +1,100 @@
+http://trac.xbmc.org/ticket/11383
+http://bugs.gentoo.org/367261
+
+From c66099c4d8e6b2d748ca3ddc31ee90b731d0f620 Mon Sep 17 00:00:00 2001
+From: Stephan Raue <stephan@openelec.tv>
+Date: Wed, 30 Mar 2011 14:57:28 +0200
+Subject: [PATCH] dvdplayer: fix build with gcc-4.6. Flags to the Linker must be passed via -Wl,. This fixes ticket #11383
+
+Signed-off-by: Stephan Raue <stephan@openelec.tv>
+---
+ xbmc/cores/dvdplayer/Codecs/Makefile.in | 18 +++++++++---------
+ xbmc/cores/dvdplayer/Codecs/libdvd/Makefile.in | 4 ++--
+ 2 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/xbmc/cores/dvdplayer/Codecs/Makefile.in b/xbmc/cores/dvdplayer/Codecs/Makefile.in
+index a7ef1a0..308664a 100644
+--- a/xbmc/cores/dvdplayer/Codecs/Makefile.in
++++ b/xbmc/cores/dvdplayer/Codecs/Makefile.in
+@@ -148,32 +148,32 @@ liba52:
+ else
+
+ $(SYSDIR)/avutil-50-$(ARCH).so: ffmpeg/libavutil/libavutil.so
+- $(CC) -o $@ $(LDFLAGS) --soname,$@ -Wl,-Bsymbolic \
++ $(CC) -o $@ $(LDFLAGS) -Wl,--soname,$@ -Wl,-Bsymbolic \
+ ffmpeg/libavutil/*.o `cat $(WRAPPER:.o=.def)` $(WRAPPER)
+
+ $(SYSDIR)/avcodec-52-$(ARCH).so: $(WRAPPER) ffmpeg/libavcodec/libavcodec.so
+- $(CC) -o $@ $(LDFLAGS) --soname,$@ -Wl,-Bsymbolic \
++ $(CC) -o $@ $(LDFLAGS) -Wl,--soname,$@ -Wl,-Bsymbolic \
+ ffmpeg/libavcodec/*.o ffmpeg/libavcodec/$(ARCH_DIR)/*.o \
+ `cat $(WRAPPER:.o=.def)` $(WRAPPER)
+
+ $(SYSDIR)/avformat-52-$(ARCH).so: $(WRAPPER) ffmpeg/libavformat/libavformat.so
+- $(CC) -o $@ $(LDFLAGS) --soname,$@ -Wl,-Bsymbolic \
++ $(CC) -o $@ $(LDFLAGS) -Wl,--soname,$@ -Wl,-Bsymbolic \
+ ffmpeg/libavformat/*.o `cat $(WRAPPER:.o=.def)` $(WRAPPER)
+
+ ifneq ($(ARCH), arm)
+ $(SYSDIR)/swscale-0.6.1-$(ARCH).so: $(WRAPPER) ffmpeg/libswscale/libswscale.so
+- $(CC) -o $@ $(LDFLAGS) --soname,$@ -Wl,-Bsymbolic \
++ $(CC) -o $@ $(LDFLAGS) -Wl,--soname,$@ -Wl,-Bsymbolic \
+ ffmpeg/libswscale/*.o ffmpeg/libswscale/$(ARCH_DIR)/*.o \
+ `cat $(WRAPPER:.o=.def)` $(WRAPPER)
+ else # No ARM version of swscale available yet.
+ $(SYSDIR)/swscale-0.6.1-$(ARCH).so: $(WRAPPER) ffmpeg/libswscale/libswscale.so
+- $(CC) -o $@ $(LDFLAGS) --soname,$@ -Wl,-Bsymbolic \
++ $(CC) -o $@ $(LDFLAGS) -Wl,--soname,$@ -Wl,-Bsymbolic \
+ ffmpeg/libswscale/*.o \
+ `cat $(WRAPPER:.o=.def)` $(WRAPPER)
+ endif
+
+ $(SYSDIR)/postproc-51-$(ARCH).so: $(WRAPPER) ffmpeg/libpostproc/libpostproc.so
+- $(CC) -o $@ $(LDFLAGS) --soname,$@ -Wl,-Bsymbolic \
++ $(CC) -o $@ $(LDFLAGS) -Wl,--soname,$@ -Wl,-Bsymbolic \
+ ffmpeg/libpostproc/*.o `cat $(WRAPPER:.o=.def)` $(WRAPPER)
+
+ ffmpeg/libavutil/libavutil.so : ffmpeg;
+@@ -185,17 +185,17 @@ ffmpeg:
+ $(MAKE) -C $@
+
+ $(SYSDIR)/libdts-$(ARCH).so: $(WRAPPER) libdts/libdts/libdts.a
+- $(CC) -o $@ $(LDFLAGS) --soname,$@ \
++ $(CC) -o $@ $(LDFLAGS) -Wl,--soname,$@ \
+ libdts/libdts/bitstream.o \
+ libdts/libdts/downmix.o libdts/libdts/parse.o \
+ `cat $(WRAPPER:.o=.def)` $(WRAPPER)
+
+ $(SYSDIR)/liba52-$(ARCH).so: $(WRAPPER) liba52/liba52/liba52.la
+- $(CC) -o $@ $(LDFLAGS) --soname,$@ liba52/liba52/.libs/*.o \
++ $(CC) -o $@ $(LDFLAGS) -Wl,--soname,$@ liba52/liba52/.libs/*.o \
+ -Wl`cat $(WRAPPER:.o=.def)` $(WRAPPER)
+
+ $(SYSDIR)/libao-$(ARCH).so: $(WRAPPER) liba52/libao/libao.a
+- $(CC) -o $@ $(LDFLAGS) --soname,$@ liba52/libao/libao.a \
++ $(CC) -o $@ $(LDFLAGS) -Wl,--soname,$@ liba52/libao/libao.a \
+ -Wl`cat $(WRAPPER:.o=.def)` $(WRAPPER)
+
+ libdts/libdts/libdts.a : libdts;
+diff --git a/xbmc/cores/dvdplayer/Codecs/libdvd/Makefile.in b/xbmc/cores/dvdplayer/Codecs/libdvd/Makefile.in
+index 3c487e9..6d4abd4 100644
+--- a/xbmc/cores/dvdplayer/Codecs/libdvd/Makefile.in
++++ b/xbmc/cores/dvdplayer/Codecs/libdvd/Makefile.in
+@@ -49,12 +49,12 @@ $(SYSDIR)/libdvdnav-$(ARCH).so: $(WRAPPER_OSX) $(DVDCSS_A) libdvdread/obj/libdvd
+ else
+
+ $(SYSDIR)/libdvdcss-$(ARCH).so: $(WRAPPER) libdvdcss/src/.libs/libdvdcss.a
+- $(CC) -o $@ $(LDFLAGS) --soname,$@ \
++ $(CC) -o $@ $(LDFLAGS) -Wl,--soname,$@ \
+ libdvdcss/src/*.o \
+ `cat $(WRAPPER:.o=.def)` $(WRAPPER)
+
+ $(SYSDIR)/libdvdnav-$(ARCH).so: $(WRAPPER) $(DVDCSS_A) libdvdread/obj/libdvdread.a libdvdnav/obj/libdvdnav.a
+- $(CC) -o $@ $(LDFLAGS) --soname,$@ $(DVDCSS_O) libdvdread/obj/*.o libdvdnav/obj/*.o \
++ $(CC) -o $@ $(LDFLAGS) -Wl,--soname,$@ $(DVDCSS_O) libdvdread/obj/*.o libdvdnav/obj/*.o \
+ `cat $(WRAPPER:.o=.def)` $(WRAPPER)
+
+ endif
+--
+1.7.0.2
+
diff --git a/media-tv/xbmc/files/xbmc-10.1-headers.patch b/media-tv/xbmc/files/xbmc-10.1-headers.patch
new file mode 100644
index 0000000..8c23db8
--- /dev/null
+++ b/media-tv/xbmc/files/xbmc-10.1-headers.patch
@@ -0,0 +1,10 @@
+--- a/tools/TexturePacker/XBTFWriter.cpp
++++ b/tools/TexturePacker/XBTFWriter.cpp
+@@ -28,6 +28,7 @@
+ #include "EndianSwap.h"
+ #define __STDC_FORMAT_MACROS
+ #include <inttypes.h>
++#include <unistd.h> /* for unlink() prototype */
+
+ #define TEMP_FILE "temp.xbt"
+ #define TEMP_SIZE (10*1024*1024)
diff --git a/media-tv/xbmc/files/xbmc-10.1-libpng-1.5.patch b/media-tv/xbmc/files/xbmc-10.1-libpng-1.5.patch
new file mode 100644
index 0000000..4d99227
--- /dev/null
+++ b/media-tv/xbmc/files/xbmc-10.1-libpng-1.5.patch
@@ -0,0 +1,596 @@
+fix building with newer libpng. patch by Ian Stakenvicius.
+
+https://bugs.gentoo.org/380127
+
+--- a/xbmc/lib/cximage-6.0/CxImage/ximapng.h
++++ b/xbmc/lib/cximage-6.0/CxImage/ximapng.h
+@@ -69,8 +69,13 @@
+
+ static void PNGAPI user_error_fn(png_structp png_ptr,png_const_charp error_msg)
+ {
++#if PNG_LIBPNG_VER > 10399
++ strncpy((char*)png_get_error_ptr(png_ptr),error_msg,255);
++ longjmp(png_jmpbuf(png_ptr), 1);
++#else
+ strncpy((char*)png_ptr->error_ptr,error_msg,255);
+ longjmp(png_ptr->jmpbuf, 1);
++#endif
+ }
+ };
+
+--- a/xbmc/lib/cximage-6.0/CxImage/ximapng.cpp
++++ b/xbmc/lib/cximage-6.0/CxImage/ximapng.cpp
+@@ -15,7 +15,11 @@
+ void CxImagePNG::ima_png_error(png_struct *png_ptr, char *message)
+ {
+ strcpy(info.szLastError,message);
++#if PNG_LIBPNG_VER > 10399
++ longjmp(png_jmpbuf(png_ptr), 1);
++#else
+ longjmp(png_ptr->jmpbuf, 1);
++#endif
+ }
+ ////////////////////////////////////////////////////////////////////////////////
+ #if CXIMAGE_SUPPORT_DECODE
+@@ -62,7 +66,11 @@
+ /* Set error handling if you are using the setjmp/longjmp method (this is
+ * the normal method of doing things with libpng). REQUIRED unless you
+ * set up your own error handlers in the png_create_read_struct() earlier. */
++#if PNG_LIBPNG_VER > 10399
++ if (setjmp(png_jmpbuf(png_ptr))) {
++#else
+ if (setjmp(png_ptr->jmpbuf)) {
++#endif
+ /* Free all of the memory associated with the png_ptr and info_ptr */
+ delete [] row_pointers;
+ png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
+@@ -70,16 +78,35 @@
+ /* read the file information */
+ png_read_info(png_ptr, info_ptr);
+
++ png_uint_32 _width,_height;
++ int _bit_depth,_color_type,_interlace_type,_compression_type,_filter_type;
++#if PNG_LIBPNG_VER > 10399
++ png_get_IHDR(png_ptr,info_ptr,&_width,&_height,&_bit_depth,&_color_type,
++ &_interlace_type,&_compression_type,&_filter_type);
++#else
++ _width=info_ptr->width;
++ _height=info_ptr->height;
++ _bit_depth=info_ptr->bit_depth;
++ _color_type=info_ptr->color_type;
++ _interlace_type=info_ptr->interlace_type;
++ _compression_type=info_ptr->compression_type;
++ _filter_type=info_ptr->filter_type;
++#endif
++
+ if (info.nEscape == -1){
+- head.biWidth = info_ptr->width;
+- head.biHeight= info_ptr->height;
++ head.biWidth = _width;
++ head.biHeight= _height;
+ info.dwType = CXIMAGE_FORMAT_PNG;
++#if PNG_LIBPNG_VER > 10399
++ longjmp(png_jmpbuf(png_ptr), 1);
++#else
+ longjmp(png_ptr->jmpbuf, 1);
++#endif
+ }
+
+ /* calculate new number of channels */
+ int channels=0;
+- switch(info_ptr->color_type){
++ switch(_color_type){
+ case PNG_COLOR_TYPE_GRAY:
+ case PNG_COLOR_TYPE_PALETTE:
+ channels = 1;
+@@ -101,71 +128,108 @@
+ break;
+ default:
+ strcpy(info.szLastError,"unknown PNG color type");
++#if PNG_LIBPNG_VER > 10399
++ longjmp(png_jmpbuf(png_ptr), 1);
++#else
+ longjmp(png_ptr->jmpbuf, 1);
++#endif
+ }
+
+ //find the right pixel depth used for cximage
++#if PNG_LIBPNG_VER > 10399
++ int pixel_depth = _bit_depth * png_get_channels(png_ptr,info_ptr);
++#else
+ int pixel_depth = info_ptr->pixel_depth;
++#endif
+ if (channels == 1 && pixel_depth>8) pixel_depth=8;
+ if (channels == 2) pixel_depth=8;
+ if (channels >= 3) pixel_depth=24;
+
+- if (!Create(info_ptr->width, info_ptr->height, pixel_depth, CXIMAGE_FORMAT_PNG)){
++ if (!Create(_width, _height, pixel_depth, CXIMAGE_FORMAT_PNG)){
++#if PNG_LIBPNG_VER > 10399
++ longjmp(png_jmpbuf(png_ptr), 1);
++#else
+ longjmp(png_ptr->jmpbuf, 1);
++#endif
+ }
+
+ /* get metrics */
+- switch (info_ptr->phys_unit_type)
++ png_uint_32 _x_pixels_per_unit,_y_pixels_per_unit;
++ int _phys_unit_type;
++#if PNG_LIBPNG_VER > 10399
++ png_get_pHYs(png_ptr,info_ptr,&_x_pixels_per_unit,&_y_pixels_per_unit,&_phys_unit_type);
++#else
++ _x_pixels_per_unit=info_ptr->x_pixels_per_unit;
++ _y_pixels_per_unit=info_ptr->y_pixels_per_unit;
++ _phys_unit_type=info_ptr->phys_unit_type;
++#endif
++ switch (_phys_unit_type)
+ {
+ case PNG_RESOLUTION_UNKNOWN:
+- SetXDPI(info_ptr->x_pixels_per_unit);
+- SetYDPI(info_ptr->y_pixels_per_unit);
++ SetXDPI(_x_pixels_per_unit);
++ SetYDPI(_y_pixels_per_unit);
+ break;
+ case PNG_RESOLUTION_METER:
+- SetXDPI((long)floor(info_ptr->x_pixels_per_unit * 254.0 / 10000.0 + 0.5));
+- SetYDPI((long)floor(info_ptr->y_pixels_per_unit * 254.0 / 10000.0 + 0.5));
++ SetXDPI((long)floor(_x_pixels_per_unit * 254.0 / 10000.0 + 0.5));
++ SetYDPI((long)floor(_y_pixels_per_unit * 254.0 / 10000.0 + 0.5));
+ break;
+ }
+
+- if (info_ptr->num_palette>0){
+- SetPalette((rgb_color*)info_ptr->palette,info_ptr->num_palette);
+- SetClrImportant(info_ptr->num_palette);
+- } else if (info_ptr->bit_depth ==2) { //<DP> needed for 2 bpp grayscale PNGs
++ int _num_palette;
++ png_colorp _palette;
++#if PNG_LIBPNG_VER > 10399
++ png_get_PLTE(png_ptr,info_ptr,&_palette,&_num_palette);
++#else
++ _num_palette=info_ptr->num_palette;
++ _palette=info_ptr->palette;
++#endif
++ if (_num_palette>0){
++ SetPalette((rgb_color*)_palette,_num_palette);
++ SetClrImportant(_num_palette);
++ } else if (_bit_depth ==2) { //<DP> needed for 2 bpp grayscale PNGs
+ SetPaletteColor(0,0,0,0);
+ SetPaletteColor(1,85,85,85);
+ SetPaletteColor(2,170,170,170);
+ SetPaletteColor(3,255,255,255);
+ } else SetGrayPalette(); //<DP> needed for grayscale PNGs
+
+- int nshift = max(0,(info_ptr->bit_depth>>3)-1)<<3;
++ int nshift = max(0,(_bit_depth>>3)-1)<<3;
+
+- if (info_ptr->num_trans!=0){ //palette transparency
+- if (info_ptr->num_trans==1){
+- if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE){
++ png_bytep _trans_alpha;
++ int _num_trans;
++ png_color_16p _trans_color;
++#if PNG_LIBPNG_VER > 10399
++ png_get_tRNS(png_ptr,info_ptr,&_trans_alpha,&_num_trans,&_trans_color);
++#else
++ _num_trans=info_ptr->num_trans;
++#endif
++ if (_num_trans!=0){ //palette transparency
++ if (_num_trans==1){
++ if (_color_type == PNG_COLOR_TYPE_PALETTE){
+ #if PNG_LIBPNG_VER > 10399
+- info.nBkgndIndex = info_ptr->trans_color.index;
++ info.nBkgndIndex = _trans_color->index;
+ #else
+ info.nBkgndIndex = info_ptr->trans_values.index;
+ #endif
+ } else{
+ #if PNG_LIBPNG_VER > 10399
+- info.nBkgndIndex = info_ptr->trans_color.gray>>nshift;
++ info.nBkgndIndex = _trans_color->gray>>nshift;
+ #else
+ info.nBkgndIndex = info_ptr->trans_values.gray>>nshift;
+ #endif
+ }
+ }
+- if (info_ptr->num_trans>1){
++ if (_num_trans>1){
+ RGBQUAD* pal=GetPalette();
+ if (pal){
+ DWORD ip;
+- for (ip=0;ip<min(head.biClrUsed,(unsigned long)info_ptr->num_trans);ip++)
++ for (ip=0;ip<min(head.biClrUsed,(unsigned long)_num_trans);ip++)
+ #if PNG_LIBPNG_VER > 10399
+- pal[ip].rgbReserved=info_ptr->trans_alpha[ip];
++ pal[ip].rgbReserved=_trans_alpha[ip];
+ #else
+ pal[ip].rgbReserved=info_ptr->trans[ip];
+ #endif
+- for (ip=info_ptr->num_trans;ip<head.biClrUsed;ip++){
++ for (ip=_num_trans;ip<head.biClrUsed;ip++){
+ pal[ip].rgbReserved=255;
+ }
+ info.bAlphaPaletteEnabled=true;
+@@ -174,14 +238,12 @@
+ }
+
+ if (channels == 3){ //check RGB binary transparency
+- png_bytep trans;
+- int num_trans;
+- png_color_16 *image_background;
+- if (png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans, &image_background)){
+-#if PNG_LIBPNG_VER > 10399
+- info.nBkgndColor.rgbRed = (BYTE)(info_ptr->trans_color.red>>nshift);
+- info.nBkgndColor.rgbGreen = (BYTE)(info_ptr->trans_color.green>>nshift);
+- info.nBkgndColor.rgbBlue = (BYTE)(info_ptr->trans_color.blue>>nshift);
++ /* seems unnecessary to call again, but the conditional must be important so... */
++ if (png_get_tRNS(png_ptr,info_ptr,&_trans_alpha,&_num_trans,&_trans_color)){
++#if PNG_LIBPNG_VER > 10399
++ info.nBkgndColor.rgbRed = (BYTE)(_trans_color->red>>nshift);
++ info.nBkgndColor.rgbGreen = (BYTE)(_trans_color->green>>nshift);
++ info.nBkgndColor.rgbBlue = (BYTE)(_trans_color->blue>>nshift);
+ #else
+ info.nBkgndColor.rgbRed = (BYTE)(info_ptr->trans_values.red>>nshift);
+ info.nBkgndColor.rgbGreen = (BYTE)(info_ptr->trans_values.green>>nshift);
+@@ -202,15 +264,24 @@
+ }
+
+ // <vho> - flip the RGB pixels to BGR (or RGBA to BGRA)
+- if (info_ptr->color_type & PNG_COLOR_MASK_COLOR){
++ if (_color_type & PNG_COLOR_MASK_COLOR){
+ png_set_bgr(png_ptr);
+ }
+
+ // <vho> - handle cancel
+- if (info.nEscape) longjmp(png_ptr->jmpbuf, 1);
++ if (info.nEscape)
++#if PNG_LIBPNG_VER > 10399
++ longjmp(png_jmpbuf(png_ptr), 1);
++#else
++ longjmp(png_ptr->jmpbuf, 1);
++#endif
+
+ // row_bytes is the width x number of channels x (bit-depth / 8)
++#if PNG_LIBPNG_VER > 10399
++ row_pointers = new BYTE[png_get_rowbytes(png_ptr,info_ptr) + 8];
++#else
+ row_pointers = new BYTE[info_ptr->rowbytes + 8];
++#endif
+
+ // turn on interlace handling
+ int number_passes = png_set_interlace_handling(png_ptr);
+@@ -221,8 +292,12 @@
+ SetCodecOption(0);
+ }
+
+- int chan_offset = info_ptr->bit_depth >> 3;
++ int chan_offset = _bit_depth >> 3;
++#if PNG_LIBPNG_VER > 10399
++ int pixel_offset = (_bit_depth * png_get_channels(png_ptr,info_ptr)) >> 3;
++#else
+ int pixel_offset = info_ptr->pixel_depth >> 3;
++#endif
+
+ for (int pass=0; pass < number_passes; pass++) {
+ iter.Upset();
+@@ -230,7 +305,12 @@
+ do {
+
+ // <vho> - handle cancel
+- if (info.nEscape) longjmp(png_ptr->jmpbuf, 1);
++ if (info.nEscape)
++#if PNG_LIBPNG_VER > 10399
++ longjmp(png_jmpbuf(png_ptr), 1);
++#else
++ longjmp(png_ptr->jmpbuf, 1);
++#endif
+
+ #if CXIMAGE_SUPPORT_ALPHA // <vho>
+ if (AlphaIsValid()) {
+@@ -241,7 +321,7 @@
+ BYTE* prow= iter.GetRow(ay);
+
+ //recover data from previous scan
+- if (info_ptr->interlace_type && pass>0 && pass!=7){
++ if (_interlace_type && pass>0 && pass!=7){
+ for(ax=0;ax<head.biWidth;ax++){
+ long px = ax * pixel_offset;
+ if (channels == 2){
+@@ -278,10 +358,14 @@
+ #endif // CXIMAGE_SUPPORT_ALPHA // vho
+ {
+ //recover data from previous scan
+- if (info_ptr->interlace_type && pass>0){
++ if (_interlace_type && pass>0){
++#if PNG_LIBPNG_VER > 10399
++ iter.GetRow(row_pointers, png_get_rowbytes(png_ptr,info_ptr));
++#else
+ iter.GetRow(row_pointers, info_ptr->rowbytes);
++#endif
+ //re-expand buffer for images with bit depth > 8
+- if (info_ptr->bit_depth > 8){
++ if (_bit_depth > 8){
+ for(long ax=(head.biWidth*channels-1);ax>=0;ax--)
+ row_pointers[ax*chan_offset] = row_pointers[ax];
+ }
+@@ -291,15 +375,19 @@
+ png_read_row(png_ptr, row_pointers, NULL);
+
+ //shrink 16 bit depth images down to 8 bits
+- if (info_ptr->bit_depth > 8){
++ if (_bit_depth > 8){
+ for(long ax=0;ax<(head.biWidth*channels);ax++)
+ row_pointers[ax] = row_pointers[ax*chan_offset];
+ }
+
+ //copy the pixels
++#if PNG_LIBPNG_VER > 10399
++ iter.SetRow(row_pointers, png_get_rowbytes(png_ptr,info_ptr));
++#else
+ iter.SetRow(row_pointers, info_ptr->rowbytes);
++#endif
+ //<DP> expand 2 bpp images only in the last pass
+- if (info_ptr->bit_depth==2 && pass==(number_passes-1))
++ if (_bit_depth==2 && pass==(number_passes-1))
+ expand2to4bpp(iter.GetRow());
+
+ //go on
+@@ -361,9 +449,13 @@
+ /* Set error handling. REQUIRED if you aren't supplying your own
+ * error hadnling functions in the png_create_write_struct() call.
+ */
++#if PNG_LIBPNG_VER > 10399
++ if (setjmp(png_jmpbuf(png_ptr))){
++#else
+ if (setjmp(png_ptr->jmpbuf)){
+ /* If we get here, we had a problem reading the file */
+ if (info_ptr->palette) free(info_ptr->palette);
++#endif
+ png_destroy_write_struct(&png_ptr, (png_infopp)&info_ptr);
+ cx_throw("Error saving PNG file");
+ }
+@@ -372,9 +464,23 @@
+ //png_init_io(png_ptr, hFile);
+
+ // use custom I/O functions
+- png_set_write_fn(png_ptr,hFile,/*(png_rw_ptr)*/user_write_data,/*(png_flush_ptr)*/user_flush_data);
++ png_set_write_fn(png_ptr,hFile,/*(png_rw_ptr)*/user_write_data,/*(png_flush_ptr)*/user_flush_data);
+
+ /* set the file information here */
++#if PNG_LIBPNG_VER > 10399
++ /* use variables to hold the values so it isnt necessary to png_get them later */
++ png_uint_32 _width,_height;
++ int _bit_depth,_color_type,_interlace_type,_compression_type,_filter_type;
++ png_byte _channels,_pixel_depth;
++
++ _width = GetWidth();
++ _height = GetHeight();
++ _pixel_depth = (BYTE)GetBpp();
++ _channels = (GetBpp()>8) ? (BYTE)3: (BYTE)1;
++ _bit_depth = (BYTE)(GetBpp()/_channels);
++ _compression_type = PNG_COMPRESSION_TYPE_DEFAULT;
++ _filter_type = PNG_FILTER_TYPE_DEFAULT;
++#else
+ info_ptr->width = GetWidth();
+ info_ptr->height = GetHeight();
+ info_ptr->pixel_depth = (BYTE)GetBpp();
+@@ -382,13 +488,22 @@
+ info_ptr->bit_depth = (BYTE)(GetBpp()/info_ptr->channels);
+ info_ptr->compression_type = info_ptr->filter_type = 0;
+ info_ptr->valid = 0;
++#endif
+
+ switch(GetCodecOption(CXIMAGE_FORMAT_PNG)){
+ case 1:
++#if PNG_LIBPNG_VER > 10399
++ _interlace_type = PNG_INTERLACE_ADAM7;
++#else
+ info_ptr->interlace_type = PNG_INTERLACE_ADAM7;
++#endif
+ break;
+ default:
++#if PNG_LIBPNG_VER > 10399
++ _interlace_type = PNG_INTERLACE_NONE;
++#else
+ info_ptr->interlace_type = PNG_INTERLACE_NONE;
++#endif
+ }
+
+ /* set compression level */
+@@ -398,22 +513,47 @@
+
+ if (GetNumColors()){
+ if (bGrayScale){
++#if PNG_LIBPNG_VER > 10399
++ _color_type = PNG_COLOR_TYPE_GRAY;
++#else
+ info_ptr->color_type = PNG_COLOR_TYPE_GRAY;
++#endif
+ } else {
++#if PNG_LIBPNG_VER > 10399
++ _color_type = PNG_COLOR_TYPE_PALETTE;
++#else
+ info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;
++#endif
+ }
+ } else {
++#if PNG_LIBPNG_VER > 10399
++ _color_type = PNG_COLOR_TYPE_RGB;
++#else
+ info_ptr->color_type = PNG_COLOR_TYPE_RGB;
++#endif
+ }
+ #if CXIMAGE_SUPPORT_ALPHA
+ if (AlphaIsValid()){
++#if PNG_LIBPNG_VER > 10399
++ _color_type |= PNG_COLOR_MASK_ALPHA;
++ _channels++;
++ _bit_depth = 8;
++ _pixel_depth += 8;
++#else
+ info_ptr->color_type |= PNG_COLOR_MASK_ALPHA;
+ info_ptr->channels++;
+ info_ptr->bit_depth = 8;
+ info_ptr->pixel_depth += 8;
++#endif
+ }
+ #endif
+
++#if PNG_LIBPNG_VER > 10399
++ /* set the header here, since we're done modifying these values */
++ png_set_IHDR(png_ptr,info_ptr,_width,_height,_bit_depth,_color_type,_interlace_type,
++ _compression_type,_filter_type);
++#endif
++
+ /* set background */
+ png_color_16 image_background={ 0, 255, 255, 255, 0 };
+ RGBQUAD tc = GetTransColor();
+@@ -427,22 +567,24 @@
+ /* set metrics */
+ png_set_pHYs(png_ptr, info_ptr, head.biXPelsPerMeter, head.biYPelsPerMeter, PNG_RESOLUTION_METER);
+
++#if PNG_LIBPNG_VER <= 10399
+ png_set_IHDR(png_ptr, info_ptr, info_ptr->width, info_ptr->height, info_ptr->bit_depth,
+ info_ptr->color_type, info_ptr->interlace_type,
+ PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
++#endif
+
+ //<DP> simple transparency
+ if (info.nBkgndIndex >= 0){
+- info_ptr->num_trans = 1;
+- info_ptr->valid |= PNG_INFO_tRNS;
+ #if PNG_LIBPNG_VER > 10399
+- info_ptr->trans_alpha = trans;
+- info_ptr->trans_color.index = (BYTE)info.nBkgndIndex;
+- info_ptr->trans_color.red = tc.rgbRed;
+- info_ptr->trans_color.green = tc.rgbGreen;
+- info_ptr->trans_color.blue = tc.rgbBlue;
+- info_ptr->trans_color.gray = info_ptr->trans_color.index;
++ png_color_16 _trans_color;
++ _trans_color.index = (BYTE)info.nBkgndIndex;
++ _trans_color.red = tc.rgbRed;
++ _trans_color.green = tc.rgbGreen;
++ _trans_color.blue = tc.rgbBlue;
++ _trans_color.gray = _trans_color.index;
+ #else
++ info_ptr->num_trans = 1;
++ info_ptr->valid |= PNG_INFO_tRNS;
+ info_ptr->trans = trans;
+ info_ptr->trans_values.index = (BYTE)info.nBkgndIndex;
+ info_ptr->trans_values.red = tc.rgbRed;
+@@ -454,34 +596,53 @@
+ // the transparency indexes start from 0 for non grayscale palette
+ if (!bGrayScale && head.biClrUsed && info.nBkgndIndex)
+ SwapIndex(0,(BYTE)info.nBkgndIndex);
++
++#if PNG_LIBPNG_VER > 10399
++ png_set_tRNS(png_ptr,info_ptr,(png_bytep)trans,1,&_trans_color);
++#endif
+ }
+
+ /* set the palette if there is one */
++#if PNG_LIBPNG_VER > 10399
++ png_colorp _palette;
++#endif
+ if (GetPalette()){
++#if PNG_LIBPNG_VER <= 10399
+ if (!bGrayScale){
+ info_ptr->valid |= PNG_INFO_PLTE;
+ }
++#endif
+
+ int nc = GetClrImportant();
+ if (nc==0) nc = GetNumColors();
+
++ // copy the palette colors
++#if PNG_LIBPNG_VER > 10399
++ _palette = new png_color[nc];
++#else
++ info_ptr->palette = new png_color[nc];
++ info_ptr->num_palette = (png_uint_16) nc;
++#endif
++ for (int i=0; i<nc; i++)
++#if PNG_LIBPNG_VER > 10399
++ GetPaletteColor(i, &_palette[i].red, &_palette[i].green, &_palette[i].blue);
++
++ png_set_PLTE(png_ptr,info_ptr,_palette,nc);
++#else
++ GetPaletteColor(i, &info_ptr->palette[i].red, &info_ptr->palette[i].green, &info_ptr->palette[i].blue);
++#endif
++
+ if (info.bAlphaPaletteEnabled){
+ for(WORD ip=0; ip<nc;ip++)
+ trans[ip]=GetPaletteColor((BYTE)ip).rgbReserved;
+- info_ptr->num_trans = (WORD)nc;
+- info_ptr->valid |= PNG_INFO_tRNS;
+ #if PNG_LIBPNG_VER > 10399
+- info_ptr->trans_alpha = trans;
++ png_set_tRNS(png_ptr,info_ptr,(png_bytep)trans,nc,NULL);
+ #else
++ info_ptr->num_trans = (WORD)nc;
++ info_ptr->valid |= PNG_INFO_tRNS;
+ info_ptr->trans = trans;
+ #endif
+ }
+-
+- // copy the palette colors
+- info_ptr->palette = new png_color[nc];
+- info_ptr->num_palette = (png_uint_16) nc;
+- for (int i=0; i<nc; i++)
+- GetPaletteColor(i, &info_ptr->palette[i].red, &info_ptr->palette[i].green, &info_ptr->palette[i].blue);
+ }
+
+ #if CXIMAGE_SUPPORT_ALPHA // <vho>
+@@ -495,8 +656,12 @@
+ } } }
+ #endif // CXIMAGE_SUPPORT_ALPHA // <vho>
+
++#if PNG_LIBPNG_VER > 10399
++ int row_size = max(info.dwEffWidth, (_width * _channels * _bit_depth / 8));
++#else
+ int row_size = max(info.dwEffWidth, info_ptr->width*info_ptr->channels*(info_ptr->bit_depth/8));
+ info_ptr->rowbytes = row_size;
++#endif
+ BYTE *row_pointers = new BYTE[row_size];
+
+ /* write the file information */
+@@ -514,7 +679,11 @@
+ if (AlphaIsValid()){
+ for (long ax=head.biWidth-1; ax>=0;ax--){
+ c = BlindGetPixelColor(ax,ay);
++#if PNG_LIBPNG_VER > 10399
++ int px = ax * _channels;
++#else
+ int px = ax * info_ptr->channels;
++#endif
+ if (!bGrayScale){
+ row_pointers[px++]=c.rgbRed;
+ row_pointers[px++]=c.rgbGreen;
+@@ -529,7 +698,11 @@
+ #endif //CXIMAGE_SUPPORT_ALPHA // <vho>
+ {
+ iter.GetRow(row_pointers, row_size);
++#if PNG_LIBPNG_VER > 10399
++ if (_color_type == PNG_COLOR_TYPE_RGB) //HACK BY OP
++#else
+ if (info_ptr->color_type == PNG_COLOR_TYPE_RGB) //HACK BY OP
++#endif
+ RGBtoBGR(row_pointers, row_size);
+ png_write_row(png_ptr, row_pointers);
+ }
+@@ -546,9 +719,14 @@
+ png_write_end(png_ptr, info_ptr);
+
+ /* if you malloced the palette, free it here */
++#if PNG_LIBPNG_VER > 10399
++ if (_palette){
++ delete [] (_palette);
++#else
+ if (info_ptr->palette){
+ delete [] (info_ptr->palette);
+ info_ptr->palette = NULL;
++#endif
+ }
+
+ /* clean up after the write, and free any memory allocated */
diff --git a/media-tv/xbmc/files/xbmc-10.1~beta1-jack.patch b/media-tv/xbmc/files/xbmc-10.1~beta1-jack.patch
new file mode 100644
index 0000000..9d8b888
--- /dev/null
+++ b/media-tv/xbmc/files/xbmc-10.1~beta1-jack.patch
@@ -0,0 +1,1715 @@
+Index: xbmc/cores/AudioRenderers/jackblockingaudioio.hpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackblockingaudioio.hpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackblockingaudioio.hpp (revision 1806)
+@@ -0,0 +1,176 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#ifndef JACK_BLOCKING_AUDIO_IO_HPP
++#define JACK_BLOCKING_AUDIO_IO_HPP
++
++#include "jackaudioio.hpp"
++#include "jackringbuffer.hpp"
++
++namespace JackCpp {
++
++/**
++@class BlockingAudioIO
++
++@brief This is an class that provides a blocking read/write interface for Jack.
++
++This class has read/write methods that allow users to write audio to and read
++audio from a Jack client.
++
++@author Alex Norman
++
++*/
++ class BlockingAudioIO : public AudioIO {
++ public:
++ /**
++ @brief The Constructor
++ \param name string indicating the name of the jack client to create
++ \param inChans an unsigned integer indicating the number of default input ports to create
++ \param outChans an unsigned integer indicating the number of default output ports to create
++ \param inBufSize the size of the buffer that the jack callback fills for us to read with read
++ \param outBufSize the size of the buffer that we write to and the jack callback reads from
++ \param startServer a boolean indicating whether to start a jack server if one isn't already running
++ \sa AudioIO::AudioIO
++ */
++ BlockingAudioIO(std::string name,
++ unsigned int inChans = 2, unsigned int outChans = 2,
++ unsigned int inBufSize = 0, unsigned int outBufSize = 0,
++#ifdef __APPLE__
++ bool startServer = false)
++#else
++ bool startServer = true)
++#endif
++ throw(std::runtime_error);
++ virtual ~BlockingAudioIO();
++
++ /**
++ @brief Write to an output buffer
++
++ Writes val to the output[channel] (if it exists). If
++ output[channel] does not exist is silently fails otherwise it
++ sleeps until it can write output[channel]
++
++ \param channel the output chanel to write to
++ \param val the value to write to the channel
++ \sa tryWrite(unsigned int channel, jack_default_audio_sample_t val)
++ */
++ void write(unsigned int channel, jack_default_audio_sample_t val);
++
++ /**
++ @brief Try to write to an output buffer
++
++ Trys to write to output[channel] (if it exists). If it succeeds it
++ returns true. If it fails, because the buffer is full, it returns
++ false.
++
++ \param channel the output chanel to write to
++ \param val the value to write to the channel
++ \return true if it can write, false if it cannot
++ \sa write(unsigned int channel, jack_default_audio_sample_t val)
++ */
++ bool tryWrite(unsigned int channel, jack_default_audio_sample_t val);
++
++ /**
++ @brief Read from an input buffer.
++
++ Reads from input[channel] if it exists. If there is no input to
++ read it sleeps until there is.
++
++ \param channel the input chanel to read from
++ \return the value read from the input channel [will be zero if the channel does not exist]
++ \sa tryRead(unsigned int channel, jack_default_audio_sample_t &val)
++ */
++ jack_default_audio_sample_t read(unsigned int channel);
++
++ /**
++ @brief Try to read from to an input buffer
++
++ Trys to read from input[channel] (if it exists). If it succeeds it
++ returns true. If it fails, because the buffer is empty, it returns
++ false.
++
++ \param channel the output chanel to read from
++ \param val the value to read into (basically a return value)
++ \return true if it can read, false if it cannot
++ \sa read(unsigned int channel)
++ */
++ bool tryRead(unsigned int channel, jack_default_audio_sample_t &val);
++
++ //XXX reserve exists but is basically useless as you cannot
++ //add ports while the client is active
++ ///This method is useless at the moment.
++ virtual void reserveOutPorts(unsigned int num)
++ throw(std::runtime_error);
++ ///This method is useless at the moment.
++ virtual void reserveInPorts(unsigned int num)
++ throw(std::runtime_error);
++
++ /**
++ @brief Add an input port to our client
++
++ Unlike AudioIO, this currently cannot be called while the client is running.
++
++ \param name string the name of the port to add
++ \return the number of total input ports
++ \sa AudioIO::addInPort(std::string name)
++ */
++ virtual unsigned int addInPort(std::string name)
++ throw(std::runtime_error);
++ /**
++ @brief Add an output port to our client
++
++ Unlike AudioIO, this currently cannot be called while the client is running.
++
++ \param name string the name of the port to add
++ \return the number of total output ports
++ \sa AudioIO::addOutPort(std::string name)
++ */
++ virtual unsigned int addOutPort(std::string name)
++ throw(std::runtime_error);
++
++ protected:
++ /**
++ @brief This is the callback that processes our buffers.
++
++ This method takes the buffers we write to with "write" and writes
++ them out to the Jack bus. It also takes audio from the Jack bus
++ and uses that to fill the input buffers that we read from.
++
++ \param nframes the number frames to process
++ \param inBufs a vector of audio buffers
++ \param outBufs a vector of audio buffers
++ \return the actual number of frames processed
++ */
++ virtual int audioCallback(jack_nframes_t nframes,
++ std::vector<jack_default_audio_sample_t *> inBufs,
++ std::vector<jack_default_audio_sample_t *> outBufs);
++ private:
++ std::vector<RingBuffer<jack_default_audio_sample_t> *> mUserOutBuff;
++ std::vector<RingBuffer<jack_default_audio_sample_t> *> mUserInBuff;
++
++ //this is the size of the ring buffers that we alloc
++ const unsigned int mOutputBufferMaxSize;
++ const unsigned int mInputBufferMaxSize;
++ //this is the amount of free space we leave in the ring buffers
++ //this can decrease so that we'll have more latency but fewer glitches
++ unsigned int mOutputBufferFreeSize;
++ unsigned int mInputBufferFreeSize;
++ };
++}
++#endif
++
+Index: xbmc/cores/AudioRenderers/Makefile.in
+===================================================================
+--- xbmc/cores/AudioRenderers/Makefile.in (revision 1805)
++++ xbmc/cores/AudioRenderers/Makefile.in (revision 1806)
+@@ -4,11 +4,17 @@
+
+ ifeq ($(findstring osx,$(ARCH)), osx)
+ SRCS = \
++ jackaudioio.cpp \
++ jackblockingaudioio.cpp \
++ JackDirectSound.cpp \
+ NullDirectSound.cpp \
+ AudioRendererFactory.cpp \
+ CoreAudioRenderer.cpp
+ else
+ SRCS = \
++ jackaudioio.cpp \
++ jackblockingaudioio.cpp \
++ JackDirectSound.cpp \
+ NullDirectSound.cpp \
+ AudioRendererFactory.cpp \
+ ALSADirectSound.cpp \
+Index: xbmc/cores/AudioRenderers/JackDirectSound.cpp
+===================================================================
+--- xbmc/cores/AudioRenderers/JackDirectSound.cpp (revision 0)
++++ xbmc/cores/AudioRenderers/JackDirectSound.cpp (revision 1806)
+@@ -0,0 +1,243 @@
++/*
++ * Copyright (C) 2005-2008 Team XBMC
++ * http://www.xbmc.org
++ *
++ * This Program 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 2, or (at your option)
++ * any later version.
++ *
++ * This Program 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 XBMC; see the file COPYING. If not, write to
++ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
++ * http://www.gnu.org/copyleft/gpl.html
++ *
++ */
++
++#include "JackDirectSound.h"
++#include "AudioContext.h"
++#include "Application.h"
++#include "utils/log.h"
++#include "utils/TimeUtils.h"
++
++#define BUFFER CHUNKLEN * 20
++#define CHUNKLEN 512
++
++
++void CJackDirectSound::DoWork()
++{
++
++}
++
++//////////////////////////////////////////////////////////////////////
++// Construction/Destruction
++//////////////////////////////////////////////////////////////////////
++//***********************************************************************************************
++CJackDirectSound::CJackDirectSound()
++{
++ jackBuffer = 0;
++}
++bool CJackDirectSound::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, const char* strAudioCodec, bool bIsMusic, bool bPassthrough)
++{
++ CLog::Log(LOGERROR,"Jack.Initialize() - Channels: %i - SampleRate: %i - SampleBit: %i - Resample %s - Codec %s - IsMusic %s - IsPassthrough %s", iChannels, uiSamplesPerSec, uiBitsPerSample, bResample ? "true" : "false", strAudioCodec, bIsMusic ? "true" : "false", bPassthrough ? "true" : "false");
++ if (iChannels == 0)
++ iChannels = 2;
++
++ bool bAudioOnAllSpeakers(false);
++ g_audioContext.SetupSpeakerConfig(iChannels, bAudioOnAllSpeakers, bIsMusic);
++ g_audioContext.SetActiveDevice(CAudioContext::DIRECTSOUND_DEVICE);
++
++
++ jackBuffer = new JackCpp::BlockingAudioIO("XBMC.Jack", iChannels, iChannels);
++ jackBuffer->start();
++ for(int i = 0; i < iChannels; i++){
++ jackBuffer->connectToPhysical(i,i);
++ }
++ m_uiChannels = iChannels;
++
++ //g_application.m_guiDialogKaiToast.QueueNotification("Failed to initialize audio device", "Check your audiosettings"
++
++ m_timePerPacket = 1.0f / (float)(iChannels*(uiBitsPerSample/8) * uiSamplesPerSec);
++ m_packetsSent = 0;
++ m_paused = 0;
++ m_lastUpdate = CTimeUtils::GetTimeMS();
++ return true;
++}
++
++//***********************************************************************************************
++CJackDirectSound::~CJackDirectSound()
++{
++ Deinitialize();
++}
++
++
++//***********************************************************************************************
++bool CJackDirectSound::Deinitialize()
++{
++ CLog::Log(LOGERROR,"Jack.Deinitialize");
++ if (jackBuffer) {
++ for(int i = 0; i < m_uiChannels; i++){
++ jackBuffer->disconnectOutPort(i);
++ }
++ jackBuffer->close();
++ //TODO: Cannot delete jackBuffer, otherwise will crash.
++ //delete jackBuffer;
++ }
++ jackBuffer = 0;
++
++ g_audioContext.SetActiveDevice(CAudioContext::DEFAULT_DEVICE);
++ return true;
++}
++
++void CJackDirectSound::Flush()
++{
++ m_lastUpdate = CTimeUtils::GetTimeMS();
++ m_packetsSent = 0;
++ Pause();
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::Pause()
++{
++ m_paused = true;
++ return true;
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::Resume()
++{
++ m_paused = false;
++ return true;
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::Stop()
++{
++ Flush();
++ return true;
++}
++
++//***********************************************************************************************
++long CJackDirectSound::GetCurrentVolume() const
++{
++ return m_nCurrentVolume;
++}
++
++//***********************************************************************************************
++void CJackDirectSound::Mute(bool bMute)
++{
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::SetCurrentVolume(long nVolume)
++{
++ m_nCurrentVolume = nVolume;
++ return true;
++}
++
++
++//***********************************************************************************************
++unsigned int CJackDirectSound::GetSpace()
++{
++ Update();
++
++ if(BUFFER > m_packetsSent)
++ return (int)BUFFER - m_packetsSent;
++ else
++ return 0;
++}
++
++//***********************************************************************************************
++unsigned int CJackDirectSound::AddPackets(const void* data, unsigned int len)
++{
++ if (m_paused)
++ return 0;
++ Update();
++
++ int add = ( len / GetChunkLen() ) * GetChunkLen();
++ m_packetsSent += add;
++
++ CLog::Log(LOGERROR,"Jack.AddPackets() len=%d, add=%d", len, add);
++
++ if (jackBuffer){
++ short* pSamples = (short*)data;
++ for (int i=0; i< add/sizeof(short)/m_uiChannels; i++){
++ for(unsigned int j = 0; j < m_uiChannels; j++){
++ jackBuffer->write(j, (float) pSamples[i*m_uiChannels + j] / 32768.0);
++ }
++ }
++ }
++
++ return add;
++}
++
++//***********************************************************************************************
++float CJackDirectSound::GetDelay()
++{
++ Update();
++
++ return m_timePerPacket * (float)m_packetsSent + 0.4;
++}
++
++float CJackDirectSound::GetCacheTime()
++{
++ return GetDelay();
++}
++
++//***********************************************************************************************
++unsigned int CJackDirectSound::GetChunkLen()
++{
++ return (int)CHUNKLEN;
++}
++//***********************************************************************************************
++int CJackDirectSound::SetPlaySpeed(int iSpeed)
++{
++ return 0;
++}
++
++void CJackDirectSound::RegisterAudioCallback(IAudioCallback *pCallback)
++{
++}
++
++void CJackDirectSound::UnRegisterAudioCallback()
++{
++}
++
++void CJackDirectSound::WaitCompletion()
++{
++ while(m_packetsSent > 0)
++ Update();
++}
++
++void CJackDirectSound::SwitchChannels(int iAudioStream, bool bAudioOnAllSpeakers)
++{
++ return ;
++}
++
++void CJackDirectSound::Update()
++{
++ long currentTime = CTimeUtils::GetTimeMS();
++ long deltaTime = (currentTime - m_lastUpdate);
++
++ if (m_paused)
++ {
++ m_lastUpdate += deltaTime;
++ return;
++ }
++
++ double d = (double)deltaTime / 1000.0f;
++
++ if (currentTime != m_lastUpdate)
++ {
++ double i = (d / (double)m_timePerPacket);
++ m_packetsSent -= (long)i;
++ if (m_packetsSent < 0)
++ m_packetsSent = 0;
++ m_lastUpdate = currentTime;
++ }
++}
+Index: xbmc/cores/AudioRenderers/JackDirectSound.h
+===================================================================
+--- xbmc/cores/AudioRenderers/JackDirectSound.h (revision 0)
++++ xbmc/cores/AudioRenderers/JackDirectSound.h (revision 1806)
+@@ -0,0 +1,79 @@
++/*
++ * Copyright (C) 2005-2008 Team XBMC
++ * http://www.xbmc.org
++ *
++ * This Program 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 2, or (at your option)
++ * any later version.
++ *
++ * This Program 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 XBMC; see the file COPYING. If not, write to
++ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
++ * http://www.gnu.org/copyleft/gpl.html
++ *
++ */
++
++#ifndef __JACK_DIRECT_SOUND_H__
++#define __JACK_DIRECT_SOUND_H__
++
++#if _MSC_VER > 1000
++#pragma once
++#endif // _MSC_VER > 1000
++
++#include "IAudioRenderer.h"
++#include "IAudioCallback.h"
++
++#include "jackblockingaudioio.hpp"
++
++extern void RegisterAudioCallback(IAudioCallback* pCallback);
++extern void UnRegisterAudioCallback();
++
++class CJackDirectSound : public IAudioRenderer
++{
++public:
++ virtual void UnRegisterAudioCallback();
++ virtual void RegisterAudioCallback(IAudioCallback* pCallback);
++ virtual unsigned int GetChunkLen();
++ virtual float GetDelay();
++ virtual float GetCacheTime();
++ CJackDirectSound();
++ virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, const char* strAudioCodec = "", bool bIsMusic=false, bool bPassthrough = false);
++ virtual ~CJackDirectSound();
++
++ virtual unsigned int AddPackets(const void* data, unsigned int len);
++ virtual unsigned int GetSpace();
++ virtual bool Deinitialize();
++ virtual bool Pause();
++ virtual bool Stop();
++ virtual bool Resume();
++
++ virtual long GetCurrentVolume() const;
++ virtual void Mute(bool bMute);
++ virtual bool SetCurrentVolume(long nVolume);
++ virtual int SetPlaySpeed(int iSpeed);
++ virtual void WaitCompletion();
++ virtual void DoWork();
++ virtual void SwitchChannels(int iAudioStream, bool bAudioOnAllSpeakers);
++
++ virtual void Flush();
++private:
++ long m_nCurrentVolume;
++
++ float m_timePerPacket;
++ int m_packetsSent;
++ bool m_paused;
++ long m_lastUpdate;
++
++ int m_uiChannels;
++ JackCpp::BlockingAudioIO* jackBuffer;
++
++ void Update();
++};
++
++#endif
+Index: xbmc/cores/AudioRenderers/jackaudioio.cpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackaudioio.cpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackaudioio.cpp (revision 1806)
+@@ -0,0 +1,475 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#include "jackaudioio.hpp"
++#include <iostream>
++#include <errno.h>
++#include <sstream>
++#include <algorithm>
++
++template <typename T>
++std::string ToString(T aValue){
++ std::stringstream ss;
++ ss << aValue;
++ return ss.str();
++}
++
++/* callback for jack's error messages */
++static void error_callback (const char *msg) {
++ std::cerr << "Jack:" << msg << std::endl;
++ std::cerr.flush();
++}
++
++static void shutdown_callback (void *arg) {
++ return ((JackCpp::AudioIO *)arg)->jackShutdownCallback();
++}
++
++void JackCpp::AudioIO::jackShutdownCallback(){
++ std::cerr << std::endl << "jack has shutdown" << std::endl;
++}
++
++int JackCpp::AudioIO::jackProcessCallback(jack_nframes_t nframes, void *arg){
++ JackCpp::AudioIO* callbackjackobject = (AudioIO * )arg;
++ return callbackjackobject->jackToClassAudioCallback(nframes);
++}
++
++int JackCpp::AudioIO::jackToClassAudioCallback(jack_nframes_t nframes){
++ //read in commands
++ while(mCmdBuffer.getReadSpace() > 0){
++ cmd_t cmd;
++ mCmdBuffer.read(cmd);
++ switch(cmd){
++ case add_in_port:
++ //we will have tested that we have this capacity, so we resize the buffer
++ //to include the new port
++ mJackInBuf.resize(mJackInBuf.size() + 1);
++ mNumInputPorts++;
++ break;
++ case add_out_port:
++ //we will have tested that we have this capacity, so we resize the buffer
++ //to include the new port
++ mJackOutBuf.resize(mJackOutBuf.size() + 1);
++ mNumOutputPorts++;
++ break;
++ }
++ }
++
++ //get the input and output buffers
++ for(unsigned int i = 0; i < mNumInputPorts; i++)
++ mJackInBuf[i] = (jack_default_audio_sample_t *) jack_port_get_buffer ( mInputPorts[i], nframes);
++ for(unsigned int i = 0; i < mNumOutputPorts; i++)
++ mJackOutBuf[i] = (jack_default_audio_sample_t *) jack_port_get_buffer ( mOutputPorts[i], nframes);
++
++ return audioCallback(nframes, mJackInBuf, mJackOutBuf);
++}
++
++JackCpp::AudioIO::AudioIO(std::string name, unsigned int inPorts, unsigned int outPorts, bool startServer)
++ throw(std::runtime_error) : mCmdBuffer(256,true)
++{
++ jack_options_t jack_open_options = JackNullOption;
++
++ if(startServer == false)
++ jack_open_options = JackNoStartServer;
++
++ mJackState = notActive;
++
++ //set the error callback
++ jack_set_error_function (error_callback);
++
++ /* try to become a client of the JACK server */
++ if ((mJackClient = jack_client_open (name.c_str(), jack_open_options, NULL)) == 0) {
++ throw std::runtime_error("cannot create client jack server not running?");
++ }
++#ifdef __APPLE__
++ else {
++ // because the mac version of jack is being totally LAME
++ sleep(2);
++ }
++#endif
++
++ //set the shutdown callback
++ jack_on_shutdown (mJackClient, shutdown_callback, this);
++
++ //allocate ports
++ if (inPorts > 0){
++ for(unsigned int i = 0; i < inPorts; i++){
++ std::string portname = "input";
++ portname.append(ToString(i));
++ mInputPorts.push_back(
++ jack_port_register (mJackClient, portname.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0));
++ mPortNames.push_back(portname);
++ }
++ //reserve the data for the jack callback buffers
++ for(unsigned int i = 0; i < mInputPorts.size(); i++)
++ mJackInBuf.push_back(NULL);
++ }
++ if (outPorts > 0){
++ for(unsigned int i = 0; i < outPorts; i++){
++ std::string portname = "output";
++ portname.append(ToString(i));
++ mOutputPorts.push_back(
++ jack_port_register (mJackClient, portname.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0));
++ mPortNames.push_back(portname);
++ }
++ //reserve the data for the jack callback buffers
++ for(unsigned int i = 0; i < mOutputPorts.size(); i++)
++ mJackOutBuf.push_back(NULL);
++ }
++
++ //set up the callback
++ if(0 != jack_set_process_callback (mJackClient, JackCpp::AudioIO::jackProcessCallback, this))
++ throw std::runtime_error("cannot register process callback");
++}
++
++
++JackCpp::AudioIO::~AudioIO(){
++ //make sure to deactiveate the client if we need to
++ switch(mJackState){
++ case active:
++ stop();
++ close();
++ break;
++ case notActive:
++ close();
++ break;
++ default:
++ break;
++ //do nothing
++ }
++}
++
++bool JackCpp::AudioIO::portExists(std::string name){
++ //see if the port name exists
++ std::vector<std::string>::iterator it;
++ it = std::find(mPortNames.begin(),mPortNames.end(), name);
++ if (it != mPortNames.end())
++ return true;
++ else
++ return false;
++}
++
++void JackCpp::AudioIO::reserveOutPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ if(getState() == active)
++ throw std::runtime_error("reserving ports while the client is running is not supported yet.");
++ mOutputPorts.reserve(num);
++ mJackOutBuf.reserve(num);
++}
++
++void JackCpp::AudioIO::reserveInPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ if(getState() == active)
++ throw std::runtime_error("reserving ports while the client is running is not supported yet.");
++ mInputPorts.reserve(num);
++ mJackInBuf.reserve(num);
++}
++
++unsigned int JackCpp::AudioIO::inPorts(){
++ return mInputPorts.size();
++}
++
++unsigned int JackCpp::AudioIO::outPorts(){
++ return mOutputPorts.size();
++}
++
++unsigned int JackCpp::AudioIO::addInPort(std::string name)
++ throw(std::runtime_error)
++{
++ if (mJackState == active && mInputPorts.size() == mInputPorts.capacity())
++ throw std::runtime_error("trying to add input ports while the client is running and there are not reserved ports");
++
++ if(portExists(name)){
++ std::string ret_string("cannot register new inport: ");
++ ret_string.append(name);
++ ret_string.append(" port already exists with that name");
++ throw std::runtime_error(ret_string);
++ }
++
++ //allocate the item in the vector
++ jack_port_t * newPort = jack_port_register (mJackClient, name.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
++ if(newPort == NULL){
++ std::string ret_string("cannot register new inport: ");
++ ret_string.append(name);
++ throw std::runtime_error(ret_string);
++ }
++ mInputPorts.push_back(newPort);
++ mPortNames.push_back(name);
++
++ //if we're active then send a command indicating this change
++ if (mJackState == active) {
++ //loop while there isn't space to write
++ while(mCmdBuffer.getWriteSpace() == 0);
++ mCmdBuffer.write(add_in_port);
++ } else
++ mJackInBuf.push_back(NULL);
++
++ return mInputPorts.size() - 1;
++}
++
++//add an output port, if we are active then deactivate and reactivate after
++//maybe we can do this more intelligently in the future?
++unsigned int JackCpp::AudioIO::addOutPort(std::string name)
++ throw(std::runtime_error)
++{
++ if (mJackState == active && mOutputPorts.size() == mOutputPorts.capacity())
++ throw std::runtime_error("trying to add output ports while the client is running and there are not reserved ports");
++
++ if(portExists(name)){
++ std::string ret_string("cannot register new outport: ");
++ ret_string.append(name);
++ ret_string.append(" port already exists with that name");
++ throw std::runtime_error(ret_string);
++ }
++
++ //allocate the item in the vector
++ jack_port_t * newPort = jack_port_register (mJackClient, name.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
++ if(newPort == NULL){
++ std::string ret_string("cannot register new outport: ");
++ ret_string.append(name);
++ throw std::runtime_error(ret_string);
++ }
++ mOutputPorts.push_back(newPort);
++ mPortNames.push_back(name);
++
++ //if we're active then send a command indicating this change
++ if (mJackState == active) {
++ //loop while there isn't space to write
++ while(mCmdBuffer.getWriteSpace() == 0);
++ mCmdBuffer.write(add_out_port);
++ } else
++ mJackOutBuf.push_back(NULL);
++
++ return mOutputPorts.size() - 1;
++}
++
++void JackCpp::AudioIO::connectTo(unsigned int index, std::string destPortName)
++ throw(std::range_error, std::runtime_error)
++{
++ int connect_ret;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if(index < mOutputPorts.size()){
++ connect_ret = jack_connect(mJackClient, jack_port_name(mOutputPorts[index]), destPortName.c_str());
++ if(connect_ret != 0 && connect_ret != EEXIST){
++ std::string ret_string("cannot connect source: ");
++ ret_string.append(jack_port_name(mOutputPorts[index]));
++ ret_string.append(" to dest: ");
++ ret_string.append(destPortName);
++ ret_string.append(" does dest exist?");
++ throw std::range_error(ret_string);
++ }
++ } else
++ throw std::range_error("outport index out of range");
++}
++
++void JackCpp::AudioIO::connectFrom(unsigned int index, std::string sourcePortName)
++ throw(std::range_error, std::runtime_error)
++{
++ int connect_ret;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if(index < mInputPorts.size()){
++ connect_ret = jack_connect(mJackClient, sourcePortName.c_str(), jack_port_name(mInputPorts[index]));
++ if(connect_ret != 0 && connect_ret != EEXIST){
++ std::string ret_string("cannot connect source: ");
++ ret_string.append(sourcePortName);
++ ret_string.append(" to dest: ");
++ ret_string.append(jack_port_name(mInputPorts[index]));
++ ret_string.append(" does source exist?");
++ throw std::range_error(ret_string);
++ }
++ } else
++ throw std::range_error("inport index out of range");
++}
++
++//XXX should the "free" free the names that these ports point too as well?
++void JackCpp::AudioIO::connectToPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error)
++{
++ const char **ports;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if (index > mOutputPorts.size())
++ throw std::range_error("outport index out of range");
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsInput);
++ if(ports == NULL){
++ throw std::range_error("no physical inports to connect to");
++ }
++ //make sure the port exists
++ for(unsigned int i = 0; i <= physical_index; i++){
++ if(ports[i] == NULL){
++ free(ports);
++ throw std::range_error("physical inport index out of range");
++ }
++ }
++ connectTo(index, ports[physical_index]);
++ free(ports);
++}
++
++//XXX should the "free" free the names that these ports point too as well?
++void JackCpp::AudioIO::connectFromPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error)
++{
++ const char **ports;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if (index > mInputPorts.size())
++ throw std::range_error("inport index out of range");
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsOutput);
++ if(ports == NULL){
++ throw std::range_error("no physical outports to connect to");
++ }
++ //make sure the port exists
++ for(unsigned int i = 0; i <= physical_index; i++){
++ if(ports[i] == NULL){
++ free(ports);
++ throw std::range_error("physical outport index out of range");
++ }
++ }
++ connectFrom(index, ports[physical_index]);
++ free(ports);
++}
++
++void JackCpp::AudioIO::disconnectInPort(unsigned int index)
++ throw(std::range_error, std::runtime_error)
++{
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before disconnecting ports");
++ if(index < mInputPorts.size()){
++ jack_port_disconnect(mJackClient, mInputPorts[index]);
++ } else
++ throw std::range_error("inport index out of range");
++}
++
++void JackCpp::AudioIO::disconnectOutPort(unsigned int index)
++ throw(std::range_error, std::runtime_error)
++{
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before disconnecting ports");
++ if(index < mOutputPorts.size()){
++ jack_port_disconnect(mJackClient, mOutputPorts[index]);
++ } else
++ throw std::range_error("outport index out of range");
++}
++
++unsigned int JackCpp::AudioIO::numConnectionsInPort(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mInputPorts.size())
++ return jack_port_connected(mInputPorts[index]);
++ else
++ throw std::range_error("inport index out of range");
++}
++
++unsigned int JackCpp::AudioIO::numConnectionsOutPort(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mOutputPorts.size())
++ return jack_port_connected(mOutputPorts[index]);
++ else
++ throw std::range_error("outport index out of range");
++}
++
++unsigned int JackCpp::AudioIO::numPhysicalDestinationPorts(){
++ const char **ports;
++ unsigned int cnt = 0;
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsInput);
++ if (ports != NULL){
++ while(ports[cnt] != NULL)
++ cnt++;
++ free(ports);
++ return cnt;
++ } else
++ return 0;
++}
++
++unsigned int JackCpp::AudioIO::numPhysicalSourcePorts(){
++ const char **ports;
++ unsigned int cnt = 0;
++ //XXX is this really correct? we should get the naming right...
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsOutput);
++ if (ports != NULL){
++ while(ports[cnt] != NULL)
++ cnt++;
++ free(ports);
++ return cnt;
++ } else
++ return 0;
++}
++
++std::string JackCpp::AudioIO::getInputPortName(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mInputPorts.size())
++ return std::string(jack_port_name(mInputPorts[index]));
++ else
++ throw std::range_error("inport index out of range");
++
++}
++std::string JackCpp::AudioIO::getOutputPortName(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mOutputPorts.size())
++ return std::string(jack_port_name(mOutputPorts[index]));
++ else
++ throw std::range_error("outport index out of range");
++}
++
++void JackCpp::AudioIO::start()
++ throw(std::runtime_error)
++{
++ //update these so that the callback can use them
++ if(mJackState != active){
++ mNumOutputPorts = mOutputPorts.size();
++ mNumInputPorts = mInputPorts.size();
++ }
++ if (jack_activate(mJackClient) != 0)
++ throw std::runtime_error("cannot activate the client");
++ mJackState = active;
++}
++
++void JackCpp::AudioIO::stop()
++ throw(std::runtime_error)
++{
++ if (jack_deactivate(mJackClient) != 0)
++ throw std::runtime_error("cannot deactivate the client");
++ mJackState = notActive;
++}
++
++void JackCpp::AudioIO::close()
++ throw(std::runtime_error)
++{
++ if (jack_client_close(mJackClient) != 0)
++ throw std::runtime_error("cannot close the client");
++ mJackState = closed;
++}
++
++float JackCpp::AudioIO::getCpuLoad(){
++ return jack_cpu_load(mJackClient);
++}
++
++jack_nframes_t JackCpp::AudioIO::getSampleRate(){
++ return jack_get_sample_rate(mJackClient);
++}
++
++jack_nframes_t JackCpp::AudioIO::getBufferSize(){
++ return jack_get_buffer_size(mJackClient);
++}
++
+Index: xbmc/cores/AudioRenderers/jackaudioio.hpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackaudioio.hpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackaudioio.hpp (revision 1806)
+@@ -0,0 +1,299 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#ifndef JACK_AUDIO_IO_H
++#define JACK_AUDIO_IO_H
++
++extern "C" {
++#include <jack/jack.h>
++#include <jack/types.h>
++#include <jack/ringbuffer.h>
++}
++#include <string>
++#include <vector>
++#include <stdexcept>
++#include "jackringbuffer.hpp"
++
++namespace JackCpp {
++
++/**
++@class AudioIO
++
++@brief This is an abstract class that provides a jack callback method.
++
++This abstract class wraps the Jack Audio IO functionality needed for basic
++audio input and output. In order to create your own jack client you simply
++make your own class that inherits from this class and overloads audioCallback.
++In that method you can get audio in from jack and write it out to jack.
++
++@author Alex Norman
++
++*/
++
++ class AudioIO {
++ public:
++ ///An enum indicating the state of our jack client
++ enum jack_state_t {notActive,active,closed};
++ ///A typedef so so that we don't always have to write std::vector<jack_default_audio_sample_t *>
++ typedef std::vector<jack_default_audio_sample_t *> audioBufVector;
++ private:
++ //commands
++ enum cmd_t {add_in_port, add_out_port};
++ RingBuffer<cmd_t> mCmdBuffer;
++ /* the client */
++ jack_client_t *mJackClient;
++ // an vector of i/o ports
++ std::vector<jack_port_t *> mOutputPorts;
++ std::vector<jack_port_t *> mInputPorts;
++
++ //these are only accessed by the callback [once it is activated]
++ //they will usually be equal mOutputPorts.size() etc, except when
++ //a new port is added, before the callback
++ unsigned int mNumOutputPorts;
++ unsigned int mNumInputPorts;
++
++ //these items are used for grabbing data for the jack callback
++ audioBufVector mJackInBuf;
++ audioBufVector mJackOutBuf;
++ //this stores the state of this jack process [active,notActive,closed]
++ jack_state_t mJackState;
++ //this prepares the input/output buffers to be passed
++ //to the callback function that a user writes
++ //XXX should this be virtual?
++ inline int jackToClassAudioCallback(jack_nframes_t nframes);
++ std::vector<std::string> mPortNames;
++ protected:
++ /**
++ @brief The method that the user must overload in order to actually process jack data.
++ \param nframes the number frames to process
++ \param inBufs a vector of audio buffers
++ \param outBufs a vector of audio buffers
++ \return 0 on success, non zero on error, which will cause jack to remove the client from the process graph
++ */
++ virtual int audioCallback(jack_nframes_t nframes,
++ audioBufVector inBufs,
++ audioBufVector outBufs) = 0;
++
++ public:
++ /**
++ @brief The Constructor
++ \param name string indicating the name of the jack client to create
++ \param inPorts an unsigned integer indicating the number of default input ports to create
++ \param outPorts an unsigned integer indicating the number of default output ports to create
++ \param startServer a boolean indicating whether to start a jack server if one isn't already running
++ \sa audioCallback
++ */
++ AudioIO(std::string name,
++ unsigned int inPorts = 0,
++ unsigned int outPorts = 2,
++#ifdef __APPLE__
++ bool startServer = false)
++#else
++ bool startServer = true)
++#endif
++ throw(std::runtime_error);
++
++ ///The Destructor
++ virtual ~AudioIO();
++
++ /**
++ @brief The callback that jack actually gets [static].
++
++ This is a static method that the C jack callback calls, users
++ should not need to override this method.
++
++ \param nframes the number frames to process
++ \param arg a pointer to our AudioIO object
++ \return the actual number of frames processed
++ \sa audioCallback
++ */
++ static int jackProcessCallback(jack_nframes_t nframes, void *arg);
++
++ ///See if a port with the name "name" exists for our client
++ bool portExists(std::string name);
++
++ /**
++ @brief Reserve output ports
++
++ This method must be called before the client is started. This
++ reserves a number of ports so that they can be safely created while
++ the client is running. The number indicates the maximum number of ports
++ that can be created while the client is running. This number includes
++ those ports that a have already been created, so if you've already created
++ x ports and you reserve y ports total, you can only create y - x ports while
++ the client is running.
++ \param num an integer indicating the number of output ports to reserve
++ */
++ virtual void reserveOutPorts(unsigned int num)
++ throw(std::runtime_error);
++ /**
++ @brief Reserve input ports
++
++ This method must be called before the client is started. This
++ reserves a number of ports so that they can be safely created while
++ the client is running. The number indicates the maximum number of ports
++ that can be created while the client is running. This number includes
++ those ports that a have already been created, so if you've already created
++ x ports and you reserve y ports total, you can only create y - x ports while
++ the client is running.
++ \param num an integer indicating the number of input ports to reserve
++ */
++ virtual void reserveInPorts(unsigned int num)
++ throw(std::runtime_error);
++
++ ///Start the jack client.
++ void start()
++ throw(std::runtime_error);
++ ///Stop the jack client.
++ void stop()
++ throw(std::runtime_error);
++ ///Close the jack client.
++ void close()
++ throw(std::runtime_error);
++
++ ///Get the number of jack input ports
++ unsigned int inPorts();
++ ///Get the number of jack output ports
++ unsigned int outPorts();
++
++ /**
++ @brief Add a jack input port to our client
++ \param name string the name of the port to add
++ \return the number of total input ports
++ */
++ virtual unsigned int addInPort(std::string name)
++ throw(std::runtime_error);
++ /**
++ @brief Add a jack output port to our client
++ \param name string the name of the port to add
++ \return the number of total output ports
++ */
++ virtual unsigned int addOutPort(std::string name)
++ throw(std::runtime_error);
++
++ /**
++ @brief Connect our output to a jack client's source port.
++ \param index the index of our output port to connect from.
++ \param sourcePortName the client:port name to connect to
++ */
++ void connectTo(unsigned int index, std::string sourcePortName)
++ throw(std::range_error, std::runtime_error);
++ /**
++ @brief Connect our input to a jack client's destination port.
++ \param index the index of our input port to connect to
++ \param destPortName the client:port name to connect from
++ */
++ void connectFrom(unsigned int index, std::string destPortName)
++ throw(std::range_error, std::runtime_error);
++ /**
++ @brief Connect our output port to a physical output port
++ \param index the index of our output port to connect from
++ \param physical_index the physical output port index to connect to
++ */
++ void connectToPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error);
++ /**
++ @brief Connect our input port to a physical input port
++ \param index the index of our input port to connect to
++ \param physical_index the physical input port index to connect from
++ */
++ void connectFromPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error);
++ ///Disconnect input port from all connections
++ void disconnectInPort(unsigned int index)
++ throw(std::range_error, std::runtime_error);
++ ///Disconnect output port from all connections
++ void disconnectOutPort(unsigned int index)
++ throw(std::range_error, std::runtime_error);
++
++ ///Get the number of connections to our input port
++ unsigned int numConnectionsInPort(unsigned int index)
++ throw(std::range_error);
++ ///Get the number of connections to our output port
++ unsigned int numConnectionsOutPort(unsigned int index)
++ throw(std::range_error);
++
++ /**
++ @brief Get the number of physical audio input ports
++ These are ports that can send audio to your client
++ */
++ unsigned int numPhysicalSourcePorts();
++ /**
++ @brief Get the number of physical audio output ports
++ These are ports that your client can send audio to
++ */
++ unsigned int numPhysicalDestinationPorts();
++
++ ///Get the name of our client's input port
++ std::string getInputPortName(unsigned int index)
++ throw(std::range_error);
++ ///Get the name of our client's output port
++ std::string getOutputPortName(unsigned int index)
++ throw(std::range_error);
++
++ /**
++ @brief This method is called when Jack shuts down.
++ Override if you want to do something when jack shuts down.
++ */
++ virtual void jackShutdownCallback();
++ /**
++ @brief The current CPU load estimated by JACK
++
++ This is a running average of the time it takes to execute a full
++ process cycle for all clients as a percentage of the real time
++ available per cycle determined by the buffer size and sample rate.
++ */
++ float getCpuLoad();
++ ///Get the sample rate
++ jack_nframes_t getSampleRate();
++ ///Get the jack buffer size
++ jack_nframes_t getBufferSize();
++ ///Check to see if the client is running in real time mode
++ bool isRealTime(){return jack_is_realtime(mJackClient);}
++ /**
++ @brief Get the name of our client
++
++ This might not be exactly the same as the name we provided to the
++ constructor
++
++ \return a string indicating the name of our client.
++ */
++ std::string getName(){return std::string(jack_get_client_name(mJackClient));}
++ ///Get the state of our Jack client.
++ jack_state_t getState(){return mJackState;}
++
++ /**
++ @brief Get an estimate of the current time in frames
++
++ This is a running counter, no significance should be attached to
++ its value, but it can be compared to a previously returned value.
++ \return an estimate of the current time in frames.
++ */
++ jack_nframes_t getFrameTime(){return jack_frame_time(mJackClient);}
++
++ /**
++ @brief Get the time in frames since the JACK server began the current process cycle
++
++ \return the time in frames that has passed since the JACK server began the current process cycle
++ */
++ jack_nframes_t getFramesSinceCycleStart(){return jack_frames_since_cycle_start(mJackClient);}
++ };
++
++}
++
++#endif
+Index: xbmc/cores/AudioRenderers/jackringbuffer.hpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackringbuffer.hpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackringbuffer.hpp (revision 1806)
+@@ -0,0 +1,205 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#ifndef JACK_RING_BUFFER_CLASS_H
++#define JACK_RING_BUFFER_CLASS_H
++
++#ifndef NULL
++#define NULL 0
++#endif
++
++extern "C" {
++#include <jack/ringbuffer.h>
++}
++#include <string.h>
++
++namespace JackCpp {
++
++template<typename Type>
++
++/**
++@class RingBuffer
++
++@brief This template class wraps the Jack lock-free ringbuffer.
++
++This class creates a lock-free ring buffer that accepts a specific data type.
++
++The key attribute of a ringbuffer is that it can be safely accessed by two
++threads simultaneously -- one reading from the buffer and the other writing to
++it -- without using any synchronization or mutual exclusion primitives. For
++this to work correctly, there can only be a single reader and a single writer
++thread. Their identities cannot be interchanged.
++
++@author Alex Norman
++
++*/
++ class RingBuffer {
++ private:
++ jack_ringbuffer_t *mRingBufferPtr;
++ size_t mLength;
++ public:
++ /**
++ @brief The Constructor
++ \param size the number of items that the ring buffer should be able to hold
++ \param mlock a boolean indicating whether or not the ring buffer should be locked in memory
++ */
++ RingBuffer(size_t size, bool mlock = false){
++ mLength = size;
++ mRingBufferPtr = jack_ringbuffer_create(mLength * sizeof(Type));
++
++ //should we lock the memory for the ring buffer?
++ if(mlock)
++ jack_ringbuffer_mlock(mRingBufferPtr);
++ }
++ ///The Destructor
++ ~RingBuffer(){
++ if(mRingBufferPtr != NULL)
++ jack_ringbuffer_free(mRingBufferPtr);
++ }
++
++ ///Get the total length of the ring buffer
++ size_t length(){
++ return mLength;
++ }
++
++ ///Get the number of items that can be read at this time
++ size_t getReadSpace(){
++ return jack_ringbuffer_read_space(mRingBufferPtr) / sizeof(Type);
++ }
++
++ ///Get the number of items that can be written at this time
++ size_t getWriteSpace(){
++ return jack_ringbuffer_write_space(mRingBufferPtr) / sizeof(Type);
++ }
++
++ /**
++ @brief Read into dest
++
++ Read from the buffer into a variable.
++
++ \param dest an item to be read into
++ */
++ void read(Type &dest){
++ if(getReadSpace() <= 0){
++ //throw error!!!!
++ return;
++ }
++ jack_ringbuffer_read(mRingBufferPtr, (char *)&dest, sizeof(Type));
++ }
++
++ /**
++ @brief Read into an array
++
++ Read from the buffer into an array.
++
++ \param dest an array to be read into
++ \param cnt the number of elements to read into this array
++ */
++ void read(Type *dest, unsigned cnt){
++ jack_ringbuffer_data_t readVec[2];
++ unsigned int read_size = sizeof(Type) * cnt;
++ if(getReadSpace() <= 0){
++ //throw error!!!!
++ return;
++ }
++
++ //get the readvector
++ jack_ringbuffer_get_read_vector(mRingBufferPtr, readVec);
++
++ //if the first vector has enough data then just read from there
++ if(readVec[0].len >= read_size){
++ memcpy(dest, readVec[0].buf, read_size);
++ } else {
++ //if the first vector is zero length then read from the second
++ if(readVec[0].len == 0){
++ memcpy(dest, readVec[1].buf, read_size);
++ } else {
++ //this gets tricky
++ char * byterep = (char *)dest;
++ //first read the data out of the first vector
++ memcpy(byterep, readVec[0].buf, readVec[0].len);
++ //then read the rest out of the second
++ memcpy(byterep + readVec[0].len, readVec[1].buf, read_size - readVec[0].len);
++ }
++ }
++ //advance the read pointer
++ jack_ringbuffer_read_advance(mRingBufferPtr, read_size);
++ }
++
++ /**
++ @brief Write into the ring buffer.
++
++ \param src the value to write
++ */
++ void write(Type src){
++ if(getWriteSpace() <= 0){
++ //throw error!!!!
++ return;
++ }
++ jack_ringbuffer_write(mRingBufferPtr, (char *)&src, sizeof(Type));
++ }
++
++ /**
++ @brief Write an array of values into the ring buffer.
++
++ \param src an array of values to write
++ \param cnt the number of items from the array to write into our buffer
++ */
++ void write(Type *src, unsigned int cnt){
++ jack_ringbuffer_data_t writeVec[2];
++ unsigned int write_size = sizeof(Type) * cnt;
++ if(cnt > getWriteSpace()){
++ //throw error!!!!
++ return;
++ }
++
++ //get the write vector
++ jack_ringbuffer_get_write_vector(mRingBufferPtr, writeVec);
++ //if there is enough room in the first vector then just write there
++ if(writeVec[0].len >= write_size){
++ memcpy(writeVec[0].buf,src,write_size);
++ } else {
++ //if there is no room in the first vector then write into the second
++ if(writeVec[0].len == 0){
++ memcpy(writeVec[1].buf,src,write_size);
++ } else {
++ //this is more tricky, we have to split the data up
++ char * byterep = (char *)src;
++ //copy the first chunck
++ memcpy(writeVec[0].buf, byterep, writeVec[0].len);
++ //copy the second chunck
++ memcpy(writeVec[1].buf, byterep + writeVec[0].len, write_size - writeVec[0].len);
++ }
++ }
++ jack_ringbuffer_write_advance(mRingBufferPtr, write_size);
++ }
++
++ /**
++ @brief Reset
++
++ This is not threadsafe. This resets the read and write pointers,
++ effectively making the ring buffer empty.
++ */
++ void reset(){
++ jack_ringbuffer_reset(mRingBufferPtr);
++ }
++ };
++
++}
++
++#endif
+Index: xbmc/cores/AudioRenderers/jackblockingaudioio.cpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackblockingaudioio.cpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackblockingaudioio.cpp (revision 1806)
+@@ -0,0 +1,181 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#include "jackblockingaudioio.hpp"
++#include <unistd.h>
++#define MIN(x,y) ((x) < (y) ? (x) : (y))
++
++#if 0
++#include <iostream>
++using std::cerr;
++using std::cout;
++using std::endl;
++#endif
++
++//allocate input and output buffers
++JackCpp::BlockingAudioIO::BlockingAudioIO(std::string name,
++ unsigned int inChans, unsigned int outChans,
++ unsigned int inBufSize, unsigned int outBufSize,
++ bool startServer) throw(std::runtime_error):
++ AudioIO(name, inChans, outChans, startServer),
++ mOutputBufferMaxSize((unsigned int)getSampleRate()),
++ mInputBufferMaxSize((unsigned int)getSampleRate())
++{
++ if(inBufSize < 2 * getBufferSize())
++ inBufSize = 2 * getBufferSize();
++ else if (inBufSize > mInputBufferMaxSize)
++ inBufSize = mInputBufferMaxSize;
++ if(outBufSize < 2 * getBufferSize())
++ outBufSize = 2 * getBufferSize();
++ else if (outBufSize > mOutputBufferMaxSize)
++ outBufSize = mOutputBufferMaxSize;
++
++ //set the amount of the ring buffer that we leave free
++ mOutputBufferFreeSize = mOutputBufferMaxSize - outBufSize;
++ mInputBufferFreeSize = mInputBufferMaxSize - inBufSize;
++
++ //create input and output buffers, give them extra space to work with and memory lock them
++ for(unsigned int i = 0; i < outChans; i++)
++ mUserOutBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mOutputBufferMaxSize, true));
++ for(unsigned int i = 0; i < inChans; i++)
++ mUserInBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mInputBufferMaxSize, true));
++}
++
++//clean up the buffers we allocated
++JackCpp::BlockingAudioIO::~BlockingAudioIO(){
++ stop();
++ for(std::vector<RingBuffer<jack_default_audio_sample_t> *>::iterator it = mUserOutBuff.begin();
++ it != mUserOutBuff.end(); it++)
++ delete *it;
++ for(std::vector<RingBuffer<jack_default_audio_sample_t> *>::iterator it = mUserInBuff.begin();
++ it != mUserInBuff.end(); it++)
++ delete *it;
++}
++
++//wait until we can write, then write
++void JackCpp::BlockingAudioIO::write(unsigned int channel, jack_default_audio_sample_t val){
++ if (channel >= outPorts())
++ return;
++ while(mUserOutBuff[channel]->getWriteSpace() <= mOutputBufferFreeSize)
++ usleep(10);
++ mUserOutBuff[channel]->write(val);
++}
++
++//we we can write then write, otherwise return false
++bool JackCpp::BlockingAudioIO::tryWrite(unsigned int channel, jack_default_audio_sample_t val){
++ if (channel < outPorts() && mUserOutBuff[channel]->getWriteSpace() > mOutputBufferFreeSize){
++ mUserOutBuff[channel]->write(val);
++ return true;
++ }
++ return false;
++}
++
++//wait until we can read, then return the value
++jack_default_audio_sample_t JackCpp::BlockingAudioIO::read(unsigned int channel){
++ jack_default_audio_sample_t val;
++ if (channel >= inPorts())
++ return 0;
++ while(mUserInBuff[channel]->getReadSpace() == 0)
++ usleep(10);
++ mUserInBuff[channel]->read(val);
++ return val;
++}
++
++//if we cannot read then return false, otherwise, read and return true
++bool JackCpp::BlockingAudioIO::tryRead(unsigned int channel, jack_default_audio_sample_t &val){
++ if (channel >= inPorts() || mUserInBuff[channel]->getReadSpace() == 0)
++ return false;
++ mUserInBuff[channel]->read(val);
++ return true;
++}
++
++void JackCpp::BlockingAudioIO::reserveOutPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ AudioIO::reserveOutPorts(num);
++ mUserOutBuff.reserve(num);
++}
++
++void JackCpp::BlockingAudioIO::reserveInPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ AudioIO::reserveInPorts(num);
++ mUserInBuff.reserve(num);
++}
++
++unsigned int JackCpp::BlockingAudioIO::addInPort(std::string name)
++ throw(std::runtime_error)
++{
++ unsigned int ret;
++ if(getState() == AudioIO::active)
++ throw std::runtime_error("JackCpp::BlockingAudioIO::addInPort not allowed while the client is active");
++ ret = AudioIO::addInPort(name);
++ mUserInBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mInputBufferMaxSize, true));
++ return ret;
++}
++
++unsigned int JackCpp::BlockingAudioIO::addOutPort(std::string name)
++ throw(std::runtime_error)
++{
++ unsigned int ret;
++ if(getState() == AudioIO::active)
++ throw std::runtime_error("JackCpp::BlockingAudioIO::addOutPort not allowed while the client is active");
++ ret = AudioIO::addOutPort(name);
++ mUserOutBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mOutputBufferMaxSize, true));
++ return ret;
++}
++
++//read the jack input buffers into the user input buffers
++//write the user output buffers into the jack output buffers
++int JackCpp::BlockingAudioIO::audioCallback(jack_nframes_t nframes,
++ audioBufVector inBufs,
++ audioBufVector outBufs){
++
++ //only try to write as much as we have space to write
++ unsigned int numToWrite = MIN(mUserOutBuff[0]->getReadSpace(), nframes);
++ unsigned int numToRead = MIN(mUserInBuff[0]->getWriteSpace(), nframes);
++
++ //make sure we leave the amount of free space we require
++ if(mUserInBuff[0]->getWriteSpace() - numToRead < mInputBufferFreeSize)
++ numToRead = mUserInBuff[0]->getWriteSpace() - mInputBufferFreeSize;
++
++ //if (numToWrite < nframes)
++ //cerr << "oops" << endl;
++
++ //read get inputs
++ for(unsigned int i = 0; i < inPorts(); i++){
++ for(unsigned int j = 0; j < numToRead; j++)
++ mUserInBuff[i]->write(inBufs[i][j]);
++ }
++
++ //write output
++ for(unsigned int i = 0; i < outPorts(); i++){
++ for(unsigned int j = 0; j < numToWrite; j++){
++ jack_default_audio_sample_t val;
++ mUserOutBuff[i]->read(val);
++ outBufs[i][j] = val;
++ }
++ //write zeros for the rest
++ for(unsigned int j = numToWrite; j < nframes; j++)
++ outBufs[i][j] = 0.0;
++ //if(numToWrite < nframes)
++ //cerr << "oops" << endl;
++ }
++ return 0;
++}
++
diff --git a/media-tv/xbmc/files/xbmc-10.1~beta1-jack.patch.bkp b/media-tv/xbmc/files/xbmc-10.1~beta1-jack.patch.bkp
new file mode 100644
index 0000000..23933a9
--- /dev/null
+++ b/media-tv/xbmc/files/xbmc-10.1~beta1-jack.patch.bkp
@@ -0,0 +1,1738 @@
+Index: xbmc/cores/AudioRenderers/jackblockingaudioio.hpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackblockingaudioio.hpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackblockingaudioio.hpp (revision 1806)
+@@ -0,0 +1,176 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#ifndef JACK_BLOCKING_AUDIO_IO_HPP
++#define JACK_BLOCKING_AUDIO_IO_HPP
++
++#include "jackaudioio.hpp"
++#include "jackringbuffer.hpp"
++
++namespace JackCpp {
++
++/**
++@class BlockingAudioIO
++
++@brief This is an class that provides a blocking read/write interface for Jack.
++
++This class has read/write methods that allow users to write audio to and read
++audio from a Jack client.
++
++@author Alex Norman
++
++*/
++ class BlockingAudioIO : public AudioIO {
++ public:
++ /**
++ @brief The Constructor
++ \param name string indicating the name of the jack client to create
++ \param inChans an unsigned integer indicating the number of default input ports to create
++ \param outChans an unsigned integer indicating the number of default output ports to create
++ \param inBufSize the size of the buffer that the jack callback fills for us to read with read
++ \param outBufSize the size of the buffer that we write to and the jack callback reads from
++ \param startServer a boolean indicating whether to start a jack server if one isn't already running
++ \sa AudioIO::AudioIO
++ */
++ BlockingAudioIO(std::string name,
++ unsigned int inChans = 2, unsigned int outChans = 2,
++ unsigned int inBufSize = 0, unsigned int outBufSize = 0,
++#ifdef __APPLE__
++ bool startServer = false)
++#else
++ bool startServer = true)
++#endif
++ throw(std::runtime_error);
++ virtual ~BlockingAudioIO();
++
++ /**
++ @brief Write to an output buffer
++
++ Writes val to the output[channel] (if it exists). If
++ output[channel] does not exist is silently fails otherwise it
++ sleeps until it can write output[channel]
++
++ \param channel the output chanel to write to
++ \param val the value to write to the channel
++ \sa tryWrite(unsigned int channel, jack_default_audio_sample_t val)
++ */
++ void write(unsigned int channel, jack_default_audio_sample_t val);
++
++ /**
++ @brief Try to write to an output buffer
++
++ Trys to write to output[channel] (if it exists). If it succeeds it
++ returns true. If it fails, because the buffer is full, it returns
++ false.
++
++ \param channel the output chanel to write to
++ \param val the value to write to the channel
++ \return true if it can write, false if it cannot
++ \sa write(unsigned int channel, jack_default_audio_sample_t val)
++ */
++ bool tryWrite(unsigned int channel, jack_default_audio_sample_t val);
++
++ /**
++ @brief Read from an input buffer.
++
++ Reads from input[channel] if it exists. If there is no input to
++ read it sleeps until there is.
++
++ \param channel the input chanel to read from
++ \return the value read from the input channel [will be zero if the channel does not exist]
++ \sa tryRead(unsigned int channel, jack_default_audio_sample_t &val)
++ */
++ jack_default_audio_sample_t read(unsigned int channel);
++
++ /**
++ @brief Try to read from to an input buffer
++
++ Trys to read from input[channel] (if it exists). If it succeeds it
++ returns true. If it fails, because the buffer is empty, it returns
++ false.
++
++ \param channel the output chanel to read from
++ \param val the value to read into (basically a return value)
++ \return true if it can read, false if it cannot
++ \sa read(unsigned int channel)
++ */
++ bool tryRead(unsigned int channel, jack_default_audio_sample_t &val);
++
++ //XXX reserve exists but is basically useless as you cannot
++ //add ports while the client is active
++ ///This method is useless at the moment.
++ virtual void reserveOutPorts(unsigned int num)
++ throw(std::runtime_error);
++ ///This method is useless at the moment.
++ virtual void reserveInPorts(unsigned int num)
++ throw(std::runtime_error);
++
++ /**
++ @brief Add an input port to our client
++
++ Unlike AudioIO, this currently cannot be called while the client is running.
++
++ \param name string the name of the port to add
++ \return the number of total input ports
++ \sa AudioIO::addInPort(std::string name)
++ */
++ virtual unsigned int addInPort(std::string name)
++ throw(std::runtime_error);
++ /**
++ @brief Add an output port to our client
++
++ Unlike AudioIO, this currently cannot be called while the client is running.
++
++ \param name string the name of the port to add
++ \return the number of total output ports
++ \sa AudioIO::addOutPort(std::string name)
++ */
++ virtual unsigned int addOutPort(std::string name)
++ throw(std::runtime_error);
++
++ protected:
++ /**
++ @brief This is the callback that processes our buffers.
++
++ This method takes the buffers we write to with "write" and writes
++ them out to the Jack bus. It also takes audio from the Jack bus
++ and uses that to fill the input buffers that we read from.
++
++ \param nframes the number frames to process
++ \param inBufs a vector of audio buffers
++ \param outBufs a vector of audio buffers
++ \return the actual number of frames processed
++ */
++ virtual int audioCallback(jack_nframes_t nframes,
++ std::vector<jack_default_audio_sample_t *> inBufs,
++ std::vector<jack_default_audio_sample_t *> outBufs);
++ private:
++ std::vector<RingBuffer<jack_default_audio_sample_t> *> mUserOutBuff;
++ std::vector<RingBuffer<jack_default_audio_sample_t> *> mUserInBuff;
++
++ //this is the size of the ring buffers that we alloc
++ const unsigned int mOutputBufferMaxSize;
++ const unsigned int mInputBufferMaxSize;
++ //this is the amount of free space we leave in the ring buffers
++ //this can decrease so that we'll have more latency but fewer glitches
++ unsigned int mOutputBufferFreeSize;
++ unsigned int mInputBufferFreeSize;
++ };
++}
++#endif
++
+Index: xbmc/cores/AudioRenderers/Makefile.in
+===================================================================
+--- xbmc/cores/AudioRenderers/Makefile.in (revision 1805)
++++ xbmc/cores/AudioRenderers/Makefile.in (revision 1806)
+@@ -4,11 +4,17 @@
+
+ ifeq ($(findstring osx,$(ARCH)), osx)
+ SRCS = \
++ jackaudioio.cpp \
++ jackblockingaudioio.cpp \
++ JackDirectSound.cpp \
+ NullDirectSound.cpp \
+ AudioRendererFactory.cpp \
+ CoreAudioRenderer.cpp
+ else
+ SRCS = \
++ jackaudioio.cpp \
++ jackblockingaudioio.cpp \
++ JackDirectSound.cpp \
+ NullDirectSound.cpp \
+ AudioRendererFactory.cpp \
+ ALSADirectSound.cpp \
+Index: xbmc/cores/AudioRenderers/JackDirectSound.cpp
+===================================================================
+--- xbmc/cores/AudioRenderers/JackDirectSound.cpp (revision 0)
++++ xbmc/cores/AudioRenderers/JackDirectSound.cpp (revision 1806)
+@@ -0,0 +1,243 @@
++/*
++ * Copyright (C) 2005-2008 Team XBMC
++ * http://www.xbmc.org
++ *
++ * This Program 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 2, or (at your option)
++ * any later version.
++ *
++ * This Program 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 XBMC; see the file COPYING. If not, write to
++ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
++ * http://www.gnu.org/copyleft/gpl.html
++ *
++ */
++
++#include "JackDirectSound.h"
++#include "AudioContext.h"
++#include "Application.h"
++#include "utils/log.h"
++#include "utils/TimeUtils.h"
++
++#define BUFFER CHUNKLEN * 20
++#define CHUNKLEN 512
++
++
++void CJackDirectSound::DoWork()
++{
++
++}
++
++//////////////////////////////////////////////////////////////////////
++// Construction/Destruction
++//////////////////////////////////////////////////////////////////////
++//***********************************************************************************************
++CJackDirectSound::CJackDirectSound()
++{
++ jackBuffer = 0;
++}
++bool CJackDirectSound::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, const char* strAudioCodec, bool bIsMusic, bool bPassthrough)
++{
++ CLog::Log(LOGERROR,"Jack.Initialize() - Channels: %i - SampleRate: %i - SampleBit: %i - Resample %s - Codec %s - IsMusic %s - IsPassthrough %s", iChannels, uiSamplesPerSec, uiBitsPerSample, bResample ? "true" : "false", strAudioCodec, bIsMusic ? "true" : "false", bPassthrough ? "true" : "false");
++ if (iChannels == 0)
++ iChannels = 2;
++
++ bool bAudioOnAllSpeakers(false);
++ g_audioContext.SetupSpeakerConfig(iChannels, bAudioOnAllSpeakers, bIsMusic);
++ g_audioContext.SetActiveDevice(CAudioContext::DIRECTSOUND_DEVICE);
++
++
++ jackBuffer = new JackCpp::BlockingAudioIO("XBMC.Jack", iChannels, iChannels);
++ jackBuffer->start();
++ for(int i = 0; i < iChannels; i++){
++ jackBuffer->connectToPhysical(i,i);
++ }
++ m_uiChannels = iChannels;
++
++ //g_application.m_guiDialogKaiToast.QueueNotification("Failed to initialize audio device", "Check your audiosettings"
++
++ m_timePerPacket = 1.0f / (float)(iChannels*(uiBitsPerSample/8) * uiSamplesPerSec);
++ m_packetsSent = 0;
++ m_paused = 0;
++ m_lastUpdate = CTimeUtils::GetTimeMS();
++ return true;
++}
++
++//***********************************************************************************************
++CJackDirectSound::~CJackDirectSound()
++{
++ Deinitialize();
++}
++
++
++//***********************************************************************************************
++bool CJackDirectSound::Deinitialize()
++{
++ CLog::Log(LOGERROR,"Jack.Deinitialize");
++ if (jackBuffer) {
++ for(int i = 0; i < m_uiChannels; i++){
++ jackBuffer->disconnectOutPort(i);
++ }
++ jackBuffer->close();
++ //TODO: Cannot delete jackBuffer, otherwise will crash.
++ //delete jackBuffer;
++ }
++ jackBuffer = 0;
++
++ g_audioContext.SetActiveDevice(CAudioContext::DEFAULT_DEVICE);
++ return true;
++}
++
++void CJackDirectSound::Flush()
++{
++ m_lastUpdate = CTimeUtils::GetTimeMS();
++ m_packetsSent = 0;
++ Pause();
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::Pause()
++{
++ m_paused = true;
++ return true;
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::Resume()
++{
++ m_paused = false;
++ return true;
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::Stop()
++{
++ Flush();
++ return true;
++}
++
++//***********************************************************************************************
++long CJackDirectSound::GetCurrentVolume() const
++{
++ return m_nCurrentVolume;
++}
++
++//***********************************************************************************************
++void CJackDirectSound::Mute(bool bMute)
++{
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::SetCurrentVolume(long nVolume)
++{
++ m_nCurrentVolume = nVolume;
++ return true;
++}
++
++
++//***********************************************************************************************
++unsigned int CJackDirectSound::GetSpace()
++{
++ Update();
++
++ if(BUFFER > m_packetsSent)
++ return (int)BUFFER - m_packetsSent;
++ else
++ return 0;
++}
++
++//***********************************************************************************************
++unsigned int CJackDirectSound::AddPackets(const void* data, unsigned int len)
++{
++ if (m_paused)
++ return 0;
++ Update();
++
++ int add = ( len / GetChunkLen() ) * GetChunkLen();
++ m_packetsSent += add;
++
++ CLog::Log(LOGERROR,"Jack.AddPackets() len=%d, add=%d", len, add);
++
++ if (jackBuffer){
++ short* pSamples = (short*)data;
++ for (int i=0; i< add/sizeof(short)/m_uiChannels; i++){
++ for(unsigned int j = 0; j < m_uiChannels; j++){
++ jackBuffer->write(j, (float) pSamples[i*m_uiChannels + j] / 32768.0);
++ }
++ }
++ }
++
++ return add;
++}
++
++//***********************************************************************************************
++float CJackDirectSound::GetDelay()
++{
++ Update();
++
++ return m_timePerPacket * (float)m_packetsSent + 0.4;
++}
++
++float CJackDirectSound::GetCacheTime()
++{
++ return GetDelay();
++}
++
++//***********************************************************************************************
++unsigned int CJackDirectSound::GetChunkLen()
++{
++ return (int)CHUNKLEN;
++}
++//***********************************************************************************************
++int CJackDirectSound::SetPlaySpeed(int iSpeed)
++{
++ return 0;
++}
++
++void CJackDirectSound::RegisterAudioCallback(IAudioCallback *pCallback)
++{
++}
++
++void CJackDirectSound::UnRegisterAudioCallback()
++{
++}
++
++void CJackDirectSound::WaitCompletion()
++{
++ while(m_packetsSent > 0)
++ Update();
++}
++
++void CJackDirectSound::SwitchChannels(int iAudioStream, bool bAudioOnAllSpeakers)
++{
++ return ;
++}
++
++void CJackDirectSound::Update()
++{
++ long currentTime = CTimeUtils::GetTimeMS();
++ long deltaTime = (currentTime - m_lastUpdate);
++
++ if (m_paused)
++ {
++ m_lastUpdate += deltaTime;
++ return;
++ }
++
++ double d = (double)deltaTime / 1000.0f;
++
++ if (currentTime != m_lastUpdate)
++ {
++ double i = (d / (double)m_timePerPacket);
++ m_packetsSent -= (long)i;
++ if (m_packetsSent < 0)
++ m_packetsSent = 0;
++ m_lastUpdate = currentTime;
++ }
++}
+Index: xbmc/cores/AudioRenderers/AudioRendererFactory.cpp
+===================================================================
+--- xbmc/cores/AudioRenderers/AudioRendererFactory.cpp (revision 1805)
++++ xbmc/cores/AudioRenderers/AudioRendererFactory.cpp (revision 1806)
+@@ -24,6 +24,7 @@
+ #include "GUISettings.h"
+ #include "log.h"
+ #include "NullDirectSound.h"
++#include "JackDirectSound.h"
+
+ #ifdef HAS_PULSEAUDIO
+ #include "PulseAudioDirectSound.h"
+@@ -132,6 +133,10 @@
+
+ device = deviceString;
+
++//For Jack
++ audioSink = new CJackDirectSound();
++ ReturnOnValidInitialize();
++
+ /* First pass creation */
+ #ifdef HAS_PULSEAUDIO
+ audioSink = new CPulseAudioDirectSound();
+Index: xbmc/cores/AudioRenderers/JackDirectSound.h
+===================================================================
+--- xbmc/cores/AudioRenderers/JackDirectSound.h (revision 0)
++++ xbmc/cores/AudioRenderers/JackDirectSound.h (revision 1806)
+@@ -0,0 +1,79 @@
++/*
++ * Copyright (C) 2005-2008 Team XBMC
++ * http://www.xbmc.org
++ *
++ * This Program 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 2, or (at your option)
++ * any later version.
++ *
++ * This Program 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 XBMC; see the file COPYING. If not, write to
++ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
++ * http://www.gnu.org/copyleft/gpl.html
++ *
++ */
++
++#ifndef __JACK_DIRECT_SOUND_H__
++#define __JACK_DIRECT_SOUND_H__
++
++#if _MSC_VER > 1000
++#pragma once
++#endif // _MSC_VER > 1000
++
++#include "IAudioRenderer.h"
++#include "IAudioCallback.h"
++
++#include "jackblockingaudioio.hpp"
++
++extern void RegisterAudioCallback(IAudioCallback* pCallback);
++extern void UnRegisterAudioCallback();
++
++class CJackDirectSound : public IAudioRenderer
++{
++public:
++ virtual void UnRegisterAudioCallback();
++ virtual void RegisterAudioCallback(IAudioCallback* pCallback);
++ virtual unsigned int GetChunkLen();
++ virtual float GetDelay();
++ virtual float GetCacheTime();
++ CJackDirectSound();
++ virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, const char* strAudioCodec = "", bool bIsMusic=false, bool bPassthrough = false);
++ virtual ~CJackDirectSound();
++
++ virtual unsigned int AddPackets(const void* data, unsigned int len);
++ virtual unsigned int GetSpace();
++ virtual bool Deinitialize();
++ virtual bool Pause();
++ virtual bool Stop();
++ virtual bool Resume();
++
++ virtual long GetCurrentVolume() const;
++ virtual void Mute(bool bMute);
++ virtual bool SetCurrentVolume(long nVolume);
++ virtual int SetPlaySpeed(int iSpeed);
++ virtual void WaitCompletion();
++ virtual void DoWork();
++ virtual void SwitchChannels(int iAudioStream, bool bAudioOnAllSpeakers);
++
++ virtual void Flush();
++private:
++ long m_nCurrentVolume;
++
++ float m_timePerPacket;
++ int m_packetsSent;
++ bool m_paused;
++ long m_lastUpdate;
++
++ int m_uiChannels;
++ JackCpp::BlockingAudioIO* jackBuffer;
++
++ void Update();
++};
++
++#endif
+Index: xbmc/cores/AudioRenderers/jackaudioio.cpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackaudioio.cpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackaudioio.cpp (revision 1806)
+@@ -0,0 +1,475 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#include "jackaudioio.hpp"
++#include <iostream>
++#include <errno.h>
++#include <sstream>
++#include <algorithm>
++
++template <typename T>
++std::string ToString(T aValue){
++ std::stringstream ss;
++ ss << aValue;
++ return ss.str();
++}
++
++/* callback for jack's error messages */
++static void error_callback (const char *msg) {
++ std::cerr << "Jack:" << msg << std::endl;
++ std::cerr.flush();
++}
++
++static void shutdown_callback (void *arg) {
++ return ((JackCpp::AudioIO *)arg)->jackShutdownCallback();
++}
++
++void JackCpp::AudioIO::jackShutdownCallback(){
++ std::cerr << std::endl << "jack has shutdown" << std::endl;
++}
++
++int JackCpp::AudioIO::jackProcessCallback(jack_nframes_t nframes, void *arg){
++ JackCpp::AudioIO* callbackjackobject = (AudioIO * )arg;
++ return callbackjackobject->jackToClassAudioCallback(nframes);
++}
++
++int JackCpp::AudioIO::jackToClassAudioCallback(jack_nframes_t nframes){
++ //read in commands
++ while(mCmdBuffer.getReadSpace() > 0){
++ cmd_t cmd;
++ mCmdBuffer.read(cmd);
++ switch(cmd){
++ case add_in_port:
++ //we will have tested that we have this capacity, so we resize the buffer
++ //to include the new port
++ mJackInBuf.resize(mJackInBuf.size() + 1);
++ mNumInputPorts++;
++ break;
++ case add_out_port:
++ //we will have tested that we have this capacity, so we resize the buffer
++ //to include the new port
++ mJackOutBuf.resize(mJackOutBuf.size() + 1);
++ mNumOutputPorts++;
++ break;
++ }
++ }
++
++ //get the input and output buffers
++ for(unsigned int i = 0; i < mNumInputPorts; i++)
++ mJackInBuf[i] = (jack_default_audio_sample_t *) jack_port_get_buffer ( mInputPorts[i], nframes);
++ for(unsigned int i = 0; i < mNumOutputPorts; i++)
++ mJackOutBuf[i] = (jack_default_audio_sample_t *) jack_port_get_buffer ( mOutputPorts[i], nframes);
++
++ return audioCallback(nframes, mJackInBuf, mJackOutBuf);
++}
++
++JackCpp::AudioIO::AudioIO(std::string name, unsigned int inPorts, unsigned int outPorts, bool startServer)
++ throw(std::runtime_error) : mCmdBuffer(256,true)
++{
++ jack_options_t jack_open_options = JackNullOption;
++
++ if(startServer == false)
++ jack_open_options = JackNoStartServer;
++
++ mJackState = notActive;
++
++ //set the error callback
++ jack_set_error_function (error_callback);
++
++ /* try to become a client of the JACK server */
++ if ((mJackClient = jack_client_open (name.c_str(), jack_open_options, NULL)) == 0) {
++ throw std::runtime_error("cannot create client jack server not running?");
++ }
++#ifdef __APPLE__
++ else {
++ // because the mac version of jack is being totally LAME
++ sleep(2);
++ }
++#endif
++
++ //set the shutdown callback
++ jack_on_shutdown (mJackClient, shutdown_callback, this);
++
++ //allocate ports
++ if (inPorts > 0){
++ for(unsigned int i = 0; i < inPorts; i++){
++ std::string portname = "input";
++ portname.append(ToString(i));
++ mInputPorts.push_back(
++ jack_port_register (mJackClient, portname.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0));
++ mPortNames.push_back(portname);
++ }
++ //reserve the data for the jack callback buffers
++ for(unsigned int i = 0; i < mInputPorts.size(); i++)
++ mJackInBuf.push_back(NULL);
++ }
++ if (outPorts > 0){
++ for(unsigned int i = 0; i < outPorts; i++){
++ std::string portname = "output";
++ portname.append(ToString(i));
++ mOutputPorts.push_back(
++ jack_port_register (mJackClient, portname.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0));
++ mPortNames.push_back(portname);
++ }
++ //reserve the data for the jack callback buffers
++ for(unsigned int i = 0; i < mOutputPorts.size(); i++)
++ mJackOutBuf.push_back(NULL);
++ }
++
++ //set up the callback
++ if(0 != jack_set_process_callback (mJackClient, JackCpp::AudioIO::jackProcessCallback, this))
++ throw std::runtime_error("cannot register process callback");
++}
++
++
++JackCpp::AudioIO::~AudioIO(){
++ //make sure to deactiveate the client if we need to
++ switch(mJackState){
++ case active:
++ stop();
++ close();
++ break;
++ case notActive:
++ close();
++ break;
++ default:
++ break;
++ //do nothing
++ }
++}
++
++bool JackCpp::AudioIO::portExists(std::string name){
++ //see if the port name exists
++ std::vector<std::string>::iterator it;
++ it = std::find(mPortNames.begin(),mPortNames.end(), name);
++ if (it != mPortNames.end())
++ return true;
++ else
++ return false;
++}
++
++void JackCpp::AudioIO::reserveOutPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ if(getState() == active)
++ throw std::runtime_error("reserving ports while the client is running is not supported yet.");
++ mOutputPorts.reserve(num);
++ mJackOutBuf.reserve(num);
++}
++
++void JackCpp::AudioIO::reserveInPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ if(getState() == active)
++ throw std::runtime_error("reserving ports while the client is running is not supported yet.");
++ mInputPorts.reserve(num);
++ mJackInBuf.reserve(num);
++}
++
++unsigned int JackCpp::AudioIO::inPorts(){
++ return mInputPorts.size();
++}
++
++unsigned int JackCpp::AudioIO::outPorts(){
++ return mOutputPorts.size();
++}
++
++unsigned int JackCpp::AudioIO::addInPort(std::string name)
++ throw(std::runtime_error)
++{
++ if (mJackState == active && mInputPorts.size() == mInputPorts.capacity())
++ throw std::runtime_error("trying to add input ports while the client is running and there are not reserved ports");
++
++ if(portExists(name)){
++ std::string ret_string("cannot register new inport: ");
++ ret_string.append(name);
++ ret_string.append(" port already exists with that name");
++ throw std::runtime_error(ret_string);
++ }
++
++ //allocate the item in the vector
++ jack_port_t * newPort = jack_port_register (mJackClient, name.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
++ if(newPort == NULL){
++ std::string ret_string("cannot register new inport: ");
++ ret_string.append(name);
++ throw std::runtime_error(ret_string);
++ }
++ mInputPorts.push_back(newPort);
++ mPortNames.push_back(name);
++
++ //if we're active then send a command indicating this change
++ if (mJackState == active) {
++ //loop while there isn't space to write
++ while(mCmdBuffer.getWriteSpace() == 0);
++ mCmdBuffer.write(add_in_port);
++ } else
++ mJackInBuf.push_back(NULL);
++
++ return mInputPorts.size() - 1;
++}
++
++//add an output port, if we are active then deactivate and reactivate after
++//maybe we can do this more intelligently in the future?
++unsigned int JackCpp::AudioIO::addOutPort(std::string name)
++ throw(std::runtime_error)
++{
++ if (mJackState == active && mOutputPorts.size() == mOutputPorts.capacity())
++ throw std::runtime_error("trying to add output ports while the client is running and there are not reserved ports");
++
++ if(portExists(name)){
++ std::string ret_string("cannot register new outport: ");
++ ret_string.append(name);
++ ret_string.append(" port already exists with that name");
++ throw std::runtime_error(ret_string);
++ }
++
++ //allocate the item in the vector
++ jack_port_t * newPort = jack_port_register (mJackClient, name.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
++ if(newPort == NULL){
++ std::string ret_string("cannot register new outport: ");
++ ret_string.append(name);
++ throw std::runtime_error(ret_string);
++ }
++ mOutputPorts.push_back(newPort);
++ mPortNames.push_back(name);
++
++ //if we're active then send a command indicating this change
++ if (mJackState == active) {
++ //loop while there isn't space to write
++ while(mCmdBuffer.getWriteSpace() == 0);
++ mCmdBuffer.write(add_out_port);
++ } else
++ mJackOutBuf.push_back(NULL);
++
++ return mOutputPorts.size() - 1;
++}
++
++void JackCpp::AudioIO::connectTo(unsigned int index, std::string destPortName)
++ throw(std::range_error, std::runtime_error)
++{
++ int connect_ret;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if(index < mOutputPorts.size()){
++ connect_ret = jack_connect(mJackClient, jack_port_name(mOutputPorts[index]), destPortName.c_str());
++ if(connect_ret != 0 && connect_ret != EEXIST){
++ std::string ret_string("cannot connect source: ");
++ ret_string.append(jack_port_name(mOutputPorts[index]));
++ ret_string.append(" to dest: ");
++ ret_string.append(destPortName);
++ ret_string.append(" does dest exist?");
++ throw std::range_error(ret_string);
++ }
++ } else
++ throw std::range_error("outport index out of range");
++}
++
++void JackCpp::AudioIO::connectFrom(unsigned int index, std::string sourcePortName)
++ throw(std::range_error, std::runtime_error)
++{
++ int connect_ret;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if(index < mInputPorts.size()){
++ connect_ret = jack_connect(mJackClient, sourcePortName.c_str(), jack_port_name(mInputPorts[index]));
++ if(connect_ret != 0 && connect_ret != EEXIST){
++ std::string ret_string("cannot connect source: ");
++ ret_string.append(sourcePortName);
++ ret_string.append(" to dest: ");
++ ret_string.append(jack_port_name(mInputPorts[index]));
++ ret_string.append(" does source exist?");
++ throw std::range_error(ret_string);
++ }
++ } else
++ throw std::range_error("inport index out of range");
++}
++
++//XXX should the "free" free the names that these ports point too as well?
++void JackCpp::AudioIO::connectToPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error)
++{
++ const char **ports;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if (index > mOutputPorts.size())
++ throw std::range_error("outport index out of range");
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsInput);
++ if(ports == NULL){
++ throw std::range_error("no physical inports to connect to");
++ }
++ //make sure the port exists
++ for(unsigned int i = 0; i <= physical_index; i++){
++ if(ports[i] == NULL){
++ free(ports);
++ throw std::range_error("physical inport index out of range");
++ }
++ }
++ connectTo(index, ports[physical_index]);
++ free(ports);
++}
++
++//XXX should the "free" free the names that these ports point too as well?
++void JackCpp::AudioIO::connectFromPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error)
++{
++ const char **ports;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if (index > mInputPorts.size())
++ throw std::range_error("inport index out of range");
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsOutput);
++ if(ports == NULL){
++ throw std::range_error("no physical outports to connect to");
++ }
++ //make sure the port exists
++ for(unsigned int i = 0; i <= physical_index; i++){
++ if(ports[i] == NULL){
++ free(ports);
++ throw std::range_error("physical outport index out of range");
++ }
++ }
++ connectFrom(index, ports[physical_index]);
++ free(ports);
++}
++
++void JackCpp::AudioIO::disconnectInPort(unsigned int index)
++ throw(std::range_error, std::runtime_error)
++{
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before disconnecting ports");
++ if(index < mInputPorts.size()){
++ jack_port_disconnect(mJackClient, mInputPorts[index]);
++ } else
++ throw std::range_error("inport index out of range");
++}
++
++void JackCpp::AudioIO::disconnectOutPort(unsigned int index)
++ throw(std::range_error, std::runtime_error)
++{
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before disconnecting ports");
++ if(index < mOutputPorts.size()){
++ jack_port_disconnect(mJackClient, mOutputPorts[index]);
++ } else
++ throw std::range_error("outport index out of range");
++}
++
++unsigned int JackCpp::AudioIO::numConnectionsInPort(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mInputPorts.size())
++ return jack_port_connected(mInputPorts[index]);
++ else
++ throw std::range_error("inport index out of range");
++}
++
++unsigned int JackCpp::AudioIO::numConnectionsOutPort(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mOutputPorts.size())
++ return jack_port_connected(mOutputPorts[index]);
++ else
++ throw std::range_error("outport index out of range");
++}
++
++unsigned int JackCpp::AudioIO::numPhysicalDestinationPorts(){
++ const char **ports;
++ unsigned int cnt = 0;
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsInput);
++ if (ports != NULL){
++ while(ports[cnt] != NULL)
++ cnt++;
++ free(ports);
++ return cnt;
++ } else
++ return 0;
++}
++
++unsigned int JackCpp::AudioIO::numPhysicalSourcePorts(){
++ const char **ports;
++ unsigned int cnt = 0;
++ //XXX is this really correct? we should get the naming right...
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsOutput);
++ if (ports != NULL){
++ while(ports[cnt] != NULL)
++ cnt++;
++ free(ports);
++ return cnt;
++ } else
++ return 0;
++}
++
++std::string JackCpp::AudioIO::getInputPortName(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mInputPorts.size())
++ return std::string(jack_port_name(mInputPorts[index]));
++ else
++ throw std::range_error("inport index out of range");
++
++}
++std::string JackCpp::AudioIO::getOutputPortName(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mOutputPorts.size())
++ return std::string(jack_port_name(mOutputPorts[index]));
++ else
++ throw std::range_error("outport index out of range");
++}
++
++void JackCpp::AudioIO::start()
++ throw(std::runtime_error)
++{
++ //update these so that the callback can use them
++ if(mJackState != active){
++ mNumOutputPorts = mOutputPorts.size();
++ mNumInputPorts = mInputPorts.size();
++ }
++ if (jack_activate(mJackClient) != 0)
++ throw std::runtime_error("cannot activate the client");
++ mJackState = active;
++}
++
++void JackCpp::AudioIO::stop()
++ throw(std::runtime_error)
++{
++ if (jack_deactivate(mJackClient) != 0)
++ throw std::runtime_error("cannot deactivate the client");
++ mJackState = notActive;
++}
++
++void JackCpp::AudioIO::close()
++ throw(std::runtime_error)
++{
++ if (jack_client_close(mJackClient) != 0)
++ throw std::runtime_error("cannot close the client");
++ mJackState = closed;
++}
++
++float JackCpp::AudioIO::getCpuLoad(){
++ return jack_cpu_load(mJackClient);
++}
++
++jack_nframes_t JackCpp::AudioIO::getSampleRate(){
++ return jack_get_sample_rate(mJackClient);
++}
++
++jack_nframes_t JackCpp::AudioIO::getBufferSize(){
++ return jack_get_buffer_size(mJackClient);
++}
++
+Index: xbmc/cores/AudioRenderers/jackaudioio.hpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackaudioio.hpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackaudioio.hpp (revision 1806)
+@@ -0,0 +1,299 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#ifndef JACK_AUDIO_IO_H
++#define JACK_AUDIO_IO_H
++
++extern "C" {
++#include <jack/jack.h>
++#include <jack/types.h>
++#include <jack/ringbuffer.h>
++}
++#include <string>
++#include <vector>
++#include <stdexcept>
++#include "jackringbuffer.hpp"
++
++namespace JackCpp {
++
++/**
++@class AudioIO
++
++@brief This is an abstract class that provides a jack callback method.
++
++This abstract class wraps the Jack Audio IO functionality needed for basic
++audio input and output. In order to create your own jack client you simply
++make your own class that inherits from this class and overloads audioCallback.
++In that method you can get audio in from jack and write it out to jack.
++
++@author Alex Norman
++
++*/
++
++ class AudioIO {
++ public:
++ ///An enum indicating the state of our jack client
++ enum jack_state_t {notActive,active,closed};
++ ///A typedef so so that we don't always have to write std::vector<jack_default_audio_sample_t *>
++ typedef std::vector<jack_default_audio_sample_t *> audioBufVector;
++ private:
++ //commands
++ enum cmd_t {add_in_port, add_out_port};
++ RingBuffer<cmd_t> mCmdBuffer;
++ /* the client */
++ jack_client_t *mJackClient;
++ // an vector of i/o ports
++ std::vector<jack_port_t *> mOutputPorts;
++ std::vector<jack_port_t *> mInputPorts;
++
++ //these are only accessed by the callback [once it is activated]
++ //they will usually be equal mOutputPorts.size() etc, except when
++ //a new port is added, before the callback
++ unsigned int mNumOutputPorts;
++ unsigned int mNumInputPorts;
++
++ //these items are used for grabbing data for the jack callback
++ audioBufVector mJackInBuf;
++ audioBufVector mJackOutBuf;
++ //this stores the state of this jack process [active,notActive,closed]
++ jack_state_t mJackState;
++ //this prepares the input/output buffers to be passed
++ //to the callback function that a user writes
++ //XXX should this be virtual?
++ inline int jackToClassAudioCallback(jack_nframes_t nframes);
++ std::vector<std::string> mPortNames;
++ protected:
++ /**
++ @brief The method that the user must overload in order to actually process jack data.
++ \param nframes the number frames to process
++ \param inBufs a vector of audio buffers
++ \param outBufs a vector of audio buffers
++ \return 0 on success, non zero on error, which will cause jack to remove the client from the process graph
++ */
++ virtual int audioCallback(jack_nframes_t nframes,
++ audioBufVector inBufs,
++ audioBufVector outBufs) = 0;
++
++ public:
++ /**
++ @brief The Constructor
++ \param name string indicating the name of the jack client to create
++ \param inPorts an unsigned integer indicating the number of default input ports to create
++ \param outPorts an unsigned integer indicating the number of default output ports to create
++ \param startServer a boolean indicating whether to start a jack server if one isn't already running
++ \sa audioCallback
++ */
++ AudioIO(std::string name,
++ unsigned int inPorts = 0,
++ unsigned int outPorts = 2,
++#ifdef __APPLE__
++ bool startServer = false)
++#else
++ bool startServer = true)
++#endif
++ throw(std::runtime_error);
++
++ ///The Destructor
++ virtual ~AudioIO();
++
++ /**
++ @brief The callback that jack actually gets [static].
++
++ This is a static method that the C jack callback calls, users
++ should not need to override this method.
++
++ \param nframes the number frames to process
++ \param arg a pointer to our AudioIO object
++ \return the actual number of frames processed
++ \sa audioCallback
++ */
++ static int jackProcessCallback(jack_nframes_t nframes, void *arg);
++
++ ///See if a port with the name "name" exists for our client
++ bool portExists(std::string name);
++
++ /**
++ @brief Reserve output ports
++
++ This method must be called before the client is started. This
++ reserves a number of ports so that they can be safely created while
++ the client is running. The number indicates the maximum number of ports
++ that can be created while the client is running. This number includes
++ those ports that a have already been created, so if you've already created
++ x ports and you reserve y ports total, you can only create y - x ports while
++ the client is running.
++ \param num an integer indicating the number of output ports to reserve
++ */
++ virtual void reserveOutPorts(unsigned int num)
++ throw(std::runtime_error);
++ /**
++ @brief Reserve input ports
++
++ This method must be called before the client is started. This
++ reserves a number of ports so that they can be safely created while
++ the client is running. The number indicates the maximum number of ports
++ that can be created while the client is running. This number includes
++ those ports that a have already been created, so if you've already created
++ x ports and you reserve y ports total, you can only create y - x ports while
++ the client is running.
++ \param num an integer indicating the number of input ports to reserve
++ */
++ virtual void reserveInPorts(unsigned int num)
++ throw(std::runtime_error);
++
++ ///Start the jack client.
++ void start()
++ throw(std::runtime_error);
++ ///Stop the jack client.
++ void stop()
++ throw(std::runtime_error);
++ ///Close the jack client.
++ void close()
++ throw(std::runtime_error);
++
++ ///Get the number of jack input ports
++ unsigned int inPorts();
++ ///Get the number of jack output ports
++ unsigned int outPorts();
++
++ /**
++ @brief Add a jack input port to our client
++ \param name string the name of the port to add
++ \return the number of total input ports
++ */
++ virtual unsigned int addInPort(std::string name)
++ throw(std::runtime_error);
++ /**
++ @brief Add a jack output port to our client
++ \param name string the name of the port to add
++ \return the number of total output ports
++ */
++ virtual unsigned int addOutPort(std::string name)
++ throw(std::runtime_error);
++
++ /**
++ @brief Connect our output to a jack client's source port.
++ \param index the index of our output port to connect from.
++ \param sourcePortName the client:port name to connect to
++ */
++ void connectTo(unsigned int index, std::string sourcePortName)
++ throw(std::range_error, std::runtime_error);
++ /**
++ @brief Connect our input to a jack client's destination port.
++ \param index the index of our input port to connect to
++ \param destPortName the client:port name to connect from
++ */
++ void connectFrom(unsigned int index, std::string destPortName)
++ throw(std::range_error, std::runtime_error);
++ /**
++ @brief Connect our output port to a physical output port
++ \param index the index of our output port to connect from
++ \param physical_index the physical output port index to connect to
++ */
++ void connectToPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error);
++ /**
++ @brief Connect our input port to a physical input port
++ \param index the index of our input port to connect to
++ \param physical_index the physical input port index to connect from
++ */
++ void connectFromPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error);
++ ///Disconnect input port from all connections
++ void disconnectInPort(unsigned int index)
++ throw(std::range_error, std::runtime_error);
++ ///Disconnect output port from all connections
++ void disconnectOutPort(unsigned int index)
++ throw(std::range_error, std::runtime_error);
++
++ ///Get the number of connections to our input port
++ unsigned int numConnectionsInPort(unsigned int index)
++ throw(std::range_error);
++ ///Get the number of connections to our output port
++ unsigned int numConnectionsOutPort(unsigned int index)
++ throw(std::range_error);
++
++ /**
++ @brief Get the number of physical audio input ports
++ These are ports that can send audio to your client
++ */
++ unsigned int numPhysicalSourcePorts();
++ /**
++ @brief Get the number of physical audio output ports
++ These are ports that your client can send audio to
++ */
++ unsigned int numPhysicalDestinationPorts();
++
++ ///Get the name of our client's input port
++ std::string getInputPortName(unsigned int index)
++ throw(std::range_error);
++ ///Get the name of our client's output port
++ std::string getOutputPortName(unsigned int index)
++ throw(std::range_error);
++
++ /**
++ @brief This method is called when Jack shuts down.
++ Override if you want to do something when jack shuts down.
++ */
++ virtual void jackShutdownCallback();
++ /**
++ @brief The current CPU load estimated by JACK
++
++ This is a running average of the time it takes to execute a full
++ process cycle for all clients as a percentage of the real time
++ available per cycle determined by the buffer size and sample rate.
++ */
++ float getCpuLoad();
++ ///Get the sample rate
++ jack_nframes_t getSampleRate();
++ ///Get the jack buffer size
++ jack_nframes_t getBufferSize();
++ ///Check to see if the client is running in real time mode
++ bool isRealTime(){return jack_is_realtime(mJackClient);}
++ /**
++ @brief Get the name of our client
++
++ This might not be exactly the same as the name we provided to the
++ constructor
++
++ \return a string indicating the name of our client.
++ */
++ std::string getName(){return std::string(jack_get_client_name(mJackClient));}
++ ///Get the state of our Jack client.
++ jack_state_t getState(){return mJackState;}
++
++ /**
++ @brief Get an estimate of the current time in frames
++
++ This is a running counter, no significance should be attached to
++ its value, but it can be compared to a previously returned value.
++ \return an estimate of the current time in frames.
++ */
++ jack_nframes_t getFrameTime(){return jack_frame_time(mJackClient);}
++
++ /**
++ @brief Get the time in frames since the JACK server began the current process cycle
++
++ \return the time in frames that has passed since the JACK server began the current process cycle
++ */
++ jack_nframes_t getFramesSinceCycleStart(){return jack_frames_since_cycle_start(mJackClient);}
++ };
++
++}
++
++#endif
+Index: xbmc/cores/AudioRenderers/jackringbuffer.hpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackringbuffer.hpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackringbuffer.hpp (revision 1806)
+@@ -0,0 +1,205 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#ifndef JACK_RING_BUFFER_CLASS_H
++#define JACK_RING_BUFFER_CLASS_H
++
++#ifndef NULL
++#define NULL 0
++#endif
++
++extern "C" {
++#include <jack/ringbuffer.h>
++}
++#include <string.h>
++
++namespace JackCpp {
++
++template<typename Type>
++
++/**
++@class RingBuffer
++
++@brief This template class wraps the Jack lock-free ringbuffer.
++
++This class creates a lock-free ring buffer that accepts a specific data type.
++
++The key attribute of a ringbuffer is that it can be safely accessed by two
++threads simultaneously -- one reading from the buffer and the other writing to
++it -- without using any synchronization or mutual exclusion primitives. For
++this to work correctly, there can only be a single reader and a single writer
++thread. Their identities cannot be interchanged.
++
++@author Alex Norman
++
++*/
++ class RingBuffer {
++ private:
++ jack_ringbuffer_t *mRingBufferPtr;
++ size_t mLength;
++ public:
++ /**
++ @brief The Constructor
++ \param size the number of items that the ring buffer should be able to hold
++ \param mlock a boolean indicating whether or not the ring buffer should be locked in memory
++ */
++ RingBuffer(size_t size, bool mlock = false){
++ mLength = size;
++ mRingBufferPtr = jack_ringbuffer_create(mLength * sizeof(Type));
++
++ //should we lock the memory for the ring buffer?
++ if(mlock)
++ jack_ringbuffer_mlock(mRingBufferPtr);
++ }
++ ///The Destructor
++ ~RingBuffer(){
++ if(mRingBufferPtr != NULL)
++ jack_ringbuffer_free(mRingBufferPtr);
++ }
++
++ ///Get the total length of the ring buffer
++ size_t length(){
++ return mLength;
++ }
++
++ ///Get the number of items that can be read at this time
++ size_t getReadSpace(){
++ return jack_ringbuffer_read_space(mRingBufferPtr) / sizeof(Type);
++ }
++
++ ///Get the number of items that can be written at this time
++ size_t getWriteSpace(){
++ return jack_ringbuffer_write_space(mRingBufferPtr) / sizeof(Type);
++ }
++
++ /**
++ @brief Read into dest
++
++ Read from the buffer into a variable.
++
++ \param dest an item to be read into
++ */
++ void read(Type &dest){
++ if(getReadSpace() <= 0){
++ //throw error!!!!
++ return;
++ }
++ jack_ringbuffer_read(mRingBufferPtr, (char *)&dest, sizeof(Type));
++ }
++
++ /**
++ @brief Read into an array
++
++ Read from the buffer into an array.
++
++ \param dest an array to be read into
++ \param cnt the number of elements to read into this array
++ */
++ void read(Type *dest, unsigned cnt){
++ jack_ringbuffer_data_t readVec[2];
++ unsigned int read_size = sizeof(Type) * cnt;
++ if(getReadSpace() <= 0){
++ //throw error!!!!
++ return;
++ }
++
++ //get the readvector
++ jack_ringbuffer_get_read_vector(mRingBufferPtr, readVec);
++
++ //if the first vector has enough data then just read from there
++ if(readVec[0].len >= read_size){
++ memcpy(dest, readVec[0].buf, read_size);
++ } else {
++ //if the first vector is zero length then read from the second
++ if(readVec[0].len == 0){
++ memcpy(dest, readVec[1].buf, read_size);
++ } else {
++ //this gets tricky
++ char * byterep = (char *)dest;
++ //first read the data out of the first vector
++ memcpy(byterep, readVec[0].buf, readVec[0].len);
++ //then read the rest out of the second
++ memcpy(byterep + readVec[0].len, readVec[1].buf, read_size - readVec[0].len);
++ }
++ }
++ //advance the read pointer
++ jack_ringbuffer_read_advance(mRingBufferPtr, read_size);
++ }
++
++ /**
++ @brief Write into the ring buffer.
++
++ \param src the value to write
++ */
++ void write(Type src){
++ if(getWriteSpace() <= 0){
++ //throw error!!!!
++ return;
++ }
++ jack_ringbuffer_write(mRingBufferPtr, (char *)&src, sizeof(Type));
++ }
++
++ /**
++ @brief Write an array of values into the ring buffer.
++
++ \param src an array of values to write
++ \param cnt the number of items from the array to write into our buffer
++ */
++ void write(Type *src, unsigned int cnt){
++ jack_ringbuffer_data_t writeVec[2];
++ unsigned int write_size = sizeof(Type) * cnt;
++ if(cnt > getWriteSpace()){
++ //throw error!!!!
++ return;
++ }
++
++ //get the write vector
++ jack_ringbuffer_get_write_vector(mRingBufferPtr, writeVec);
++ //if there is enough room in the first vector then just write there
++ if(writeVec[0].len >= write_size){
++ memcpy(writeVec[0].buf,src,write_size);
++ } else {
++ //if there is no room in the first vector then write into the second
++ if(writeVec[0].len == 0){
++ memcpy(writeVec[1].buf,src,write_size);
++ } else {
++ //this is more tricky, we have to split the data up
++ char * byterep = (char *)src;
++ //copy the first chunck
++ memcpy(writeVec[0].buf, byterep, writeVec[0].len);
++ //copy the second chunck
++ memcpy(writeVec[1].buf, byterep + writeVec[0].len, write_size - writeVec[0].len);
++ }
++ }
++ jack_ringbuffer_write_advance(mRingBufferPtr, write_size);
++ }
++
++ /**
++ @brief Reset
++
++ This is not threadsafe. This resets the read and write pointers,
++ effectively making the ring buffer empty.
++ */
++ void reset(){
++ jack_ringbuffer_reset(mRingBufferPtr);
++ }
++ };
++
++}
++
++#endif
+Index: xbmc/cores/AudioRenderers/jackblockingaudioio.cpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackblockingaudioio.cpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackblockingaudioio.cpp (revision 1806)
+@@ -0,0 +1,181 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#include "jackblockingaudioio.hpp"
++#include <unistd.h>
++#define MIN(x,y) ((x) < (y) ? (x) : (y))
++
++#if 0
++#include <iostream>
++using std::cerr;
++using std::cout;
++using std::endl;
++#endif
++
++//allocate input and output buffers
++JackCpp::BlockingAudioIO::BlockingAudioIO(std::string name,
++ unsigned int inChans, unsigned int outChans,
++ unsigned int inBufSize, unsigned int outBufSize,
++ bool startServer) throw(std::runtime_error):
++ AudioIO(name, inChans, outChans, startServer),
++ mOutputBufferMaxSize((unsigned int)getSampleRate()),
++ mInputBufferMaxSize((unsigned int)getSampleRate())
++{
++ if(inBufSize < 2 * getBufferSize())
++ inBufSize = 2 * getBufferSize();
++ else if (inBufSize > mInputBufferMaxSize)
++ inBufSize = mInputBufferMaxSize;
++ if(outBufSize < 2 * getBufferSize())
++ outBufSize = 2 * getBufferSize();
++ else if (outBufSize > mOutputBufferMaxSize)
++ outBufSize = mOutputBufferMaxSize;
++
++ //set the amount of the ring buffer that we leave free
++ mOutputBufferFreeSize = mOutputBufferMaxSize - outBufSize;
++ mInputBufferFreeSize = mInputBufferMaxSize - inBufSize;
++
++ //create input and output buffers, give them extra space to work with and memory lock them
++ for(unsigned int i = 0; i < outChans; i++)
++ mUserOutBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mOutputBufferMaxSize, true));
++ for(unsigned int i = 0; i < inChans; i++)
++ mUserInBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mInputBufferMaxSize, true));
++}
++
++//clean up the buffers we allocated
++JackCpp::BlockingAudioIO::~BlockingAudioIO(){
++ stop();
++ for(std::vector<RingBuffer<jack_default_audio_sample_t> *>::iterator it = mUserOutBuff.begin();
++ it != mUserOutBuff.end(); it++)
++ delete *it;
++ for(std::vector<RingBuffer<jack_default_audio_sample_t> *>::iterator it = mUserInBuff.begin();
++ it != mUserInBuff.end(); it++)
++ delete *it;
++}
++
++//wait until we can write, then write
++void JackCpp::BlockingAudioIO::write(unsigned int channel, jack_default_audio_sample_t val){
++ if (channel >= outPorts())
++ return;
++ while(mUserOutBuff[channel]->getWriteSpace() <= mOutputBufferFreeSize)
++ usleep(10);
++ mUserOutBuff[channel]->write(val);
++}
++
++//we we can write then write, otherwise return false
++bool JackCpp::BlockingAudioIO::tryWrite(unsigned int channel, jack_default_audio_sample_t val){
++ if (channel < outPorts() && mUserOutBuff[channel]->getWriteSpace() > mOutputBufferFreeSize){
++ mUserOutBuff[channel]->write(val);
++ return true;
++ }
++ return false;
++}
++
++//wait until we can read, then return the value
++jack_default_audio_sample_t JackCpp::BlockingAudioIO::read(unsigned int channel){
++ jack_default_audio_sample_t val;
++ if (channel >= inPorts())
++ return 0;
++ while(mUserInBuff[channel]->getReadSpace() == 0)
++ usleep(10);
++ mUserInBuff[channel]->read(val);
++ return val;
++}
++
++//if we cannot read then return false, otherwise, read and return true
++bool JackCpp::BlockingAudioIO::tryRead(unsigned int channel, jack_default_audio_sample_t &val){
++ if (channel >= inPorts() || mUserInBuff[channel]->getReadSpace() == 0)
++ return false;
++ mUserInBuff[channel]->read(val);
++ return true;
++}
++
++void JackCpp::BlockingAudioIO::reserveOutPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ AudioIO::reserveOutPorts(num);
++ mUserOutBuff.reserve(num);
++}
++
++void JackCpp::BlockingAudioIO::reserveInPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ AudioIO::reserveInPorts(num);
++ mUserInBuff.reserve(num);
++}
++
++unsigned int JackCpp::BlockingAudioIO::addInPort(std::string name)
++ throw(std::runtime_error)
++{
++ unsigned int ret;
++ if(getState() == AudioIO::active)
++ throw std::runtime_error("JackCpp::BlockingAudioIO::addInPort not allowed while the client is active");
++ ret = AudioIO::addInPort(name);
++ mUserInBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mInputBufferMaxSize, true));
++ return ret;
++}
++
++unsigned int JackCpp::BlockingAudioIO::addOutPort(std::string name)
++ throw(std::runtime_error)
++{
++ unsigned int ret;
++ if(getState() == AudioIO::active)
++ throw std::runtime_error("JackCpp::BlockingAudioIO::addOutPort not allowed while the client is active");
++ ret = AudioIO::addOutPort(name);
++ mUserOutBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mOutputBufferMaxSize, true));
++ return ret;
++}
++
++//read the jack input buffers into the user input buffers
++//write the user output buffers into the jack output buffers
++int JackCpp::BlockingAudioIO::audioCallback(jack_nframes_t nframes,
++ audioBufVector inBufs,
++ audioBufVector outBufs){
++
++ //only try to write as much as we have space to write
++ unsigned int numToWrite = MIN(mUserOutBuff[0]->getReadSpace(), nframes);
++ unsigned int numToRead = MIN(mUserInBuff[0]->getWriteSpace(), nframes);
++
++ //make sure we leave the amount of free space we require
++ if(mUserInBuff[0]->getWriteSpace() - numToRead < mInputBufferFreeSize)
++ numToRead = mUserInBuff[0]->getWriteSpace() - mInputBufferFreeSize;
++
++ //if (numToWrite < nframes)
++ //cerr << "oops" << endl;
++
++ //read get inputs
++ for(unsigned int i = 0; i < inPorts(); i++){
++ for(unsigned int j = 0; j < numToRead; j++)
++ mUserInBuff[i]->write(inBufs[i][j]);
++ }
++
++ //write output
++ for(unsigned int i = 0; i < outPorts(); i++){
++ for(unsigned int j = 0; j < numToWrite; j++){
++ jack_default_audio_sample_t val;
++ mUserOutBuff[i]->read(val);
++ outBufs[i][j] = val;
++ }
++ //write zeros for the rest
++ for(unsigned int j = numToWrite; j < nframes; j++)
++ outBufs[i][j] = 0.0;
++ //if(numToWrite < nframes)
++ //cerr << "oops" << endl;
++ }
++ return 0;
++}
++
diff --git a/media-tv/xbmc/files/xbmc-9.11~beta1-jack.patch b/media-tv/xbmc/files/xbmc-9.11~beta1-jack.patch
new file mode 100644
index 0000000..d62fc28
--- /dev/null
+++ b/media-tv/xbmc/files/xbmc-9.11~beta1-jack.patch
@@ -0,0 +1,1738 @@
+Index: xbmc/cores/AudioRenderers/jackblockingaudioio.hpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackblockingaudioio.hpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackblockingaudioio.hpp (revision 1806)
+@@ -0,0 +1,176 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#ifndef JACK_BLOCKING_AUDIO_IO_HPP
++#define JACK_BLOCKING_AUDIO_IO_HPP
++
++#include "jackaudioio.hpp"
++#include "jackringbuffer.hpp"
++
++namespace JackCpp {
++
++/**
++@class BlockingAudioIO
++
++@brief This is an class that provides a blocking read/write interface for Jack.
++
++This class has read/write methods that allow users to write audio to and read
++audio from a Jack client.
++
++@author Alex Norman
++
++*/
++ class BlockingAudioIO : public AudioIO {
++ public:
++ /**
++ @brief The Constructor
++ \param name string indicating the name of the jack client to create
++ \param inChans an unsigned integer indicating the number of default input ports to create
++ \param outChans an unsigned integer indicating the number of default output ports to create
++ \param inBufSize the size of the buffer that the jack callback fills for us to read with read
++ \param outBufSize the size of the buffer that we write to and the jack callback reads from
++ \param startServer a boolean indicating whether to start a jack server if one isn't already running
++ \sa AudioIO::AudioIO
++ */
++ BlockingAudioIO(std::string name,
++ unsigned int inChans = 2, unsigned int outChans = 2,
++ unsigned int inBufSize = 0, unsigned int outBufSize = 0,
++#ifdef __APPLE__
++ bool startServer = false)
++#else
++ bool startServer = true)
++#endif
++ throw(std::runtime_error);
++ virtual ~BlockingAudioIO();
++
++ /**
++ @brief Write to an output buffer
++
++ Writes val to the output[channel] (if it exists). If
++ output[channel] does not exist is silently fails otherwise it
++ sleeps until it can write output[channel]
++
++ \param channel the output chanel to write to
++ \param val the value to write to the channel
++ \sa tryWrite(unsigned int channel, jack_default_audio_sample_t val)
++ */
++ void write(unsigned int channel, jack_default_audio_sample_t val);
++
++ /**
++ @brief Try to write to an output buffer
++
++ Trys to write to output[channel] (if it exists). If it succeeds it
++ returns true. If it fails, because the buffer is full, it returns
++ false.
++
++ \param channel the output chanel to write to
++ \param val the value to write to the channel
++ \return true if it can write, false if it cannot
++ \sa write(unsigned int channel, jack_default_audio_sample_t val)
++ */
++ bool tryWrite(unsigned int channel, jack_default_audio_sample_t val);
++
++ /**
++ @brief Read from an input buffer.
++
++ Reads from input[channel] if it exists. If there is no input to
++ read it sleeps until there is.
++
++ \param channel the input chanel to read from
++ \return the value read from the input channel [will be zero if the channel does not exist]
++ \sa tryRead(unsigned int channel, jack_default_audio_sample_t &val)
++ */
++ jack_default_audio_sample_t read(unsigned int channel);
++
++ /**
++ @brief Try to read from to an input buffer
++
++ Trys to read from input[channel] (if it exists). If it succeeds it
++ returns true. If it fails, because the buffer is empty, it returns
++ false.
++
++ \param channel the output chanel to read from
++ \param val the value to read into (basically a return value)
++ \return true if it can read, false if it cannot
++ \sa read(unsigned int channel)
++ */
++ bool tryRead(unsigned int channel, jack_default_audio_sample_t &val);
++
++ //XXX reserve exists but is basically useless as you cannot
++ //add ports while the client is active
++ ///This method is useless at the moment.
++ virtual void reserveOutPorts(unsigned int num)
++ throw(std::runtime_error);
++ ///This method is useless at the moment.
++ virtual void reserveInPorts(unsigned int num)
++ throw(std::runtime_error);
++
++ /**
++ @brief Add an input port to our client
++
++ Unlike AudioIO, this currently cannot be called while the client is running.
++
++ \param name string the name of the port to add
++ \return the number of total input ports
++ \sa AudioIO::addInPort(std::string name)
++ */
++ virtual unsigned int addInPort(std::string name)
++ throw(std::runtime_error);
++ /**
++ @brief Add an output port to our client
++
++ Unlike AudioIO, this currently cannot be called while the client is running.
++
++ \param name string the name of the port to add
++ \return the number of total output ports
++ \sa AudioIO::addOutPort(std::string name)
++ */
++ virtual unsigned int addOutPort(std::string name)
++ throw(std::runtime_error);
++
++ protected:
++ /**
++ @brief This is the callback that processes our buffers.
++
++ This method takes the buffers we write to with "write" and writes
++ them out to the Jack bus. It also takes audio from the Jack bus
++ and uses that to fill the input buffers that we read from.
++
++ \param nframes the number frames to process
++ \param inBufs a vector of audio buffers
++ \param outBufs a vector of audio buffers
++ \return the actual number of frames processed
++ */
++ virtual int audioCallback(jack_nframes_t nframes,
++ std::vector<jack_default_audio_sample_t *> inBufs,
++ std::vector<jack_default_audio_sample_t *> outBufs);
++ private:
++ std::vector<RingBuffer<jack_default_audio_sample_t> *> mUserOutBuff;
++ std::vector<RingBuffer<jack_default_audio_sample_t> *> mUserInBuff;
++
++ //this is the size of the ring buffers that we alloc
++ const unsigned int mOutputBufferMaxSize;
++ const unsigned int mInputBufferMaxSize;
++ //this is the amount of free space we leave in the ring buffers
++ //this can decrease so that we'll have more latency but fewer glitches
++ unsigned int mOutputBufferFreeSize;
++ unsigned int mInputBufferFreeSize;
++ };
++}
++#endif
++
+Index: xbmc/cores/AudioRenderers/Makefile.in
+===================================================================
+--- xbmc/cores/AudioRenderers/Makefile.in (revision 1805)
++++ xbmc/cores/AudioRenderers/Makefile.in (revision 1806)
+@@ -4,11 +4,17 @@
+
+ ifeq ($(findstring osx,$(ARCH)), osx)
+ SRCS = \
++ jackaudioio.cpp \
++ jackblockingaudioio.cpp \
++ JackDirectSound.cpp \
+ NullDirectSound.cpp \
+ AudioRendererFactory.cpp \
+ CoreAudioRenderer.cpp
+ else
+ SRCS = \
++ jackaudioio.cpp \
++ jackblockingaudioio.cpp \
++ JackDirectSound.cpp \
+ NullDirectSound.cpp \
+ AudioRendererFactory.cpp \
+ ALSADirectSound.cpp \
+Index: xbmc/cores/AudioRenderers/JackDirectSound.cpp
+===================================================================
+--- xbmc/cores/AudioRenderers/JackDirectSound.cpp (revision 0)
++++ xbmc/cores/AudioRenderers/JackDirectSound.cpp (revision 1806)
+@@ -0,0 +1,243 @@
++/*
++ * Copyright (C) 2005-2008 Team XBMC
++ * http://www.xbmc.org
++ *
++ * This Program 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 2, or (at your option)
++ * any later version.
++ *
++ * This Program 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 XBMC; see the file COPYING. If not, write to
++ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
++ * http://www.gnu.org/copyleft/gpl.html
++ *
++ */
++
++#include "JackDirectSound.h"
++#include "AudioContext.h"
++#include "Application.h"
++#include "utils/log.h"
++#include "utils/TimeUtils.h"
++
++#define BUFFER CHUNKLEN * 20
++#define CHUNKLEN 512
++
++
++void CJackDirectSound::DoWork()
++{
++
++}
++
++//////////////////////////////////////////////////////////////////////
++// Construction/Destruction
++//////////////////////////////////////////////////////////////////////
++//***********************************************************************************************
++CJackDirectSound::CJackDirectSound()
++{
++ jackBuffer = 0;
++}
++bool CJackDirectSound::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, const char* strAudioCodec, bool bIsMusic, bool bPassthrough)
++{
++ CLog::Log(LOGERROR,"Jack.Initialize() - Channels: %i - SampleRate: %i - SampleBit: %i - Resample %s - Codec %s - IsMusic %s - IsPassthrough %s", iChannels, uiSamplesPerSec, uiBitsPerSample, bResample ? "true" : "false", strAudioCodec, bIsMusic ? "true" : "false", bPassthrough ? "true" : "false");
++ if (iChannels == 0)
++ iChannels = 2;
++
++ bool bAudioOnAllSpeakers(false);
++ g_audioContext.SetupSpeakerConfig(iChannels, bAudioOnAllSpeakers, bIsMusic);
++ g_audioContext.SetActiveDevice(CAudioContext::DIRECTSOUND_DEVICE);
++
++
++ jackBuffer = new JackCpp::BlockingAudioIO("XBMC.Jack", iChannels, iChannels);
++ jackBuffer->start();
++ for(int i = 0; i < iChannels; i++){
++ jackBuffer->connectToPhysical(i,i);
++ }
++ m_uiChannels = iChannels;
++
++ //g_application.m_guiDialogKaiToast.QueueNotification("Failed to initialize audio device", "Check your audiosettings"
++
++ m_timePerPacket = 1.0f / (float)(iChannels*(uiBitsPerSample/8) * uiSamplesPerSec);
++ m_packetsSent = 0;
++ m_paused = 0;
++ m_lastUpdate = CTimeUtils::GetTimeMS();
++ return true;
++}
++
++//***********************************************************************************************
++CJackDirectSound::~CJackDirectSound()
++{
++ Deinitialize();
++}
++
++
++//***********************************************************************************************
++bool CJackDirectSound::Deinitialize()
++{
++ CLog::Log(LOGERROR,"Jack.Deinitialize");
++ if (jackBuffer) {
++ for(int i = 0; i < m_uiChannels; i++){
++ jackBuffer->disconnectOutPort(i);
++ }
++ jackBuffer->close();
++ //TODO: Cannot delete jackBuffer, otherwise will crash.
++ //delete jackBuffer;
++ }
++ jackBuffer = 0;
++
++ g_audioContext.SetActiveDevice(CAudioContext::DEFAULT_DEVICE);
++ return true;
++}
++
++void CJackDirectSound::Flush()
++{
++ m_lastUpdate = CTimeUtils::GetTimeMS();
++ m_packetsSent = 0;
++ Pause();
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::Pause()
++{
++ m_paused = true;
++ return true;
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::Resume()
++{
++ m_paused = false;
++ return true;
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::Stop()
++{
++ Flush();
++ return true;
++}
++
++//***********************************************************************************************
++long CJackDirectSound::GetCurrentVolume() const
++{
++ return m_nCurrentVolume;
++}
++
++//***********************************************************************************************
++void CJackDirectSound::Mute(bool bMute)
++{
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::SetCurrentVolume(long nVolume)
++{
++ m_nCurrentVolume = nVolume;
++ return true;
++}
++
++
++//***********************************************************************************************
++unsigned int CJackDirectSound::GetSpace()
++{
++ Update();
++
++ if(BUFFER > m_packetsSent)
++ return (int)BUFFER - m_packetsSent;
++ else
++ return 0;
++}
++
++//***********************************************************************************************
++unsigned int CJackDirectSound::AddPackets(const void* data, unsigned int len)
++{
++ if (m_paused)
++ return 0;
++ Update();
++
++ int add = ( len / GetChunkLen() ) * GetChunkLen();
++ m_packetsSent += add;
++
++ CLog::Log(LOGERROR,"Jack.AddPackets() len=%d, add=%d", len, add);
++
++ if (jackBuffer){
++ short* pSamples = (short*)data;
++ for (int i=0; i< add/sizeof(short)/m_uiChannels; i++){
++ for(unsigned int j = 0; j < m_uiChannels; j++){
++ jackBuffer->write(j, (float) pSamples[i*m_uiChannels + j] / 32768.0);
++ }
++ }
++ }
++
++ return add;
++}
++
++//***********************************************************************************************
++float CJackDirectSound::GetDelay()
++{
++ Update();
++
++ return m_timePerPacket * (float)m_packetsSent + 0.4;
++}
++
++float CJackDirectSound::GetCacheTime()
++{
++ return GetDelay();
++}
++
++//***********************************************************************************************
++unsigned int CJackDirectSound::GetChunkLen()
++{
++ return (int)CHUNKLEN;
++}
++//***********************************************************************************************
++int CJackDirectSound::SetPlaySpeed(int iSpeed)
++{
++ return 0;
++}
++
++void CJackDirectSound::RegisterAudioCallback(IAudioCallback *pCallback)
++{
++}
++
++void CJackDirectSound::UnRegisterAudioCallback()
++{
++}
++
++void CJackDirectSound::WaitCompletion()
++{
++ while(m_packetsSent > 0)
++ Update();
++}
++
++void CJackDirectSound::SwitchChannels(int iAudioStream, bool bAudioOnAllSpeakers)
++{
++ return ;
++}
++
++void CJackDirectSound::Update()
++{
++ long currentTime = CTimeUtils::GetTimeMS();
++ long deltaTime = (currentTime - m_lastUpdate);
++
++ if (m_paused)
++ {
++ m_lastUpdate += deltaTime;
++ return;
++ }
++
++ double d = (double)deltaTime / 1000.0f;
++
++ if (currentTime != m_lastUpdate)
++ {
++ double i = (d / (double)m_timePerPacket);
++ m_packetsSent -= (long)i;
++ if (m_packetsSent < 0)
++ m_packetsSent = 0;
++ m_lastUpdate = currentTime;
++ }
++}
+Index: xbmc/cores/AudioRenderers/AudioRendererFactory.cpp
+===================================================================
+--- xbmc/cores/AudioRenderers/AudioRendererFactory.cpp (revision 1805)
++++ xbmc/cores/AudioRenderers/AudioRendererFactory.cpp (revision 1806)
+@@ -24,6 +24,7 @@
+ #include "GUISettings.h"
+ #include "log.h"
+ #include "NullDirectSound.h"
++#include "JackDirectSound.h"
+
+ #ifdef HAS_PULSEAUDIO
+ #include "PulseAudioDirectSound.h"
+@@ -86,6 +87,10 @@
+
+ device = deviceString;
+
++//For Jack
++ audioSink = new CJackDirectSound();
++ ReturnOnValidInitialize();
++
+ /* First pass creation */
+ #ifdef HAS_PULSEAUDIO
+ audioSink = new CPulseAudioDirectSound();
+Index: xbmc/cores/AudioRenderers/JackDirectSound.h
+===================================================================
+--- xbmc/cores/AudioRenderers/JackDirectSound.h (revision 0)
++++ xbmc/cores/AudioRenderers/JackDirectSound.h (revision 1806)
+@@ -0,0 +1,79 @@
++/*
++ * Copyright (C) 2005-2008 Team XBMC
++ * http://www.xbmc.org
++ *
++ * This Program 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 2, or (at your option)
++ * any later version.
++ *
++ * This Program 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 XBMC; see the file COPYING. If not, write to
++ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
++ * http://www.gnu.org/copyleft/gpl.html
++ *
++ */
++
++#ifndef __JACK_DIRECT_SOUND_H__
++#define __JACK_DIRECT_SOUND_H__
++
++#if _MSC_VER > 1000
++#pragma once
++#endif // _MSC_VER > 1000
++
++#include "IAudioRenderer.h"
++#include "IAudioCallback.h"
++
++#include "jackblockingaudioio.hpp"
++
++extern void RegisterAudioCallback(IAudioCallback* pCallback);
++extern void UnRegisterAudioCallback();
++
++class CJackDirectSound : public IAudioRenderer
++{
++public:
++ virtual void UnRegisterAudioCallback();
++ virtual void RegisterAudioCallback(IAudioCallback* pCallback);
++ virtual unsigned int GetChunkLen();
++ virtual float GetDelay();
++ virtual float GetCacheTime();
++ CJackDirectSound();
++ virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, const char* strAudioCodec = "", bool bIsMusic=false, bool bPassthrough = false);
++ virtual ~CJackDirectSound();
++
++ virtual unsigned int AddPackets(const void* data, unsigned int len);
++ virtual unsigned int GetSpace();
++ virtual bool Deinitialize();
++ virtual bool Pause();
++ virtual bool Stop();
++ virtual bool Resume();
++
++ virtual long GetCurrentVolume() const;
++ virtual void Mute(bool bMute);
++ virtual bool SetCurrentVolume(long nVolume);
++ virtual int SetPlaySpeed(int iSpeed);
++ virtual void WaitCompletion();
++ virtual void DoWork();
++ virtual void SwitchChannels(int iAudioStream, bool bAudioOnAllSpeakers);
++
++ virtual void Flush();
++private:
++ long m_nCurrentVolume;
++
++ float m_timePerPacket;
++ int m_packetsSent;
++ bool m_paused;
++ long m_lastUpdate;
++
++ int m_uiChannels;
++ JackCpp::BlockingAudioIO* jackBuffer;
++
++ void Update();
++};
++
++#endif
+Index: xbmc/cores/AudioRenderers/jackaudioio.cpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackaudioio.cpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackaudioio.cpp (revision 1806)
+@@ -0,0 +1,475 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#include "jackaudioio.hpp"
++#include <iostream>
++#include <errno.h>
++#include <sstream>
++#include <algorithm>
++
++template <typename T>
++std::string ToString(T aValue){
++ std::stringstream ss;
++ ss << aValue;
++ return ss.str();
++}
++
++/* callback for jack's error messages */
++static void error_callback (const char *msg) {
++ std::cerr << "Jack:" << msg << std::endl;
++ std::cerr.flush();
++}
++
++static void shutdown_callback (void *arg) {
++ return ((JackCpp::AudioIO *)arg)->jackShutdownCallback();
++}
++
++void JackCpp::AudioIO::jackShutdownCallback(){
++ std::cerr << std::endl << "jack has shutdown" << std::endl;
++}
++
++int JackCpp::AudioIO::jackProcessCallback(jack_nframes_t nframes, void *arg){
++ JackCpp::AudioIO* callbackjackobject = (AudioIO * )arg;
++ return callbackjackobject->jackToClassAudioCallback(nframes);
++}
++
++int JackCpp::AudioIO::jackToClassAudioCallback(jack_nframes_t nframes){
++ //read in commands
++ while(mCmdBuffer.getReadSpace() > 0){
++ cmd_t cmd;
++ mCmdBuffer.read(cmd);
++ switch(cmd){
++ case add_in_port:
++ //we will have tested that we have this capacity, so we resize the buffer
++ //to include the new port
++ mJackInBuf.resize(mJackInBuf.size() + 1);
++ mNumInputPorts++;
++ break;
++ case add_out_port:
++ //we will have tested that we have this capacity, so we resize the buffer
++ //to include the new port
++ mJackOutBuf.resize(mJackOutBuf.size() + 1);
++ mNumOutputPorts++;
++ break;
++ }
++ }
++
++ //get the input and output buffers
++ for(unsigned int i = 0; i < mNumInputPorts; i++)
++ mJackInBuf[i] = (jack_default_audio_sample_t *) jack_port_get_buffer ( mInputPorts[i], nframes);
++ for(unsigned int i = 0; i < mNumOutputPorts; i++)
++ mJackOutBuf[i] = (jack_default_audio_sample_t *) jack_port_get_buffer ( mOutputPorts[i], nframes);
++
++ return audioCallback(nframes, mJackInBuf, mJackOutBuf);
++}
++
++JackCpp::AudioIO::AudioIO(std::string name, unsigned int inPorts, unsigned int outPorts, bool startServer)
++ throw(std::runtime_error) : mCmdBuffer(256,true)
++{
++ jack_options_t jack_open_options = JackNullOption;
++
++ if(startServer == false)
++ jack_open_options = JackNoStartServer;
++
++ mJackState = notActive;
++
++ //set the error callback
++ jack_set_error_function (error_callback);
++
++ /* try to become a client of the JACK server */
++ if ((mJackClient = jack_client_open (name.c_str(), jack_open_options, NULL)) == 0) {
++ throw std::runtime_error("cannot create client jack server not running?");
++ }
++#ifdef __APPLE__
++ else {
++ // because the mac version of jack is being totally LAME
++ sleep(2);
++ }
++#endif
++
++ //set the shutdown callback
++ jack_on_shutdown (mJackClient, shutdown_callback, this);
++
++ //allocate ports
++ if (inPorts > 0){
++ for(unsigned int i = 0; i < inPorts; i++){
++ std::string portname = "input";
++ portname.append(ToString(i));
++ mInputPorts.push_back(
++ jack_port_register (mJackClient, portname.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0));
++ mPortNames.push_back(portname);
++ }
++ //reserve the data for the jack callback buffers
++ for(unsigned int i = 0; i < mInputPorts.size(); i++)
++ mJackInBuf.push_back(NULL);
++ }
++ if (outPorts > 0){
++ for(unsigned int i = 0; i < outPorts; i++){
++ std::string portname = "output";
++ portname.append(ToString(i));
++ mOutputPorts.push_back(
++ jack_port_register (mJackClient, portname.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0));
++ mPortNames.push_back(portname);
++ }
++ //reserve the data for the jack callback buffers
++ for(unsigned int i = 0; i < mOutputPorts.size(); i++)
++ mJackOutBuf.push_back(NULL);
++ }
++
++ //set up the callback
++ if(0 != jack_set_process_callback (mJackClient, JackCpp::AudioIO::jackProcessCallback, this))
++ throw std::runtime_error("cannot register process callback");
++}
++
++
++JackCpp::AudioIO::~AudioIO(){
++ //make sure to deactiveate the client if we need to
++ switch(mJackState){
++ case active:
++ stop();
++ close();
++ break;
++ case notActive:
++ close();
++ break;
++ default:
++ break;
++ //do nothing
++ }
++}
++
++bool JackCpp::AudioIO::portExists(std::string name){
++ //see if the port name exists
++ std::vector<std::string>::iterator it;
++ it = std::find(mPortNames.begin(),mPortNames.end(), name);
++ if (it != mPortNames.end())
++ return true;
++ else
++ return false;
++}
++
++void JackCpp::AudioIO::reserveOutPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ if(getState() == active)
++ throw std::runtime_error("reserving ports while the client is running is not supported yet.");
++ mOutputPorts.reserve(num);
++ mJackOutBuf.reserve(num);
++}
++
++void JackCpp::AudioIO::reserveInPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ if(getState() == active)
++ throw std::runtime_error("reserving ports while the client is running is not supported yet.");
++ mInputPorts.reserve(num);
++ mJackInBuf.reserve(num);
++}
++
++unsigned int JackCpp::AudioIO::inPorts(){
++ return mInputPorts.size();
++}
++
++unsigned int JackCpp::AudioIO::outPorts(){
++ return mOutputPorts.size();
++}
++
++unsigned int JackCpp::AudioIO::addInPort(std::string name)
++ throw(std::runtime_error)
++{
++ if (mJackState == active && mInputPorts.size() == mInputPorts.capacity())
++ throw std::runtime_error("trying to add input ports while the client is running and there are not reserved ports");
++
++ if(portExists(name)){
++ std::string ret_string("cannot register new inport: ");
++ ret_string.append(name);
++ ret_string.append(" port already exists with that name");
++ throw std::runtime_error(ret_string);
++ }
++
++ //allocate the item in the vector
++ jack_port_t * newPort = jack_port_register (mJackClient, name.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
++ if(newPort == NULL){
++ std::string ret_string("cannot register new inport: ");
++ ret_string.append(name);
++ throw std::runtime_error(ret_string);
++ }
++ mInputPorts.push_back(newPort);
++ mPortNames.push_back(name);
++
++ //if we're active then send a command indicating this change
++ if (mJackState == active) {
++ //loop while there isn't space to write
++ while(mCmdBuffer.getWriteSpace() == 0);
++ mCmdBuffer.write(add_in_port);
++ } else
++ mJackInBuf.push_back(NULL);
++
++ return mInputPorts.size() - 1;
++}
++
++//add an output port, if we are active then deactivate and reactivate after
++//maybe we can do this more intelligently in the future?
++unsigned int JackCpp::AudioIO::addOutPort(std::string name)
++ throw(std::runtime_error)
++{
++ if (mJackState == active && mOutputPorts.size() == mOutputPorts.capacity())
++ throw std::runtime_error("trying to add output ports while the client is running and there are not reserved ports");
++
++ if(portExists(name)){
++ std::string ret_string("cannot register new outport: ");
++ ret_string.append(name);
++ ret_string.append(" port already exists with that name");
++ throw std::runtime_error(ret_string);
++ }
++
++ //allocate the item in the vector
++ jack_port_t * newPort = jack_port_register (mJackClient, name.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
++ if(newPort == NULL){
++ std::string ret_string("cannot register new outport: ");
++ ret_string.append(name);
++ throw std::runtime_error(ret_string);
++ }
++ mOutputPorts.push_back(newPort);
++ mPortNames.push_back(name);
++
++ //if we're active then send a command indicating this change
++ if (mJackState == active) {
++ //loop while there isn't space to write
++ while(mCmdBuffer.getWriteSpace() == 0);
++ mCmdBuffer.write(add_out_port);
++ } else
++ mJackOutBuf.push_back(NULL);
++
++ return mOutputPorts.size() - 1;
++}
++
++void JackCpp::AudioIO::connectTo(unsigned int index, std::string destPortName)
++ throw(std::range_error, std::runtime_error)
++{
++ int connect_ret;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if(index < mOutputPorts.size()){
++ connect_ret = jack_connect(mJackClient, jack_port_name(mOutputPorts[index]), destPortName.c_str());
++ if(connect_ret != 0 && connect_ret != EEXIST){
++ std::string ret_string("cannot connect source: ");
++ ret_string.append(jack_port_name(mOutputPorts[index]));
++ ret_string.append(" to dest: ");
++ ret_string.append(destPortName);
++ ret_string.append(" does dest exist?");
++ throw std::range_error(ret_string);
++ }
++ } else
++ throw std::range_error("outport index out of range");
++}
++
++void JackCpp::AudioIO::connectFrom(unsigned int index, std::string sourcePortName)
++ throw(std::range_error, std::runtime_error)
++{
++ int connect_ret;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if(index < mInputPorts.size()){
++ connect_ret = jack_connect(mJackClient, sourcePortName.c_str(), jack_port_name(mInputPorts[index]));
++ if(connect_ret != 0 && connect_ret != EEXIST){
++ std::string ret_string("cannot connect source: ");
++ ret_string.append(sourcePortName);
++ ret_string.append(" to dest: ");
++ ret_string.append(jack_port_name(mInputPorts[index]));
++ ret_string.append(" does source exist?");
++ throw std::range_error(ret_string);
++ }
++ } else
++ throw std::range_error("inport index out of range");
++}
++
++//XXX should the "free" free the names that these ports point too as well?
++void JackCpp::AudioIO::connectToPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error)
++{
++ const char **ports;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if (index > mOutputPorts.size())
++ throw std::range_error("outport index out of range");
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsInput);
++ if(ports == NULL){
++ throw std::range_error("no physical inports to connect to");
++ }
++ //make sure the port exists
++ for(unsigned int i = 0; i <= physical_index; i++){
++ if(ports[i] == NULL){
++ free(ports);
++ throw std::range_error("physical inport index out of range");
++ }
++ }
++ connectTo(index, ports[physical_index]);
++ free(ports);
++}
++
++//XXX should the "free" free the names that these ports point too as well?
++void JackCpp::AudioIO::connectFromPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error)
++{
++ const char **ports;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if (index > mInputPorts.size())
++ throw std::range_error("inport index out of range");
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsOutput);
++ if(ports == NULL){
++ throw std::range_error("no physical outports to connect to");
++ }
++ //make sure the port exists
++ for(unsigned int i = 0; i <= physical_index; i++){
++ if(ports[i] == NULL){
++ free(ports);
++ throw std::range_error("physical outport index out of range");
++ }
++ }
++ connectFrom(index, ports[physical_index]);
++ free(ports);
++}
++
++void JackCpp::AudioIO::disconnectInPort(unsigned int index)
++ throw(std::range_error, std::runtime_error)
++{
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before disconnecting ports");
++ if(index < mInputPorts.size()){
++ jack_port_disconnect(mJackClient, mInputPorts[index]);
++ } else
++ throw std::range_error("inport index out of range");
++}
++
++void JackCpp::AudioIO::disconnectOutPort(unsigned int index)
++ throw(std::range_error, std::runtime_error)
++{
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before disconnecting ports");
++ if(index < mOutputPorts.size()){
++ jack_port_disconnect(mJackClient, mOutputPorts[index]);
++ } else
++ throw std::range_error("outport index out of range");
++}
++
++unsigned int JackCpp::AudioIO::numConnectionsInPort(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mInputPorts.size())
++ return jack_port_connected(mInputPorts[index]);
++ else
++ throw std::range_error("inport index out of range");
++}
++
++unsigned int JackCpp::AudioIO::numConnectionsOutPort(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mOutputPorts.size())
++ return jack_port_connected(mOutputPorts[index]);
++ else
++ throw std::range_error("outport index out of range");
++}
++
++unsigned int JackCpp::AudioIO::numPhysicalDestinationPorts(){
++ const char **ports;
++ unsigned int cnt = 0;
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsInput);
++ if (ports != NULL){
++ while(ports[cnt] != NULL)
++ cnt++;
++ free(ports);
++ return cnt;
++ } else
++ return 0;
++}
++
++unsigned int JackCpp::AudioIO::numPhysicalSourcePorts(){
++ const char **ports;
++ unsigned int cnt = 0;
++ //XXX is this really correct? we should get the naming right...
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsOutput);
++ if (ports != NULL){
++ while(ports[cnt] != NULL)
++ cnt++;
++ free(ports);
++ return cnt;
++ } else
++ return 0;
++}
++
++std::string JackCpp::AudioIO::getInputPortName(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mInputPorts.size())
++ return std::string(jack_port_name(mInputPorts[index]));
++ else
++ throw std::range_error("inport index out of range");
++
++}
++std::string JackCpp::AudioIO::getOutputPortName(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mOutputPorts.size())
++ return std::string(jack_port_name(mOutputPorts[index]));
++ else
++ throw std::range_error("outport index out of range");
++}
++
++void JackCpp::AudioIO::start()
++ throw(std::runtime_error)
++{
++ //update these so that the callback can use them
++ if(mJackState != active){
++ mNumOutputPorts = mOutputPorts.size();
++ mNumInputPorts = mInputPorts.size();
++ }
++ if (jack_activate(mJackClient) != 0)
++ throw std::runtime_error("cannot activate the client");
++ mJackState = active;
++}
++
++void JackCpp::AudioIO::stop()
++ throw(std::runtime_error)
++{
++ if (jack_deactivate(mJackClient) != 0)
++ throw std::runtime_error("cannot deactivate the client");
++ mJackState = notActive;
++}
++
++void JackCpp::AudioIO::close()
++ throw(std::runtime_error)
++{
++ if (jack_client_close(mJackClient) != 0)
++ throw std::runtime_error("cannot close the client");
++ mJackState = closed;
++}
++
++float JackCpp::AudioIO::getCpuLoad(){
++ return jack_cpu_load(mJackClient);
++}
++
++jack_nframes_t JackCpp::AudioIO::getSampleRate(){
++ return jack_get_sample_rate(mJackClient);
++}
++
++jack_nframes_t JackCpp::AudioIO::getBufferSize(){
++ return jack_get_buffer_size(mJackClient);
++}
++
+Index: xbmc/cores/AudioRenderers/jackaudioio.hpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackaudioio.hpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackaudioio.hpp (revision 1806)
+@@ -0,0 +1,299 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#ifndef JACK_AUDIO_IO_H
++#define JACK_AUDIO_IO_H
++
++extern "C" {
++#include <jack/jack.h>
++#include <jack/types.h>
++#include <jack/ringbuffer.h>
++}
++#include <string>
++#include <vector>
++#include <stdexcept>
++#include "jackringbuffer.hpp"
++
++namespace JackCpp {
++
++/**
++@class AudioIO
++
++@brief This is an abstract class that provides a jack callback method.
++
++This abstract class wraps the Jack Audio IO functionality needed for basic
++audio input and output. In order to create your own jack client you simply
++make your own class that inherits from this class and overloads audioCallback.
++In that method you can get audio in from jack and write it out to jack.
++
++@author Alex Norman
++
++*/
++
++ class AudioIO {
++ public:
++ ///An enum indicating the state of our jack client
++ enum jack_state_t {notActive,active,closed};
++ ///A typedef so so that we don't always have to write std::vector<jack_default_audio_sample_t *>
++ typedef std::vector<jack_default_audio_sample_t *> audioBufVector;
++ private:
++ //commands
++ enum cmd_t {add_in_port, add_out_port};
++ RingBuffer<cmd_t> mCmdBuffer;
++ /* the client */
++ jack_client_t *mJackClient;
++ // an vector of i/o ports
++ std::vector<jack_port_t *> mOutputPorts;
++ std::vector<jack_port_t *> mInputPorts;
++
++ //these are only accessed by the callback [once it is activated]
++ //they will usually be equal mOutputPorts.size() etc, except when
++ //a new port is added, before the callback
++ unsigned int mNumOutputPorts;
++ unsigned int mNumInputPorts;
++
++ //these items are used for grabbing data for the jack callback
++ audioBufVector mJackInBuf;
++ audioBufVector mJackOutBuf;
++ //this stores the state of this jack process [active,notActive,closed]
++ jack_state_t mJackState;
++ //this prepares the input/output buffers to be passed
++ //to the callback function that a user writes
++ //XXX should this be virtual?
++ inline int jackToClassAudioCallback(jack_nframes_t nframes);
++ std::vector<std::string> mPortNames;
++ protected:
++ /**
++ @brief The method that the user must overload in order to actually process jack data.
++ \param nframes the number frames to process
++ \param inBufs a vector of audio buffers
++ \param outBufs a vector of audio buffers
++ \return 0 on success, non zero on error, which will cause jack to remove the client from the process graph
++ */
++ virtual int audioCallback(jack_nframes_t nframes,
++ audioBufVector inBufs,
++ audioBufVector outBufs) = 0;
++
++ public:
++ /**
++ @brief The Constructor
++ \param name string indicating the name of the jack client to create
++ \param inPorts an unsigned integer indicating the number of default input ports to create
++ \param outPorts an unsigned integer indicating the number of default output ports to create
++ \param startServer a boolean indicating whether to start a jack server if one isn't already running
++ \sa audioCallback
++ */
++ AudioIO(std::string name,
++ unsigned int inPorts = 0,
++ unsigned int outPorts = 2,
++#ifdef __APPLE__
++ bool startServer = false)
++#else
++ bool startServer = true)
++#endif
++ throw(std::runtime_error);
++
++ ///The Destructor
++ virtual ~AudioIO();
++
++ /**
++ @brief The callback that jack actually gets [static].
++
++ This is a static method that the C jack callback calls, users
++ should not need to override this method.
++
++ \param nframes the number frames to process
++ \param arg a pointer to our AudioIO object
++ \return the actual number of frames processed
++ \sa audioCallback
++ */
++ static int jackProcessCallback(jack_nframes_t nframes, void *arg);
++
++ ///See if a port with the name "name" exists for our client
++ bool portExists(std::string name);
++
++ /**
++ @brief Reserve output ports
++
++ This method must be called before the client is started. This
++ reserves a number of ports so that they can be safely created while
++ the client is running. The number indicates the maximum number of ports
++ that can be created while the client is running. This number includes
++ those ports that a have already been created, so if you've already created
++ x ports and you reserve y ports total, you can only create y - x ports while
++ the client is running.
++ \param num an integer indicating the number of output ports to reserve
++ */
++ virtual void reserveOutPorts(unsigned int num)
++ throw(std::runtime_error);
++ /**
++ @brief Reserve input ports
++
++ This method must be called before the client is started. This
++ reserves a number of ports so that they can be safely created while
++ the client is running. The number indicates the maximum number of ports
++ that can be created while the client is running. This number includes
++ those ports that a have already been created, so if you've already created
++ x ports and you reserve y ports total, you can only create y - x ports while
++ the client is running.
++ \param num an integer indicating the number of input ports to reserve
++ */
++ virtual void reserveInPorts(unsigned int num)
++ throw(std::runtime_error);
++
++ ///Start the jack client.
++ void start()
++ throw(std::runtime_error);
++ ///Stop the jack client.
++ void stop()
++ throw(std::runtime_error);
++ ///Close the jack client.
++ void close()
++ throw(std::runtime_error);
++
++ ///Get the number of jack input ports
++ unsigned int inPorts();
++ ///Get the number of jack output ports
++ unsigned int outPorts();
++
++ /**
++ @brief Add a jack input port to our client
++ \param name string the name of the port to add
++ \return the number of total input ports
++ */
++ virtual unsigned int addInPort(std::string name)
++ throw(std::runtime_error);
++ /**
++ @brief Add a jack output port to our client
++ \param name string the name of the port to add
++ \return the number of total output ports
++ */
++ virtual unsigned int addOutPort(std::string name)
++ throw(std::runtime_error);
++
++ /**
++ @brief Connect our output to a jack client's source port.
++ \param index the index of our output port to connect from.
++ \param sourcePortName the client:port name to connect to
++ */
++ void connectTo(unsigned int index, std::string sourcePortName)
++ throw(std::range_error, std::runtime_error);
++ /**
++ @brief Connect our input to a jack client's destination port.
++ \param index the index of our input port to connect to
++ \param destPortName the client:port name to connect from
++ */
++ void connectFrom(unsigned int index, std::string destPortName)
++ throw(std::range_error, std::runtime_error);
++ /**
++ @brief Connect our output port to a physical output port
++ \param index the index of our output port to connect from
++ \param physical_index the physical output port index to connect to
++ */
++ void connectToPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error);
++ /**
++ @brief Connect our input port to a physical input port
++ \param index the index of our input port to connect to
++ \param physical_index the physical input port index to connect from
++ */
++ void connectFromPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error);
++ ///Disconnect input port from all connections
++ void disconnectInPort(unsigned int index)
++ throw(std::range_error, std::runtime_error);
++ ///Disconnect output port from all connections
++ void disconnectOutPort(unsigned int index)
++ throw(std::range_error, std::runtime_error);
++
++ ///Get the number of connections to our input port
++ unsigned int numConnectionsInPort(unsigned int index)
++ throw(std::range_error);
++ ///Get the number of connections to our output port
++ unsigned int numConnectionsOutPort(unsigned int index)
++ throw(std::range_error);
++
++ /**
++ @brief Get the number of physical audio input ports
++ These are ports that can send audio to your client
++ */
++ unsigned int numPhysicalSourcePorts();
++ /**
++ @brief Get the number of physical audio output ports
++ These are ports that your client can send audio to
++ */
++ unsigned int numPhysicalDestinationPorts();
++
++ ///Get the name of our client's input port
++ std::string getInputPortName(unsigned int index)
++ throw(std::range_error);
++ ///Get the name of our client's output port
++ std::string getOutputPortName(unsigned int index)
++ throw(std::range_error);
++
++ /**
++ @brief This method is called when Jack shuts down.
++ Override if you want to do something when jack shuts down.
++ */
++ virtual void jackShutdownCallback();
++ /**
++ @brief The current CPU load estimated by JACK
++
++ This is a running average of the time it takes to execute a full
++ process cycle for all clients as a percentage of the real time
++ available per cycle determined by the buffer size and sample rate.
++ */
++ float getCpuLoad();
++ ///Get the sample rate
++ jack_nframes_t getSampleRate();
++ ///Get the jack buffer size
++ jack_nframes_t getBufferSize();
++ ///Check to see if the client is running in real time mode
++ bool isRealTime(){return jack_is_realtime(mJackClient);}
++ /**
++ @brief Get the name of our client
++
++ This might not be exactly the same as the name we provided to the
++ constructor
++
++ \return a string indicating the name of our client.
++ */
++ std::string getName(){return std::string(jack_get_client_name(mJackClient));}
++ ///Get the state of our Jack client.
++ jack_state_t getState(){return mJackState;}
++
++ /**
++ @brief Get an estimate of the current time in frames
++
++ This is a running counter, no significance should be attached to
++ its value, but it can be compared to a previously returned value.
++ \return an estimate of the current time in frames.
++ */
++ jack_nframes_t getFrameTime(){return jack_frame_time(mJackClient);}
++
++ /**
++ @brief Get the time in frames since the JACK server began the current process cycle
++
++ \return the time in frames that has passed since the JACK server began the current process cycle
++ */
++ jack_nframes_t getFramesSinceCycleStart(){return jack_frames_since_cycle_start(mJackClient);}
++ };
++
++}
++
++#endif
+Index: xbmc/cores/AudioRenderers/jackringbuffer.hpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackringbuffer.hpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackringbuffer.hpp (revision 1806)
+@@ -0,0 +1,205 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#ifndef JACK_RING_BUFFER_CLASS_H
++#define JACK_RING_BUFFER_CLASS_H
++
++#ifndef NULL
++#define NULL 0
++#endif
++
++extern "C" {
++#include <jack/ringbuffer.h>
++}
++#include <string.h>
++
++namespace JackCpp {
++
++template<typename Type>
++
++/**
++@class RingBuffer
++
++@brief This template class wraps the Jack lock-free ringbuffer.
++
++This class creates a lock-free ring buffer that accepts a specific data type.
++
++The key attribute of a ringbuffer is that it can be safely accessed by two
++threads simultaneously -- one reading from the buffer and the other writing to
++it -- without using any synchronization or mutual exclusion primitives. For
++this to work correctly, there can only be a single reader and a single writer
++thread. Their identities cannot be interchanged.
++
++@author Alex Norman
++
++*/
++ class RingBuffer {
++ private:
++ jack_ringbuffer_t *mRingBufferPtr;
++ size_t mLength;
++ public:
++ /**
++ @brief The Constructor
++ \param size the number of items that the ring buffer should be able to hold
++ \param mlock a boolean indicating whether or not the ring buffer should be locked in memory
++ */
++ RingBuffer(size_t size, bool mlock = false){
++ mLength = size;
++ mRingBufferPtr = jack_ringbuffer_create(mLength * sizeof(Type));
++
++ //should we lock the memory for the ring buffer?
++ if(mlock)
++ jack_ringbuffer_mlock(mRingBufferPtr);
++ }
++ ///The Destructor
++ ~RingBuffer(){
++ if(mRingBufferPtr != NULL)
++ jack_ringbuffer_free(mRingBufferPtr);
++ }
++
++ ///Get the total length of the ring buffer
++ size_t length(){
++ return mLength;
++ }
++
++ ///Get the number of items that can be read at this time
++ size_t getReadSpace(){
++ return jack_ringbuffer_read_space(mRingBufferPtr) / sizeof(Type);
++ }
++
++ ///Get the number of items that can be written at this time
++ size_t getWriteSpace(){
++ return jack_ringbuffer_write_space(mRingBufferPtr) / sizeof(Type);
++ }
++
++ /**
++ @brief Read into dest
++
++ Read from the buffer into a variable.
++
++ \param dest an item to be read into
++ */
++ void read(Type &dest){
++ if(getReadSpace() <= 0){
++ //throw error!!!!
++ return;
++ }
++ jack_ringbuffer_read(mRingBufferPtr, (char *)&dest, sizeof(Type));
++ }
++
++ /**
++ @brief Read into an array
++
++ Read from the buffer into an array.
++
++ \param dest an array to be read into
++ \param cnt the number of elements to read into this array
++ */
++ void read(Type *dest, unsigned cnt){
++ jack_ringbuffer_data_t readVec[2];
++ unsigned int read_size = sizeof(Type) * cnt;
++ if(getReadSpace() <= 0){
++ //throw error!!!!
++ return;
++ }
++
++ //get the readvector
++ jack_ringbuffer_get_read_vector(mRingBufferPtr, readVec);
++
++ //if the first vector has enough data then just read from there
++ if(readVec[0].len >= read_size){
++ memcpy(dest, readVec[0].buf, read_size);
++ } else {
++ //if the first vector is zero length then read from the second
++ if(readVec[0].len == 0){
++ memcpy(dest, readVec[1].buf, read_size);
++ } else {
++ //this gets tricky
++ char * byterep = (char *)dest;
++ //first read the data out of the first vector
++ memcpy(byterep, readVec[0].buf, readVec[0].len);
++ //then read the rest out of the second
++ memcpy(byterep + readVec[0].len, readVec[1].buf, read_size - readVec[0].len);
++ }
++ }
++ //advance the read pointer
++ jack_ringbuffer_read_advance(mRingBufferPtr, read_size);
++ }
++
++ /**
++ @brief Write into the ring buffer.
++
++ \param src the value to write
++ */
++ void write(Type src){
++ if(getWriteSpace() <= 0){
++ //throw error!!!!
++ return;
++ }
++ jack_ringbuffer_write(mRingBufferPtr, (char *)&src, sizeof(Type));
++ }
++
++ /**
++ @brief Write an array of values into the ring buffer.
++
++ \param src an array of values to write
++ \param cnt the number of items from the array to write into our buffer
++ */
++ void write(Type *src, unsigned int cnt){
++ jack_ringbuffer_data_t writeVec[2];
++ unsigned int write_size = sizeof(Type) * cnt;
++ if(cnt > getWriteSpace()){
++ //throw error!!!!
++ return;
++ }
++
++ //get the write vector
++ jack_ringbuffer_get_write_vector(mRingBufferPtr, writeVec);
++ //if there is enough room in the first vector then just write there
++ if(writeVec[0].len >= write_size){
++ memcpy(writeVec[0].buf,src,write_size);
++ } else {
++ //if there is no room in the first vector then write into the second
++ if(writeVec[0].len == 0){
++ memcpy(writeVec[1].buf,src,write_size);
++ } else {
++ //this is more tricky, we have to split the data up
++ char * byterep = (char *)src;
++ //copy the first chunck
++ memcpy(writeVec[0].buf, byterep, writeVec[0].len);
++ //copy the second chunck
++ memcpy(writeVec[1].buf, byterep + writeVec[0].len, write_size - writeVec[0].len);
++ }
++ }
++ jack_ringbuffer_write_advance(mRingBufferPtr, write_size);
++ }
++
++ /**
++ @brief Reset
++
++ This is not threadsafe. This resets the read and write pointers,
++ effectively making the ring buffer empty.
++ */
++ void reset(){
++ jack_ringbuffer_reset(mRingBufferPtr);
++ }
++ };
++
++}
++
++#endif
+Index: xbmc/cores/AudioRenderers/jackblockingaudioio.cpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackblockingaudioio.cpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackblockingaudioio.cpp (revision 1806)
+@@ -0,0 +1,181 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#include "jackblockingaudioio.hpp"
++#include <unistd.h>
++#define MIN(x,y) ((x) < (y) ? (x) : (y))
++
++#if 0
++#include <iostream>
++using std::cerr;
++using std::cout;
++using std::endl;
++#endif
++
++//allocate input and output buffers
++JackCpp::BlockingAudioIO::BlockingAudioIO(std::string name,
++ unsigned int inChans, unsigned int outChans,
++ unsigned int inBufSize, unsigned int outBufSize,
++ bool startServer) throw(std::runtime_error):
++ AudioIO(name, inChans, outChans, startServer),
++ mOutputBufferMaxSize((unsigned int)getSampleRate()),
++ mInputBufferMaxSize((unsigned int)getSampleRate())
++{
++ if(inBufSize < 2 * getBufferSize())
++ inBufSize = 2 * getBufferSize();
++ else if (inBufSize > mInputBufferMaxSize)
++ inBufSize = mInputBufferMaxSize;
++ if(outBufSize < 2 * getBufferSize())
++ outBufSize = 2 * getBufferSize();
++ else if (outBufSize > mOutputBufferMaxSize)
++ outBufSize = mOutputBufferMaxSize;
++
++ //set the amount of the ring buffer that we leave free
++ mOutputBufferFreeSize = mOutputBufferMaxSize - outBufSize;
++ mInputBufferFreeSize = mInputBufferMaxSize - inBufSize;
++
++ //create input and output buffers, give them extra space to work with and memory lock them
++ for(unsigned int i = 0; i < outChans; i++)
++ mUserOutBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mOutputBufferMaxSize, true));
++ for(unsigned int i = 0; i < inChans; i++)
++ mUserInBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mInputBufferMaxSize, true));
++}
++
++//clean up the buffers we allocated
++JackCpp::BlockingAudioIO::~BlockingAudioIO(){
++ stop();
++ for(std::vector<RingBuffer<jack_default_audio_sample_t> *>::iterator it = mUserOutBuff.begin();
++ it != mUserOutBuff.end(); it++)
++ delete *it;
++ for(std::vector<RingBuffer<jack_default_audio_sample_t> *>::iterator it = mUserInBuff.begin();
++ it != mUserInBuff.end(); it++)
++ delete *it;
++}
++
++//wait until we can write, then write
++void JackCpp::BlockingAudioIO::write(unsigned int channel, jack_default_audio_sample_t val){
++ if (channel >= outPorts())
++ return;
++ while(mUserOutBuff[channel]->getWriteSpace() <= mOutputBufferFreeSize)
++ usleep(10);
++ mUserOutBuff[channel]->write(val);
++}
++
++//we we can write then write, otherwise return false
++bool JackCpp::BlockingAudioIO::tryWrite(unsigned int channel, jack_default_audio_sample_t val){
++ if (channel < outPorts() && mUserOutBuff[channel]->getWriteSpace() > mOutputBufferFreeSize){
++ mUserOutBuff[channel]->write(val);
++ return true;
++ }
++ return false;
++}
++
++//wait until we can read, then return the value
++jack_default_audio_sample_t JackCpp::BlockingAudioIO::read(unsigned int channel){
++ jack_default_audio_sample_t val;
++ if (channel >= inPorts())
++ return 0;
++ while(mUserInBuff[channel]->getReadSpace() == 0)
++ usleep(10);
++ mUserInBuff[channel]->read(val);
++ return val;
++}
++
++//if we cannot read then return false, otherwise, read and return true
++bool JackCpp::BlockingAudioIO::tryRead(unsigned int channel, jack_default_audio_sample_t &val){
++ if (channel >= inPorts() || mUserInBuff[channel]->getReadSpace() == 0)
++ return false;
++ mUserInBuff[channel]->read(val);
++ return true;
++}
++
++void JackCpp::BlockingAudioIO::reserveOutPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ AudioIO::reserveOutPorts(num);
++ mUserOutBuff.reserve(num);
++}
++
++void JackCpp::BlockingAudioIO::reserveInPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ AudioIO::reserveInPorts(num);
++ mUserInBuff.reserve(num);
++}
++
++unsigned int JackCpp::BlockingAudioIO::addInPort(std::string name)
++ throw(std::runtime_error)
++{
++ unsigned int ret;
++ if(getState() == AudioIO::active)
++ throw std::runtime_error("JackCpp::BlockingAudioIO::addInPort not allowed while the client is active");
++ ret = AudioIO::addInPort(name);
++ mUserInBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mInputBufferMaxSize, true));
++ return ret;
++}
++
++unsigned int JackCpp::BlockingAudioIO::addOutPort(std::string name)
++ throw(std::runtime_error)
++{
++ unsigned int ret;
++ if(getState() == AudioIO::active)
++ throw std::runtime_error("JackCpp::BlockingAudioIO::addOutPort not allowed while the client is active");
++ ret = AudioIO::addOutPort(name);
++ mUserOutBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mOutputBufferMaxSize, true));
++ return ret;
++}
++
++//read the jack input buffers into the user input buffers
++//write the user output buffers into the jack output buffers
++int JackCpp::BlockingAudioIO::audioCallback(jack_nframes_t nframes,
++ audioBufVector inBufs,
++ audioBufVector outBufs){
++
++ //only try to write as much as we have space to write
++ unsigned int numToWrite = MIN(mUserOutBuff[0]->getReadSpace(), nframes);
++ unsigned int numToRead = MIN(mUserInBuff[0]->getWriteSpace(), nframes);
++
++ //make sure we leave the amount of free space we require
++ if(mUserInBuff[0]->getWriteSpace() - numToRead < mInputBufferFreeSize)
++ numToRead = mUserInBuff[0]->getWriteSpace() - mInputBufferFreeSize;
++
++ //if (numToWrite < nframes)
++ //cerr << "oops" << endl;
++
++ //read get inputs
++ for(unsigned int i = 0; i < inPorts(); i++){
++ for(unsigned int j = 0; j < numToRead; j++)
++ mUserInBuff[i]->write(inBufs[i][j]);
++ }
++
++ //write output
++ for(unsigned int i = 0; i < outPorts(); i++){
++ for(unsigned int j = 0; j < numToWrite; j++){
++ jack_default_audio_sample_t val;
++ mUserOutBuff[i]->read(val);
++ outBufs[i][j] = val;
++ }
++ //write zeros for the rest
++ for(unsigned int j = numToWrite; j < nframes; j++)
++ outBufs[i][j] = 0.0;
++ //if(numToWrite < nframes)
++ //cerr << "oops" << endl;
++ }
++ return 0;
++}
++
diff --git a/media-tv/xbmc/files/xbmc-99999~beta1-jack.patch b/media-tv/xbmc/files/xbmc-99999~beta1-jack.patch
new file mode 100644
index 0000000..60ed104
--- /dev/null
+++ b/media-tv/xbmc/files/xbmc-99999~beta1-jack.patch
@@ -0,0 +1,1739 @@
+Index: xbmc/cores/AudioRenderers/jackblockingaudioio.hpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackblockingaudioio.hpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackblockingaudioio.hpp (revision 1806)
+@@ -0,0 +1,176 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#ifndef JACK_BLOCKING_AUDIO_IO_HPP
++#define JACK_BLOCKING_AUDIO_IO_HPP
++
++#include "jackaudioio.hpp"
++#include "jackringbuffer.hpp"
++
++namespace JackCpp {
++
++/**
++@class BlockingAudioIO
++
++@brief This is an class that provides a blocking read/write interface for Jack.
++
++This class has read/write methods that allow users to write audio to and read
++audio from a Jack client.
++
++@author Alex Norman
++
++*/
++ class BlockingAudioIO : public AudioIO {
++ public:
++ /**
++ @brief The Constructor
++ \param name string indicating the name of the jack client to create
++ \param inChans an unsigned integer indicating the number of default input ports to create
++ \param outChans an unsigned integer indicating the number of default output ports to create
++ \param inBufSize the size of the buffer that the jack callback fills for us to read with read
++ \param outBufSize the size of the buffer that we write to and the jack callback reads from
++ \param startServer a boolean indicating whether to start a jack server if one isn't already running
++ \sa AudioIO::AudioIO
++ */
++ BlockingAudioIO(std::string name,
++ unsigned int inChans = 2, unsigned int outChans = 2,
++ unsigned int inBufSize = 0, unsigned int outBufSize = 0,
++#ifdef __APPLE__
++ bool startServer = false)
++#else
++ bool startServer = true)
++#endif
++ throw(std::runtime_error);
++ virtual ~BlockingAudioIO();
++
++ /**
++ @brief Write to an output buffer
++
++ Writes val to the output[channel] (if it exists). If
++ output[channel] does not exist is silently fails otherwise it
++ sleeps until it can write output[channel]
++
++ \param channel the output chanel to write to
++ \param val the value to write to the channel
++ \sa tryWrite(unsigned int channel, jack_default_audio_sample_t val)
++ */
++ void write(unsigned int channel, jack_default_audio_sample_t val);
++
++ /**
++ @brief Try to write to an output buffer
++
++ Trys to write to output[channel] (if it exists). If it succeeds it
++ returns true. If it fails, because the buffer is full, it returns
++ false.
++
++ \param channel the output chanel to write to
++ \param val the value to write to the channel
++ \return true if it can write, false if it cannot
++ \sa write(unsigned int channel, jack_default_audio_sample_t val)
++ */
++ bool tryWrite(unsigned int channel, jack_default_audio_sample_t val);
++
++ /**
++ @brief Read from an input buffer.
++
++ Reads from input[channel] if it exists. If there is no input to
++ read it sleeps until there is.
++
++ \param channel the input chanel to read from
++ \return the value read from the input channel [will be zero if the channel does not exist]
++ \sa tryRead(unsigned int channel, jack_default_audio_sample_t &val)
++ */
++ jack_default_audio_sample_t read(unsigned int channel);
++
++ /**
++ @brief Try to read from to an input buffer
++
++ Trys to read from input[channel] (if it exists). If it succeeds it
++ returns true. If it fails, because the buffer is empty, it returns
++ false.
++
++ \param channel the output chanel to read from
++ \param val the value to read into (basically a return value)
++ \return true if it can read, false if it cannot
++ \sa read(unsigned int channel)
++ */
++ bool tryRead(unsigned int channel, jack_default_audio_sample_t &val);
++
++ //XXX reserve exists but is basically useless as you cannot
++ //add ports while the client is active
++ ///This method is useless at the moment.
++ virtual void reserveOutPorts(unsigned int num)
++ throw(std::runtime_error);
++ ///This method is useless at the moment.
++ virtual void reserveInPorts(unsigned int num)
++ throw(std::runtime_error);
++
++ /**
++ @brief Add an input port to our client
++
++ Unlike AudioIO, this currently cannot be called while the client is running.
++
++ \param name string the name of the port to add
++ \return the number of total input ports
++ \sa AudioIO::addInPort(std::string name)
++ */
++ virtual unsigned int addInPort(std::string name)
++ throw(std::runtime_error);
++ /**
++ @brief Add an output port to our client
++
++ Unlike AudioIO, this currently cannot be called while the client is running.
++
++ \param name string the name of the port to add
++ \return the number of total output ports
++ \sa AudioIO::addOutPort(std::string name)
++ */
++ virtual unsigned int addOutPort(std::string name)
++ throw(std::runtime_error);
++
++ protected:
++ /**
++ @brief This is the callback that processes our buffers.
++
++ This method takes the buffers we write to with "write" and writes
++ them out to the Jack bus. It also takes audio from the Jack bus
++ and uses that to fill the input buffers that we read from.
++
++ \param nframes the number frames to process
++ \param inBufs a vector of audio buffers
++ \param outBufs a vector of audio buffers
++ \return the actual number of frames processed
++ */
++ virtual int audioCallback(jack_nframes_t nframes,
++ std::vector<jack_default_audio_sample_t *> inBufs,
++ std::vector<jack_default_audio_sample_t *> outBufs);
++ private:
++ std::vector<RingBuffer<jack_default_audio_sample_t> *> mUserOutBuff;
++ std::vector<RingBuffer<jack_default_audio_sample_t> *> mUserInBuff;
++
++ //this is the size of the ring buffers that we alloc
++ const unsigned int mOutputBufferMaxSize;
++ const unsigned int mInputBufferMaxSize;
++ //this is the amount of free space we leave in the ring buffers
++ //this can decrease so that we'll have more latency but fewer glitches
++ unsigned int mOutputBufferFreeSize;
++ unsigned int mInputBufferFreeSize;
++ };
++}
++#endif
++
+Index: xbmc/cores/AudioRenderers/Makefile.in
+===================================================================
+--- xbmc/cores/AudioRenderers/Makefile.in
++++ xbmc/cores/AudioRenderers/Makefile.in
+@@ -2,12 +2,18 @@
+
+ ifeq ($(findstring osx,$(ARCH)), osx)
+ SRCS = \
++ jackaudioio.cpp \
++ jackblockingaudioio.cpp \
++ JackDirectSound.cpp \
+ NullDirectSound.cpp \
+ AudioRendererFactory.cpp \
+ CoreAudioRenderer.cpp \
+
+ else
+ SRCS = \
++ jackaudioio.cpp \
++ jackblockingaudioio.cpp \
++ JackDirectSound.cpp \
+ NullDirectSound.cpp \
+ AudioRendererFactory.cpp \
+
+Index: xbmc/cores/AudioRenderers/JackDirectSound.cpp
+===================================================================
+--- xbmc/cores/AudioRenderers/JackDirectSound.cpp (revision 0)
++++ xbmc/cores/AudioRenderers/JackDirectSound.cpp (revision 1806)
+@@ -0,0 +1,243 @@
++/*
++ * Copyright (C) 2005-2008 Team XBMC
++ * http://www.xbmc.org
++ *
++ * This Program 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 2, or (at your option)
++ * any later version.
++ *
++ * This Program 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 XBMC; see the file COPYING. If not, write to
++ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
++ * http://www.gnu.org/copyleft/gpl.html
++ *
++ */
++
++#include "JackDirectSound.h"
++#include "AudioContext.h"
++#include "Application.h"
++#include "utils/log.h"
++#include "utils/TimeUtils.h"
++
++#define BUFFER CHUNKLEN * 20
++#define CHUNKLEN 512
++
++
++void CJackDirectSound::DoWork()
++{
++
++}
++
++//////////////////////////////////////////////////////////////////////
++// Construction/Destruction
++//////////////////////////////////////////////////////////////////////
++//***********************************************************************************************
++CJackDirectSound::CJackDirectSound()
++{
++ jackBuffer = 0;
++}
++bool CJackDirectSound::Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, const char* strAudioCodec, bool bIsMusic, bool bPassthrough)
++{
++ CLog::Log(LOGERROR,"Jack.Initialize() - Channels: %i - SampleRate: %i - SampleBit: %i - Resample %s - Codec %s - IsMusic %s - IsPassthrough %s", iChannels, uiSamplesPerSec, uiBitsPerSample, bResample ? "true" : "false", strAudioCodec, bIsMusic ? "true" : "false", bPassthrough ? "true" : "false");
++ if (iChannels == 0)
++ iChannels = 2;
++
++ bool bAudioOnAllSpeakers(false);
++ g_audioContext.SetupSpeakerConfig(iChannels, bAudioOnAllSpeakers, bIsMusic);
++ g_audioContext.SetActiveDevice(CAudioContext::DIRECTSOUND_DEVICE);
++
++
++ jackBuffer = new JackCpp::BlockingAudioIO("XBMC.Jack", iChannels, iChannels);
++ jackBuffer->start();
++ for(int i = 0; i < iChannels; i++){
++ jackBuffer->connectToPhysical(i,i);
++ }
++ m_uiChannels = iChannels;
++
++ //g_application.m_guiDialogKaiToast.QueueNotification("Failed to initialize audio device", "Check your audiosettings"
++
++ m_timePerPacket = 1.0f / (float)(iChannels*(uiBitsPerSample/8) * uiSamplesPerSec);
++ m_packetsSent = 0;
++ m_paused = 0;
++ m_lastUpdate = CTimeUtils::GetTimeMS();
++ return true;
++}
++
++//***********************************************************************************************
++CJackDirectSound::~CJackDirectSound()
++{
++ Deinitialize();
++}
++
++
++//***********************************************************************************************
++bool CJackDirectSound::Deinitialize()
++{
++ CLog::Log(LOGERROR,"Jack.Deinitialize");
++ if (jackBuffer) {
++ for(int i = 0; i < m_uiChannels; i++){
++ jackBuffer->disconnectOutPort(i);
++ }
++ jackBuffer->close();
++ //TODO: Cannot delete jackBuffer, otherwise will crash.
++ //delete jackBuffer;
++ }
++ jackBuffer = 0;
++
++ g_audioContext.SetActiveDevice(CAudioContext::DEFAULT_DEVICE);
++ return true;
++}
++
++void CJackDirectSound::Flush()
++{
++ m_lastUpdate = CTimeUtils::GetTimeMS();
++ m_packetsSent = 0;
++ Pause();
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::Pause()
++{
++ m_paused = true;
++ return true;
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::Resume()
++{
++ m_paused = false;
++ return true;
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::Stop()
++{
++ Flush();
++ return true;
++}
++
++//***********************************************************************************************
++long CJackDirectSound::GetCurrentVolume() const
++{
++ return m_nCurrentVolume;
++}
++
++//***********************************************************************************************
++void CJackDirectSound::Mute(bool bMute)
++{
++}
++
++//***********************************************************************************************
++bool CJackDirectSound::SetCurrentVolume(long nVolume)
++{
++ m_nCurrentVolume = nVolume;
++ return true;
++}
++
++
++//***********************************************************************************************
++unsigned int CJackDirectSound::GetSpace()
++{
++ Update();
++
++ if(BUFFER > m_packetsSent)
++ return (int)BUFFER - m_packetsSent;
++ else
++ return 0;
++}
++
++//***********************************************************************************************
++unsigned int CJackDirectSound::AddPackets(const void* data, unsigned int len)
++{
++ if (m_paused)
++ return 0;
++ Update();
++
++ int add = ( len / GetChunkLen() ) * GetChunkLen();
++ m_packetsSent += add;
++
++ CLog::Log(LOGERROR,"Jack.AddPackets() len=%d, add=%d", len, add);
++
++ if (jackBuffer){
++ short* pSamples = (short*)data;
++ for (int i=0; i< add/sizeof(short)/m_uiChannels; i++){
++ for(unsigned int j = 0; j < m_uiChannels; j++){
++ jackBuffer->write(j, (float) pSamples[i*m_uiChannels + j] / 32768.0);
++ }
++ }
++ }
++
++ return add;
++}
++
++//***********************************************************************************************
++float CJackDirectSound::GetDelay()
++{
++ Update();
++
++ return m_timePerPacket * (float)m_packetsSent + 0.4;
++}
++
++float CJackDirectSound::GetCacheTime()
++{
++ return GetDelay();
++}
++
++//***********************************************************************************************
++unsigned int CJackDirectSound::GetChunkLen()
++{
++ return (int)CHUNKLEN;
++}
++//***********************************************************************************************
++int CJackDirectSound::SetPlaySpeed(int iSpeed)
++{
++ return 0;
++}
++
++void CJackDirectSound::RegisterAudioCallback(IAudioCallback *pCallback)
++{
++}
++
++void CJackDirectSound::UnRegisterAudioCallback()
++{
++}
++
++void CJackDirectSound::WaitCompletion()
++{
++ while(m_packetsSent > 0)
++ Update();
++}
++
++void CJackDirectSound::SwitchChannels(int iAudioStream, bool bAudioOnAllSpeakers)
++{
++ return ;
++}
++
++void CJackDirectSound::Update()
++{
++ long currentTime = CTimeUtils::GetTimeMS();
++ long deltaTime = (currentTime - m_lastUpdate);
++
++ if (m_paused)
++ {
++ m_lastUpdate += deltaTime;
++ return;
++ }
++
++ double d = (double)deltaTime / 1000.0f;
++
++ if (currentTime != m_lastUpdate)
++ {
++ double i = (d / (double)m_timePerPacket);
++ m_packetsSent -= (long)i;
++ if (m_packetsSent < 0)
++ m_packetsSent = 0;
++ m_lastUpdate = currentTime;
++ }
++}
+Index: xbmc/cores/AudioRenderers/AudioRendererFactory.cpp
+===================================================================
+--- xbmc/cores/AudioRenderers/AudioRendererFactory.cpp (revision 1805)
++++ xbmc/cores/AudioRenderers/AudioRendererFactory.cpp (revision 1806)
+@@ -24,6 +24,7 @@
+ #include "settings/GUISettings.h"
+ #include "utils/log.h"
+ #include "NullDirectSound.h"
++#include "JackDirectSound.h"
+
+ #ifdef HAS_PULSEAUDIO
+ #include "PulseAudioDirectSound.h"
+@@ -136,6 +136,10 @@
+
+ device = deviceString;
+
++//For Jack
++ audioSink = new CJackDirectSound();
++ ReturnOnValidInitialize();
++
+ /* First pass creation */
+ #ifdef HAS_PULSEAUDIO
+ CreateAndReturnOnValidInitialize(CPulseAudioDirectSound);
+Index: xbmc/cores/AudioRenderers/JackDirectSound.h
+===================================================================
+--- xbmc/cores/AudioRenderers/JackDirectSound.h (revision 0)
++++ xbmc/cores/AudioRenderers/JackDirectSound.h (revision 1806)
+@@ -0,0 +1,79 @@
++/*
++ * Copyright (C) 2005-2008 Team XBMC
++ * http://www.xbmc.org
++ *
++ * This Program 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 2, or (at your option)
++ * any later version.
++ *
++ * This Program 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 XBMC; see the file COPYING. If not, write to
++ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
++ * http://www.gnu.org/copyleft/gpl.html
++ *
++ */
++
++#ifndef __JACK_DIRECT_SOUND_H__
++#define __JACK_DIRECT_SOUND_H__
++
++#if _MSC_VER > 1000
++#pragma once
++#endif // _MSC_VER > 1000
++
++#include "IAudioRenderer.h"
++#include "IAudioCallback.h"
++
++#include "jackblockingaudioio.hpp"
++
++extern void RegisterAudioCallback(IAudioCallback* pCallback);
++extern void UnRegisterAudioCallback();
++
++class CJackDirectSound : public IAudioRenderer
++{
++public:
++ virtual void UnRegisterAudioCallback();
++ virtual void RegisterAudioCallback(IAudioCallback* pCallback);
++ virtual unsigned int GetChunkLen();
++ virtual float GetDelay();
++ virtual float GetCacheTime();
++ CJackDirectSound();
++ virtual bool Initialize(IAudioCallback* pCallback, const CStdString& device, int iChannels, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, const char* strAudioCodec = "", bool bIsMusic=false, bool bPassthrough = false);
++ virtual ~CJackDirectSound();
++
++ virtual unsigned int AddPackets(const void* data, unsigned int len);
++ virtual unsigned int GetSpace();
++ virtual bool Deinitialize();
++ virtual bool Pause();
++ virtual bool Stop();
++ virtual bool Resume();
++
++ virtual long GetCurrentVolume() const;
++ virtual void Mute(bool bMute);
++ virtual bool SetCurrentVolume(long nVolume);
++ virtual int SetPlaySpeed(int iSpeed);
++ virtual void WaitCompletion();
++ virtual void DoWork();
++ virtual void SwitchChannels(int iAudioStream, bool bAudioOnAllSpeakers);
++
++ virtual void Flush();
++private:
++ long m_nCurrentVolume;
++
++ float m_timePerPacket;
++ int m_packetsSent;
++ bool m_paused;
++ long m_lastUpdate;
++
++ int m_uiChannels;
++ JackCpp::BlockingAudioIO* jackBuffer;
++
++ void Update();
++};
++
++#endif
+Index: xbmc/cores/AudioRenderers/jackaudioio.cpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackaudioio.cpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackaudioio.cpp (revision 1806)
+@@ -0,0 +1,475 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#include "jackaudioio.hpp"
++#include <iostream>
++#include <errno.h>
++#include <sstream>
++#include <algorithm>
++
++template <typename T>
++std::string ToString(T aValue){
++ std::stringstream ss;
++ ss << aValue;
++ return ss.str();
++}
++
++/* callback for jack's error messages */
++static void error_callback (const char *msg) {
++ std::cerr << "Jack:" << msg << std::endl;
++ std::cerr.flush();
++}
++
++static void shutdown_callback (void *arg) {
++ return ((JackCpp::AudioIO *)arg)->jackShutdownCallback();
++}
++
++void JackCpp::AudioIO::jackShutdownCallback(){
++ std::cerr << std::endl << "jack has shutdown" << std::endl;
++}
++
++int JackCpp::AudioIO::jackProcessCallback(jack_nframes_t nframes, void *arg){
++ JackCpp::AudioIO* callbackjackobject = (AudioIO * )arg;
++ return callbackjackobject->jackToClassAudioCallback(nframes);
++}
++
++int JackCpp::AudioIO::jackToClassAudioCallback(jack_nframes_t nframes){
++ //read in commands
++ while(mCmdBuffer.getReadSpace() > 0){
++ cmd_t cmd;
++ mCmdBuffer.read(cmd);
++ switch(cmd){
++ case add_in_port:
++ //we will have tested that we have this capacity, so we resize the buffer
++ //to include the new port
++ mJackInBuf.resize(mJackInBuf.size() + 1);
++ mNumInputPorts++;
++ break;
++ case add_out_port:
++ //we will have tested that we have this capacity, so we resize the buffer
++ //to include the new port
++ mJackOutBuf.resize(mJackOutBuf.size() + 1);
++ mNumOutputPorts++;
++ break;
++ }
++ }
++
++ //get the input and output buffers
++ for(unsigned int i = 0; i < mNumInputPorts; i++)
++ mJackInBuf[i] = (jack_default_audio_sample_t *) jack_port_get_buffer ( mInputPorts[i], nframes);
++ for(unsigned int i = 0; i < mNumOutputPorts; i++)
++ mJackOutBuf[i] = (jack_default_audio_sample_t *) jack_port_get_buffer ( mOutputPorts[i], nframes);
++
++ return audioCallback(nframes, mJackInBuf, mJackOutBuf);
++}
++
++JackCpp::AudioIO::AudioIO(std::string name, unsigned int inPorts, unsigned int outPorts, bool startServer)
++ throw(std::runtime_error) : mCmdBuffer(256,true)
++{
++ jack_options_t jack_open_options = JackNullOption;
++
++ if(startServer == false)
++ jack_open_options = JackNoStartServer;
++
++ mJackState = notActive;
++
++ //set the error callback
++ jack_set_error_function (error_callback);
++
++ /* try to become a client of the JACK server */
++ if ((mJackClient = jack_client_open (name.c_str(), jack_open_options, NULL)) == 0) {
++ throw std::runtime_error("cannot create client jack server not running?");
++ }
++#ifdef __APPLE__
++ else {
++ // because the mac version of jack is being totally LAME
++ sleep(2);
++ }
++#endif
++
++ //set the shutdown callback
++ jack_on_shutdown (mJackClient, shutdown_callback, this);
++
++ //allocate ports
++ if (inPorts > 0){
++ for(unsigned int i = 0; i < inPorts; i++){
++ std::string portname = "input";
++ portname.append(ToString(i));
++ mInputPorts.push_back(
++ jack_port_register (mJackClient, portname.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0));
++ mPortNames.push_back(portname);
++ }
++ //reserve the data for the jack callback buffers
++ for(unsigned int i = 0; i < mInputPorts.size(); i++)
++ mJackInBuf.push_back(NULL);
++ }
++ if (outPorts > 0){
++ for(unsigned int i = 0; i < outPorts; i++){
++ std::string portname = "output";
++ portname.append(ToString(i));
++ mOutputPorts.push_back(
++ jack_port_register (mJackClient, portname.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0));
++ mPortNames.push_back(portname);
++ }
++ //reserve the data for the jack callback buffers
++ for(unsigned int i = 0; i < mOutputPorts.size(); i++)
++ mJackOutBuf.push_back(NULL);
++ }
++
++ //set up the callback
++ if(0 != jack_set_process_callback (mJackClient, JackCpp::AudioIO::jackProcessCallback, this))
++ throw std::runtime_error("cannot register process callback");
++}
++
++
++JackCpp::AudioIO::~AudioIO(){
++ //make sure to deactiveate the client if we need to
++ switch(mJackState){
++ case active:
++ stop();
++ close();
++ break;
++ case notActive:
++ close();
++ break;
++ default:
++ break;
++ //do nothing
++ }
++}
++
++bool JackCpp::AudioIO::portExists(std::string name){
++ //see if the port name exists
++ std::vector<std::string>::iterator it;
++ it = std::find(mPortNames.begin(),mPortNames.end(), name);
++ if (it != mPortNames.end())
++ return true;
++ else
++ return false;
++}
++
++void JackCpp::AudioIO::reserveOutPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ if(getState() == active)
++ throw std::runtime_error("reserving ports while the client is running is not supported yet.");
++ mOutputPorts.reserve(num);
++ mJackOutBuf.reserve(num);
++}
++
++void JackCpp::AudioIO::reserveInPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ if(getState() == active)
++ throw std::runtime_error("reserving ports while the client is running is not supported yet.");
++ mInputPorts.reserve(num);
++ mJackInBuf.reserve(num);
++}
++
++unsigned int JackCpp::AudioIO::inPorts(){
++ return mInputPorts.size();
++}
++
++unsigned int JackCpp::AudioIO::outPorts(){
++ return mOutputPorts.size();
++}
++
++unsigned int JackCpp::AudioIO::addInPort(std::string name)
++ throw(std::runtime_error)
++{
++ if (mJackState == active && mInputPorts.size() == mInputPorts.capacity())
++ throw std::runtime_error("trying to add input ports while the client is running and there are not reserved ports");
++
++ if(portExists(name)){
++ std::string ret_string("cannot register new inport: ");
++ ret_string.append(name);
++ ret_string.append(" port already exists with that name");
++ throw std::runtime_error(ret_string);
++ }
++
++ //allocate the item in the vector
++ jack_port_t * newPort = jack_port_register (mJackClient, name.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
++ if(newPort == NULL){
++ std::string ret_string("cannot register new inport: ");
++ ret_string.append(name);
++ throw std::runtime_error(ret_string);
++ }
++ mInputPorts.push_back(newPort);
++ mPortNames.push_back(name);
++
++ //if we're active then send a command indicating this change
++ if (mJackState == active) {
++ //loop while there isn't space to write
++ while(mCmdBuffer.getWriteSpace() == 0);
++ mCmdBuffer.write(add_in_port);
++ } else
++ mJackInBuf.push_back(NULL);
++
++ return mInputPorts.size() - 1;
++}
++
++//add an output port, if we are active then deactivate and reactivate after
++//maybe we can do this more intelligently in the future?
++unsigned int JackCpp::AudioIO::addOutPort(std::string name)
++ throw(std::runtime_error)
++{
++ if (mJackState == active && mOutputPorts.size() == mOutputPorts.capacity())
++ throw std::runtime_error("trying to add output ports while the client is running and there are not reserved ports");
++
++ if(portExists(name)){
++ std::string ret_string("cannot register new outport: ");
++ ret_string.append(name);
++ ret_string.append(" port already exists with that name");
++ throw std::runtime_error(ret_string);
++ }
++
++ //allocate the item in the vector
++ jack_port_t * newPort = jack_port_register (mJackClient, name.c_str(), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
++ if(newPort == NULL){
++ std::string ret_string("cannot register new outport: ");
++ ret_string.append(name);
++ throw std::runtime_error(ret_string);
++ }
++ mOutputPorts.push_back(newPort);
++ mPortNames.push_back(name);
++
++ //if we're active then send a command indicating this change
++ if (mJackState == active) {
++ //loop while there isn't space to write
++ while(mCmdBuffer.getWriteSpace() == 0);
++ mCmdBuffer.write(add_out_port);
++ } else
++ mJackOutBuf.push_back(NULL);
++
++ return mOutputPorts.size() - 1;
++}
++
++void JackCpp::AudioIO::connectTo(unsigned int index, std::string destPortName)
++ throw(std::range_error, std::runtime_error)
++{
++ int connect_ret;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if(index < mOutputPorts.size()){
++ connect_ret = jack_connect(mJackClient, jack_port_name(mOutputPorts[index]), destPortName.c_str());
++ if(connect_ret != 0 && connect_ret != EEXIST){
++ std::string ret_string("cannot connect source: ");
++ ret_string.append(jack_port_name(mOutputPorts[index]));
++ ret_string.append(" to dest: ");
++ ret_string.append(destPortName);
++ ret_string.append(" does dest exist?");
++ throw std::range_error(ret_string);
++ }
++ } else
++ throw std::range_error("outport index out of range");
++}
++
++void JackCpp::AudioIO::connectFrom(unsigned int index, std::string sourcePortName)
++ throw(std::range_error, std::runtime_error)
++{
++ int connect_ret;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if(index < mInputPorts.size()){
++ connect_ret = jack_connect(mJackClient, sourcePortName.c_str(), jack_port_name(mInputPorts[index]));
++ if(connect_ret != 0 && connect_ret != EEXIST){
++ std::string ret_string("cannot connect source: ");
++ ret_string.append(sourcePortName);
++ ret_string.append(" to dest: ");
++ ret_string.append(jack_port_name(mInputPorts[index]));
++ ret_string.append(" does source exist?");
++ throw std::range_error(ret_string);
++ }
++ } else
++ throw std::range_error("inport index out of range");
++}
++
++//XXX should the "free" free the names that these ports point too as well?
++void JackCpp::AudioIO::connectToPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error)
++{
++ const char **ports;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if (index > mOutputPorts.size())
++ throw std::range_error("outport index out of range");
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsInput);
++ if(ports == NULL){
++ throw std::range_error("no physical inports to connect to");
++ }
++ //make sure the port exists
++ for(unsigned int i = 0; i <= physical_index; i++){
++ if(ports[i] == NULL){
++ free(ports);
++ throw std::range_error("physical inport index out of range");
++ }
++ }
++ connectTo(index, ports[physical_index]);
++ free(ports);
++}
++
++//XXX should the "free" free the names that these ports point too as well?
++void JackCpp::AudioIO::connectFromPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error)
++{
++ const char **ports;
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before connecting ports");
++ if (index > mInputPorts.size())
++ throw std::range_error("inport index out of range");
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsOutput);
++ if(ports == NULL){
++ throw std::range_error("no physical outports to connect to");
++ }
++ //make sure the port exists
++ for(unsigned int i = 0; i <= physical_index; i++){
++ if(ports[i] == NULL){
++ free(ports);
++ throw std::range_error("physical outport index out of range");
++ }
++ }
++ connectFrom(index, ports[physical_index]);
++ free(ports);
++}
++
++void JackCpp::AudioIO::disconnectInPort(unsigned int index)
++ throw(std::range_error, std::runtime_error)
++{
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before disconnecting ports");
++ if(index < mInputPorts.size()){
++ jack_port_disconnect(mJackClient, mInputPorts[index]);
++ } else
++ throw std::range_error("inport index out of range");
++}
++
++void JackCpp::AudioIO::disconnectOutPort(unsigned int index)
++ throw(std::range_error, std::runtime_error)
++{
++ if (mJackState != active)
++ throw std::runtime_error("client must be active before disconnecting ports");
++ if(index < mOutputPorts.size()){
++ jack_port_disconnect(mJackClient, mOutputPorts[index]);
++ } else
++ throw std::range_error("outport index out of range");
++}
++
++unsigned int JackCpp::AudioIO::numConnectionsInPort(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mInputPorts.size())
++ return jack_port_connected(mInputPorts[index]);
++ else
++ throw std::range_error("inport index out of range");
++}
++
++unsigned int JackCpp::AudioIO::numConnectionsOutPort(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mOutputPorts.size())
++ return jack_port_connected(mOutputPorts[index]);
++ else
++ throw std::range_error("outport index out of range");
++}
++
++unsigned int JackCpp::AudioIO::numPhysicalDestinationPorts(){
++ const char **ports;
++ unsigned int cnt = 0;
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsInput);
++ if (ports != NULL){
++ while(ports[cnt] != NULL)
++ cnt++;
++ free(ports);
++ return cnt;
++ } else
++ return 0;
++}
++
++unsigned int JackCpp::AudioIO::numPhysicalSourcePorts(){
++ const char **ports;
++ unsigned int cnt = 0;
++ //XXX is this really correct? we should get the naming right...
++ ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsOutput);
++ if (ports != NULL){
++ while(ports[cnt] != NULL)
++ cnt++;
++ free(ports);
++ return cnt;
++ } else
++ return 0;
++}
++
++std::string JackCpp::AudioIO::getInputPortName(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mInputPorts.size())
++ return std::string(jack_port_name(mInputPorts[index]));
++ else
++ throw std::range_error("inport index out of range");
++
++}
++std::string JackCpp::AudioIO::getOutputPortName(unsigned int index)
++ throw(std::range_error)
++{
++ if(index < mOutputPorts.size())
++ return std::string(jack_port_name(mOutputPorts[index]));
++ else
++ throw std::range_error("outport index out of range");
++}
++
++void JackCpp::AudioIO::start()
++ throw(std::runtime_error)
++{
++ //update these so that the callback can use them
++ if(mJackState != active){
++ mNumOutputPorts = mOutputPorts.size();
++ mNumInputPorts = mInputPorts.size();
++ }
++ if (jack_activate(mJackClient) != 0)
++ throw std::runtime_error("cannot activate the client");
++ mJackState = active;
++}
++
++void JackCpp::AudioIO::stop()
++ throw(std::runtime_error)
++{
++ if (jack_deactivate(mJackClient) != 0)
++ throw std::runtime_error("cannot deactivate the client");
++ mJackState = notActive;
++}
++
++void JackCpp::AudioIO::close()
++ throw(std::runtime_error)
++{
++ if (jack_client_close(mJackClient) != 0)
++ throw std::runtime_error("cannot close the client");
++ mJackState = closed;
++}
++
++float JackCpp::AudioIO::getCpuLoad(){
++ return jack_cpu_load(mJackClient);
++}
++
++jack_nframes_t JackCpp::AudioIO::getSampleRate(){
++ return jack_get_sample_rate(mJackClient);
++}
++
++jack_nframes_t JackCpp::AudioIO::getBufferSize(){
++ return jack_get_buffer_size(mJackClient);
++}
++
+Index: xbmc/cores/AudioRenderers/jackaudioio.hpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackaudioio.hpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackaudioio.hpp (revision 1806)
+@@ -0,0 +1,299 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#ifndef JACK_AUDIO_IO_H
++#define JACK_AUDIO_IO_H
++
++extern "C" {
++#include <jack/jack.h>
++#include <jack/types.h>
++#include <jack/ringbuffer.h>
++}
++#include <string>
++#include <vector>
++#include <stdexcept>
++#include "jackringbuffer.hpp"
++
++namespace JackCpp {
++
++/**
++@class AudioIO
++
++@brief This is an abstract class that provides a jack callback method.
++
++This abstract class wraps the Jack Audio IO functionality needed for basic
++audio input and output. In order to create your own jack client you simply
++make your own class that inherits from this class and overloads audioCallback.
++In that method you can get audio in from jack and write it out to jack.
++
++@author Alex Norman
++
++*/
++
++ class AudioIO {
++ public:
++ ///An enum indicating the state of our jack client
++ enum jack_state_t {notActive,active,closed};
++ ///A typedef so so that we don't always have to write std::vector<jack_default_audio_sample_t *>
++ typedef std::vector<jack_default_audio_sample_t *> audioBufVector;
++ private:
++ //commands
++ enum cmd_t {add_in_port, add_out_port};
++ RingBuffer<cmd_t> mCmdBuffer;
++ /* the client */
++ jack_client_t *mJackClient;
++ // an vector of i/o ports
++ std::vector<jack_port_t *> mOutputPorts;
++ std::vector<jack_port_t *> mInputPorts;
++
++ //these are only accessed by the callback [once it is activated]
++ //they will usually be equal mOutputPorts.size() etc, except when
++ //a new port is added, before the callback
++ unsigned int mNumOutputPorts;
++ unsigned int mNumInputPorts;
++
++ //these items are used for grabbing data for the jack callback
++ audioBufVector mJackInBuf;
++ audioBufVector mJackOutBuf;
++ //this stores the state of this jack process [active,notActive,closed]
++ jack_state_t mJackState;
++ //this prepares the input/output buffers to be passed
++ //to the callback function that a user writes
++ //XXX should this be virtual?
++ inline int jackToClassAudioCallback(jack_nframes_t nframes);
++ std::vector<std::string> mPortNames;
++ protected:
++ /**
++ @brief The method that the user must overload in order to actually process jack data.
++ \param nframes the number frames to process
++ \param inBufs a vector of audio buffers
++ \param outBufs a vector of audio buffers
++ \return 0 on success, non zero on error, which will cause jack to remove the client from the process graph
++ */
++ virtual int audioCallback(jack_nframes_t nframes,
++ audioBufVector inBufs,
++ audioBufVector outBufs) = 0;
++
++ public:
++ /**
++ @brief The Constructor
++ \param name string indicating the name of the jack client to create
++ \param inPorts an unsigned integer indicating the number of default input ports to create
++ \param outPorts an unsigned integer indicating the number of default output ports to create
++ \param startServer a boolean indicating whether to start a jack server if one isn't already running
++ \sa audioCallback
++ */
++ AudioIO(std::string name,
++ unsigned int inPorts = 0,
++ unsigned int outPorts = 2,
++#ifdef __APPLE__
++ bool startServer = false)
++#else
++ bool startServer = true)
++#endif
++ throw(std::runtime_error);
++
++ ///The Destructor
++ virtual ~AudioIO();
++
++ /**
++ @brief The callback that jack actually gets [static].
++
++ This is a static method that the C jack callback calls, users
++ should not need to override this method.
++
++ \param nframes the number frames to process
++ \param arg a pointer to our AudioIO object
++ \return the actual number of frames processed
++ \sa audioCallback
++ */
++ static int jackProcessCallback(jack_nframes_t nframes, void *arg);
++
++ ///See if a port with the name "name" exists for our client
++ bool portExists(std::string name);
++
++ /**
++ @brief Reserve output ports
++
++ This method must be called before the client is started. This
++ reserves a number of ports so that they can be safely created while
++ the client is running. The number indicates the maximum number of ports
++ that can be created while the client is running. This number includes
++ those ports that a have already been created, so if you've already created
++ x ports and you reserve y ports total, you can only create y - x ports while
++ the client is running.
++ \param num an integer indicating the number of output ports to reserve
++ */
++ virtual void reserveOutPorts(unsigned int num)
++ throw(std::runtime_error);
++ /**
++ @brief Reserve input ports
++
++ This method must be called before the client is started. This
++ reserves a number of ports so that they can be safely created while
++ the client is running. The number indicates the maximum number of ports
++ that can be created while the client is running. This number includes
++ those ports that a have already been created, so if you've already created
++ x ports and you reserve y ports total, you can only create y - x ports while
++ the client is running.
++ \param num an integer indicating the number of input ports to reserve
++ */
++ virtual void reserveInPorts(unsigned int num)
++ throw(std::runtime_error);
++
++ ///Start the jack client.
++ void start()
++ throw(std::runtime_error);
++ ///Stop the jack client.
++ void stop()
++ throw(std::runtime_error);
++ ///Close the jack client.
++ void close()
++ throw(std::runtime_error);
++
++ ///Get the number of jack input ports
++ unsigned int inPorts();
++ ///Get the number of jack output ports
++ unsigned int outPorts();
++
++ /**
++ @brief Add a jack input port to our client
++ \param name string the name of the port to add
++ \return the number of total input ports
++ */
++ virtual unsigned int addInPort(std::string name)
++ throw(std::runtime_error);
++ /**
++ @brief Add a jack output port to our client
++ \param name string the name of the port to add
++ \return the number of total output ports
++ */
++ virtual unsigned int addOutPort(std::string name)
++ throw(std::runtime_error);
++
++ /**
++ @brief Connect our output to a jack client's source port.
++ \param index the index of our output port to connect from.
++ \param sourcePortName the client:port name to connect to
++ */
++ void connectTo(unsigned int index, std::string sourcePortName)
++ throw(std::range_error, std::runtime_error);
++ /**
++ @brief Connect our input to a jack client's destination port.
++ \param index the index of our input port to connect to
++ \param destPortName the client:port name to connect from
++ */
++ void connectFrom(unsigned int index, std::string destPortName)
++ throw(std::range_error, std::runtime_error);
++ /**
++ @brief Connect our output port to a physical output port
++ \param index the index of our output port to connect from
++ \param physical_index the physical output port index to connect to
++ */
++ void connectToPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error);
++ /**
++ @brief Connect our input port to a physical input port
++ \param index the index of our input port to connect to
++ \param physical_index the physical input port index to connect from
++ */
++ void connectFromPhysical(unsigned int index, unsigned physical_index)
++ throw(std::range_error, std::runtime_error);
++ ///Disconnect input port from all connections
++ void disconnectInPort(unsigned int index)
++ throw(std::range_error, std::runtime_error);
++ ///Disconnect output port from all connections
++ void disconnectOutPort(unsigned int index)
++ throw(std::range_error, std::runtime_error);
++
++ ///Get the number of connections to our input port
++ unsigned int numConnectionsInPort(unsigned int index)
++ throw(std::range_error);
++ ///Get the number of connections to our output port
++ unsigned int numConnectionsOutPort(unsigned int index)
++ throw(std::range_error);
++
++ /**
++ @brief Get the number of physical audio input ports
++ These are ports that can send audio to your client
++ */
++ unsigned int numPhysicalSourcePorts();
++ /**
++ @brief Get the number of physical audio output ports
++ These are ports that your client can send audio to
++ */
++ unsigned int numPhysicalDestinationPorts();
++
++ ///Get the name of our client's input port
++ std::string getInputPortName(unsigned int index)
++ throw(std::range_error);
++ ///Get the name of our client's output port
++ std::string getOutputPortName(unsigned int index)
++ throw(std::range_error);
++
++ /**
++ @brief This method is called when Jack shuts down.
++ Override if you want to do something when jack shuts down.
++ */
++ virtual void jackShutdownCallback();
++ /**
++ @brief The current CPU load estimated by JACK
++
++ This is a running average of the time it takes to execute a full
++ process cycle for all clients as a percentage of the real time
++ available per cycle determined by the buffer size and sample rate.
++ */
++ float getCpuLoad();
++ ///Get the sample rate
++ jack_nframes_t getSampleRate();
++ ///Get the jack buffer size
++ jack_nframes_t getBufferSize();
++ ///Check to see if the client is running in real time mode
++ bool isRealTime(){return jack_is_realtime(mJackClient);}
++ /**
++ @brief Get the name of our client
++
++ This might not be exactly the same as the name we provided to the
++ constructor
++
++ \return a string indicating the name of our client.
++ */
++ std::string getName(){return std::string(jack_get_client_name(mJackClient));}
++ ///Get the state of our Jack client.
++ jack_state_t getState(){return mJackState;}
++
++ /**
++ @brief Get an estimate of the current time in frames
++
++ This is a running counter, no significance should be attached to
++ its value, but it can be compared to a previously returned value.
++ \return an estimate of the current time in frames.
++ */
++ jack_nframes_t getFrameTime(){return jack_frame_time(mJackClient);}
++
++ /**
++ @brief Get the time in frames since the JACK server began the current process cycle
++
++ \return the time in frames that has passed since the JACK server began the current process cycle
++ */
++ jack_nframes_t getFramesSinceCycleStart(){return jack_frames_since_cycle_start(mJackClient);}
++ };
++
++}
++
++#endif
+Index: xbmc/cores/AudioRenderers/jackringbuffer.hpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackringbuffer.hpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackringbuffer.hpp (revision 1806)
+@@ -0,0 +1,205 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#ifndef JACK_RING_BUFFER_CLASS_H
++#define JACK_RING_BUFFER_CLASS_H
++
++#ifndef NULL
++#define NULL 0
++#endif
++
++extern "C" {
++#include <jack/ringbuffer.h>
++}
++#include <string.h>
++
++namespace JackCpp {
++
++template<typename Type>
++
++/**
++@class RingBuffer
++
++@brief This template class wraps the Jack lock-free ringbuffer.
++
++This class creates a lock-free ring buffer that accepts a specific data type.
++
++The key attribute of a ringbuffer is that it can be safely accessed by two
++threads simultaneously -- one reading from the buffer and the other writing to
++it -- without using any synchronization or mutual exclusion primitives. For
++this to work correctly, there can only be a single reader and a single writer
++thread. Their identities cannot be interchanged.
++
++@author Alex Norman
++
++*/
++ class RingBuffer {
++ private:
++ jack_ringbuffer_t *mRingBufferPtr;
++ size_t mLength;
++ public:
++ /**
++ @brief The Constructor
++ \param size the number of items that the ring buffer should be able to hold
++ \param mlock a boolean indicating whether or not the ring buffer should be locked in memory
++ */
++ RingBuffer(size_t size, bool mlock = false){
++ mLength = size;
++ mRingBufferPtr = jack_ringbuffer_create(mLength * sizeof(Type));
++
++ //should we lock the memory for the ring buffer?
++ if(mlock)
++ jack_ringbuffer_mlock(mRingBufferPtr);
++ }
++ ///The Destructor
++ ~RingBuffer(){
++ if(mRingBufferPtr != NULL)
++ jack_ringbuffer_free(mRingBufferPtr);
++ }
++
++ ///Get the total length of the ring buffer
++ size_t length(){
++ return mLength;
++ }
++
++ ///Get the number of items that can be read at this time
++ size_t getReadSpace(){
++ return jack_ringbuffer_read_space(mRingBufferPtr) / sizeof(Type);
++ }
++
++ ///Get the number of items that can be written at this time
++ size_t getWriteSpace(){
++ return jack_ringbuffer_write_space(mRingBufferPtr) / sizeof(Type);
++ }
++
++ /**
++ @brief Read into dest
++
++ Read from the buffer into a variable.
++
++ \param dest an item to be read into
++ */
++ void read(Type &dest){
++ if(getReadSpace() <= 0){
++ //throw error!!!!
++ return;
++ }
++ jack_ringbuffer_read(mRingBufferPtr, (char *)&dest, sizeof(Type));
++ }
++
++ /**
++ @brief Read into an array
++
++ Read from the buffer into an array.
++
++ \param dest an array to be read into
++ \param cnt the number of elements to read into this array
++ */
++ void read(Type *dest, unsigned cnt){
++ jack_ringbuffer_data_t readVec[2];
++ unsigned int read_size = sizeof(Type) * cnt;
++ if(getReadSpace() <= 0){
++ //throw error!!!!
++ return;
++ }
++
++ //get the readvector
++ jack_ringbuffer_get_read_vector(mRingBufferPtr, readVec);
++
++ //if the first vector has enough data then just read from there
++ if(readVec[0].len >= read_size){
++ memcpy(dest, readVec[0].buf, read_size);
++ } else {
++ //if the first vector is zero length then read from the second
++ if(readVec[0].len == 0){
++ memcpy(dest, readVec[1].buf, read_size);
++ } else {
++ //this gets tricky
++ char * byterep = (char *)dest;
++ //first read the data out of the first vector
++ memcpy(byterep, readVec[0].buf, readVec[0].len);
++ //then read the rest out of the second
++ memcpy(byterep + readVec[0].len, readVec[1].buf, read_size - readVec[0].len);
++ }
++ }
++ //advance the read pointer
++ jack_ringbuffer_read_advance(mRingBufferPtr, read_size);
++ }
++
++ /**
++ @brief Write into the ring buffer.
++
++ \param src the value to write
++ */
++ void write(Type src){
++ if(getWriteSpace() <= 0){
++ //throw error!!!!
++ return;
++ }
++ jack_ringbuffer_write(mRingBufferPtr, (char *)&src, sizeof(Type));
++ }
++
++ /**
++ @brief Write an array of values into the ring buffer.
++
++ \param src an array of values to write
++ \param cnt the number of items from the array to write into our buffer
++ */
++ void write(Type *src, unsigned int cnt){
++ jack_ringbuffer_data_t writeVec[2];
++ unsigned int write_size = sizeof(Type) * cnt;
++ if(cnt > getWriteSpace()){
++ //throw error!!!!
++ return;
++ }
++
++ //get the write vector
++ jack_ringbuffer_get_write_vector(mRingBufferPtr, writeVec);
++ //if there is enough room in the first vector then just write there
++ if(writeVec[0].len >= write_size){
++ memcpy(writeVec[0].buf,src,write_size);
++ } else {
++ //if there is no room in the first vector then write into the second
++ if(writeVec[0].len == 0){
++ memcpy(writeVec[1].buf,src,write_size);
++ } else {
++ //this is more tricky, we have to split the data up
++ char * byterep = (char *)src;
++ //copy the first chunck
++ memcpy(writeVec[0].buf, byterep, writeVec[0].len);
++ //copy the second chunck
++ memcpy(writeVec[1].buf, byterep + writeVec[0].len, write_size - writeVec[0].len);
++ }
++ }
++ jack_ringbuffer_write_advance(mRingBufferPtr, write_size);
++ }
++
++ /**
++ @brief Reset
++
++ This is not threadsafe. This resets the read and write pointers,
++ effectively making the ring buffer empty.
++ */
++ void reset(){
++ jack_ringbuffer_reset(mRingBufferPtr);
++ }
++ };
++
++}
++
++#endif
+Index: xbmc/cores/AudioRenderers/jackblockingaudioio.cpp
+===================================================================
+--- xbmc/cores/AudioRenderers/jackblockingaudioio.cpp (revision 0)
++++ xbmc/cores/AudioRenderers/jackblockingaudioio.cpp (revision 1806)
+@@ -0,0 +1,181 @@
++//C++ Classes that wrap JACK
++//Copyright 2007 Alex Norman
++//
++//This file is part of JACKC++.
++//
++//JACKC++ 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.
++//
++//JACKC++ 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 JACKC++. If not, see <http://www.gnu.org/licenses/>.
++
++#include "jackblockingaudioio.hpp"
++#include <unistd.h>
++#define MIN(x,y) ((x) < (y) ? (x) : (y))
++
++#if 0
++#include <iostream>
++using std::cerr;
++using std::cout;
++using std::endl;
++#endif
++
++//allocate input and output buffers
++JackCpp::BlockingAudioIO::BlockingAudioIO(std::string name,
++ unsigned int inChans, unsigned int outChans,
++ unsigned int inBufSize, unsigned int outBufSize,
++ bool startServer) throw(std::runtime_error):
++ AudioIO(name, inChans, outChans, startServer),
++ mOutputBufferMaxSize((unsigned int)getSampleRate()),
++ mInputBufferMaxSize((unsigned int)getSampleRate())
++{
++ if(inBufSize < 2 * getBufferSize())
++ inBufSize = 2 * getBufferSize();
++ else if (inBufSize > mInputBufferMaxSize)
++ inBufSize = mInputBufferMaxSize;
++ if(outBufSize < 2 * getBufferSize())
++ outBufSize = 2 * getBufferSize();
++ else if (outBufSize > mOutputBufferMaxSize)
++ outBufSize = mOutputBufferMaxSize;
++
++ //set the amount of the ring buffer that we leave free
++ mOutputBufferFreeSize = mOutputBufferMaxSize - outBufSize;
++ mInputBufferFreeSize = mInputBufferMaxSize - inBufSize;
++
++ //create input and output buffers, give them extra space to work with and memory lock them
++ for(unsigned int i = 0; i < outChans; i++)
++ mUserOutBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mOutputBufferMaxSize, true));
++ for(unsigned int i = 0; i < inChans; i++)
++ mUserInBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mInputBufferMaxSize, true));
++}
++
++//clean up the buffers we allocated
++JackCpp::BlockingAudioIO::~BlockingAudioIO(){
++ stop();
++ for(std::vector<RingBuffer<jack_default_audio_sample_t> *>::iterator it = mUserOutBuff.begin();
++ it != mUserOutBuff.end(); it++)
++ delete *it;
++ for(std::vector<RingBuffer<jack_default_audio_sample_t> *>::iterator it = mUserInBuff.begin();
++ it != mUserInBuff.end(); it++)
++ delete *it;
++}
++
++//wait until we can write, then write
++void JackCpp::BlockingAudioIO::write(unsigned int channel, jack_default_audio_sample_t val){
++ if (channel >= outPorts())
++ return;
++ while(mUserOutBuff[channel]->getWriteSpace() <= mOutputBufferFreeSize)
++ usleep(10);
++ mUserOutBuff[channel]->write(val);
++}
++
++//we we can write then write, otherwise return false
++bool JackCpp::BlockingAudioIO::tryWrite(unsigned int channel, jack_default_audio_sample_t val){
++ if (channel < outPorts() && mUserOutBuff[channel]->getWriteSpace() > mOutputBufferFreeSize){
++ mUserOutBuff[channel]->write(val);
++ return true;
++ }
++ return false;
++}
++
++//wait until we can read, then return the value
++jack_default_audio_sample_t JackCpp::BlockingAudioIO::read(unsigned int channel){
++ jack_default_audio_sample_t val;
++ if (channel >= inPorts())
++ return 0;
++ while(mUserInBuff[channel]->getReadSpace() == 0)
++ usleep(10);
++ mUserInBuff[channel]->read(val);
++ return val;
++}
++
++//if we cannot read then return false, otherwise, read and return true
++bool JackCpp::BlockingAudioIO::tryRead(unsigned int channel, jack_default_audio_sample_t &val){
++ if (channel >= inPorts() || mUserInBuff[channel]->getReadSpace() == 0)
++ return false;
++ mUserInBuff[channel]->read(val);
++ return true;
++}
++
++void JackCpp::BlockingAudioIO::reserveOutPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ AudioIO::reserveOutPorts(num);
++ mUserOutBuff.reserve(num);
++}
++
++void JackCpp::BlockingAudioIO::reserveInPorts(unsigned int num)
++ throw(std::runtime_error)
++{
++ AudioIO::reserveInPorts(num);
++ mUserInBuff.reserve(num);
++}
++
++unsigned int JackCpp::BlockingAudioIO::addInPort(std::string name)
++ throw(std::runtime_error)
++{
++ unsigned int ret;
++ if(getState() == AudioIO::active)
++ throw std::runtime_error("JackCpp::BlockingAudioIO::addInPort not allowed while the client is active");
++ ret = AudioIO::addInPort(name);
++ mUserInBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mInputBufferMaxSize, true));
++ return ret;
++}
++
++unsigned int JackCpp::BlockingAudioIO::addOutPort(std::string name)
++ throw(std::runtime_error)
++{
++ unsigned int ret;
++ if(getState() == AudioIO::active)
++ throw std::runtime_error("JackCpp::BlockingAudioIO::addOutPort not allowed while the client is active");
++ ret = AudioIO::addOutPort(name);
++ mUserOutBuff.push_back(new RingBuffer<jack_default_audio_sample_t>(mOutputBufferMaxSize, true));
++ return ret;
++}
++
++//read the jack input buffers into the user input buffers
++//write the user output buffers into the jack output buffers
++int JackCpp::BlockingAudioIO::audioCallback(jack_nframes_t nframes,
++ audioBufVector inBufs,
++ audioBufVector outBufs){
++
++ //only try to write as much as we have space to write
++ unsigned int numToWrite = MIN(mUserOutBuff[0]->getReadSpace(), nframes);
++ unsigned int numToRead = MIN(mUserInBuff[0]->getWriteSpace(), nframes);
++
++ //make sure we leave the amount of free space we require
++ if(mUserInBuff[0]->getWriteSpace() - numToRead < mInputBufferFreeSize)
++ numToRead = mUserInBuff[0]->getWriteSpace() - mInputBufferFreeSize;
++
++ //if (numToWrite < nframes)
++ //cerr << "oops" << endl;
++
++ //read get inputs
++ for(unsigned int i = 0; i < inPorts(); i++){
++ for(unsigned int j = 0; j < numToRead; j++)
++ mUserInBuff[i]->write(inBufs[i][j]);
++ }
++
++ //write output
++ for(unsigned int i = 0; i < outPorts(); i++){
++ for(unsigned int j = 0; j < numToWrite; j++){
++ jack_default_audio_sample_t val;
++ mUserOutBuff[i]->read(val);
++ outBufs[i][j] = val;
++ }
++ //write zeros for the rest
++ for(unsigned int j = numToWrite; j < nframes; j++)
++ outBufs[i][j] = 0.0;
++ //if(numToWrite < nframes)
++ //cerr << "oops" << endl;
++ }
++ return 0;
++}
++
diff --git a/media-tv/xbmc/metadata.xml b/media-tv/xbmc/metadata.xml
new file mode 100644
index 0000000..035500e
--- /dev/null
+++ b/media-tv/xbmc/metadata.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<herd>xbox</herd>
+<use>
+ <flag name='airplay'>enable AirPlay support</flag>
+ <flag name='bluray'>Enable playback of Blu-ray filesystems</flag>
+ <flag name='goom'>Enable GOOM visualization plugin</flag>
+ <flag name='midi'>Support MIDI files</flag>
+ <flag name='projectm'>Enable projectM visualization plugin</flag>
+ <flag name="rtmp">Enable Real Time Messaging Protocol using librtmp</flag>
+ <flag name='rsxs'>Enable really slick X screensavers</flag>
+ <flag name='vaapi'>Enables VAAPI (Video Acceleration API) for hardware decoding</flag>
+ <flag name='vdpau'>enable support for Video Decode and Presentation API for Unix</flag>
+ <flag name='webserver'>Enable internal webserver</flag>
+ <flag name='xrandr'>Support X randr extension</flag>
+</use>
+</pkgmetadata>
diff --git a/media-tv/xbmc/xbmc-10.1-r1.ebuild b/media-tv/xbmc/xbmc-10.1-r1.ebuild
new file mode 100644
index 0000000..797ab77
--- /dev/null
+++ b/media-tv/xbmc/xbmc-10.1-r1.ebuild
@@ -0,0 +1,206 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-tv/xbmc/xbmc-10.1.ebuild,v 1.6 2011/08/11 02:43:55 vapier Exp $
+
+EAPI="2"
+
+inherit eutils python
+
+# Use XBMC_ESVN_REPO_URI to track a different branch
+ESVN_REPO_URI=${XBMC_ESVN_REPO_URI:-http://xbmc.svn.sourceforge.net/svnroot/xbmc/trunk}
+ESVN_PROJECT=${ESVN_REPO_URI##*/svnroot/}
+ESVN_PROJECT=${ESVN_PROJECT%/*}
+if [[ ${PV} == "9999" ]] ; then
+ inherit subversion autotools
+ KEYWORDS=""
+else
+ inherit autotools
+ SRC_URI="http://mirrors.xbmc.org/releases/source/${P}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+DESCRIPTION="XBMC is a free and open source media-player and entertainment hub"
+HOMEPAGE="http://xbmc.org/"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="alsa altivec avahi css debug jack joystick midi profile pulseaudio rtmp sse sse2 udev vaapi vdpau webserver +xrandr"
+
+COMMON_DEPEND="virtual/opengl
+ app-arch/bzip2
+ app-arch/unzip
+ app-arch/zip
+ app-i18n/enca
+ dev-libs/boost
+ dev-libs/fribidi
+ dev-libs/libcdio[-minimal]
+ dev-libs/libpcre[cxx]
+ >=dev-libs/lzo-2.04
+ >=dev-python/pysqlite-2
+ media-libs/alsa-lib
+ media-libs/faad2
+ media-libs/flac
+ media-libs/fontconfig
+ media-libs/freetype
+ >=media-libs/glew-1.5.6
+ media-libs/jasper
+ media-libs/jbigkit
+ virtual/jpeg
+ >=media-libs/libass-0.9.7
+ css? ( media-libs/libdvdcss )
+ media-libs/libmad
+ media-libs/libmms
+ media-libs/libmodplug
+ media-libs/libmpeg2
+ media-libs/libogg
+ media-libs/libpng
+ media-libs/libsamplerate
+ media-libs/libsdl[audio,opengl,video,X]
+ alsa? ( media-libs/libsdl[alsa] )
+ media-libs/libvorbis
+ media-libs/sdl-gfx
+ >=media-libs/sdl-image-1.2.10[gif,jpeg,png]
+ media-libs/sdl-mixer
+ media-libs/sdl-sound
+ media-libs/tiff
+ pulseaudio? ( media-sound/pulseaudio )
+ media-sound/wavpack
+ >=virtual/ffmpeg-0.6
+ rtmp? ( media-video/rtmpdump )
+ avahi? ( net-dns/avahi )
+ webserver? ( net-libs/libmicrohttpd )
+ net-misc/curl
+ || ( >=net-fs/samba-3.4.6[smbclient] <net-fs/samba-3.3 )
+ sys-apps/dbus
+ sys-libs/zlib
+ virtual/mysql
+ x11-apps/xdpyinfo
+ x11-apps/mesa-progs
+ vaapi? ( x11-libs/libva )
+ vdpau? (
+ || ( x11-libs/libvdpau >=x11-drivers/nvidia-drivers-180.51 )
+ virtual/ffmpeg[vdpau]
+ )
+ x11-libs/libXinerama
+ xrandr? ( x11-libs/libXrandr )
+ x11-libs/libXrender"
+# The cpluff bundled addon uses gettext which needs CVS ...
+RDEPEND="${COMMON_DEPEND}
+ udev? ( sys-fs/udisks sys-power/upower )"
+DEPEND="${COMMON_DEPEND}
+ dev-util/gperf
+ dev-vcs/cvs
+ x11-proto/xineramaproto
+ dev-util/cmake
+ x86? ( dev-lang/nasm )"
+
+src_unpack() {
+ if [[ ${PV} == "9999" ]] ; then
+ subversion_src_unpack
+ cd "${S}"
+ rm -f configure
+ else
+ unpack ${A}
+ cd "${S}"
+ fi
+
+ # Fix case sensitivity
+ mv media/Fonts/{a,A}rial.ttf || die
+ mv media/{S,s}plash.png || die
+}
+
+src_prepare() {
+ use jack && epatch "${FILESDIR}"/${PN}-10.1~beta1-jack.patch
+ epatch "${FILESDIR}"/${PN}-10.0-python-2.7.patch #350098
+ epatch "${FILESDIR}"/${PN}-10.1-gcc-4.6.patch #367261
+
+ # some dirs ship generated autotools, some dont
+ local d
+ for d in . xbmc/cores/dvdplayer/Codecs/{libdts,libdvd/lib*/} lib/cpluff ; do
+ [[ -e ${d}/configure ]] && continue
+ pushd ${d} >/dev/null
+ einfo "Generating autotools in ${d}"
+ eautoreconf
+ popd >/dev/null
+ done
+
+ local squish #290564
+ use altivec && squish="-DSQUISH_USE_ALTIVEC=1 -maltivec"
+ use sse && squish="-DSQUISH_USE_SSE=1 -msse"
+ use sse2 && squish="-DSQUISH_USE_SSE=2 -msse2"
+ sed -i \
+ -e '/^CXXFLAGS/{s:-D[^=]*=.::;s:-m[[:alnum:]]*::}' \
+ -e "1iCXXFLAGS += ${squish}" \
+ xbmc/lib/libsquish/Makefile.in || die
+
+ # Fix XBMC's final version string showing as "exported"
+ # instead of the SVN revision number.
+ export SVN_REV=${ESVN_WC_REVISION:-exported}
+
+ # Avoid lsb-release dependency
+ sed -i \
+ -e 's:lsb_release -d:cat /etc/gentoo-release:' \
+ xbmc/utils/SystemInfo.cpp
+
+ # Do not use termcap #262822
+ sed -i 's:-ltermcap::' xbmc/lib/libPython/Python/configure
+
+ # avoid long delays when powerkit isn't running #348580
+ sed -i \
+ -e '/dbus_connection_send_with_reply_and_block/s:-1:3000:' \
+ xbmc/linux/*.cpp || die
+
+ epatch_user #293109
+
+ # Tweak autotool timestamps to avoid regeneration
+ find . -type f -print0 | xargs -0 touch -r configure
+}
+
+src_configure() {
+ # Disable documentation generation
+ export ac_cv_path_LATEX=no
+ # Avoid help2man
+ export HELP2MAN=$(type -P help2man || echo true)
+
+ econf \
+ --docdir=/usr/share/doc/${PF} \
+ --disable-ccache \
+ --disable-optimizations \
+ --enable-external-libraries \
+ --disable-external-python \
+ --enable-goom \
+ --enable-gl \
+ --disable-liba52 \
+ --disable-libdts \
+ $(use_enable avahi) \
+ $(use_enable css dvdcss) \
+ $(use_enable debug) \
+ --disable-hal \
+ $(use_enable joystick) \
+ $(use_enable midi mid) \
+ $(use_enable profile profiling) \
+ $(use_enable pulseaudio pulse) \
+ $(use_enable rtmp) \
+ $(use_enable vaapi) \
+ $(use_enable vdpau) \
+ $(use_enable webserver) \
+ $(use_enable xrandr)
+}
+
+src_install() {
+ emake install DESTDIR="${D}" || die
+ dodoc keymapping.txt README.linux
+ rm "${D}"/usr/share/doc/${PF}/{copying.txt,LICENSE.GPL} || die
+
+# insinto /usr/share/applications
+# doins tools/Linux/xbmc.desktop
+# doicon tools/Linux/xbmc.png
+
+ insinto "$(python_get_sitedir)" #309885
+ doins tools/EventClients/lib/python/xbmcclient.py || die
+ newbin "tools/EventClients/Clients/XBMC Send/xbmc-send.py" xbmc-send || die
+}
+
+pkg_postinst() {
+ elog "Visit http://wiki.xbmc.org/?title=XBMC_Online_Manual"
+}
diff --git a/media-tv/xbmc/xbmc-10.1.ebuild b/media-tv/xbmc/xbmc-10.1.ebuild
new file mode 100644
index 0000000..5c98295
--- /dev/null
+++ b/media-tv/xbmc/xbmc-10.1.ebuild
@@ -0,0 +1,205 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-tv/xbmc/xbmc-10.1.ebuild,v 1.8 2011/10/12 22:53:27 vapier Exp $
+
+EAPI="2"
+
+inherit eutils python
+
+# Use XBMC_ESVN_REPO_URI to track a different branch
+ESVN_REPO_URI=${XBMC_ESVN_REPO_URI:-http://xbmc.svn.sourceforge.net/svnroot/xbmc/trunk}
+ESVN_PROJECT=${ESVN_REPO_URI##*/svnroot/}
+ESVN_PROJECT=${ESVN_PROJECT%/*}
+if [[ ${PV} == "9999" ]] ; then
+ inherit subversion autotools
+ KEYWORDS=""
+else
+ inherit autotools
+ SRC_URI="http://mirrors.xbmc.org/releases/source/${P}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+DESCRIPTION="XBMC is a free and open source media-player and entertainment hub"
+HOMEPAGE="http://xbmc.org/"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="alsa altivec avahi css debug joystick midi profile pulseaudio rtmp sse sse2 udev vaapi vdpau webserver +xrandr"
+
+COMMON_DEPEND="virtual/opengl
+ app-arch/bzip2
+ app-arch/unzip
+ app-arch/zip
+ app-i18n/enca
+ dev-libs/boost
+ dev-libs/fribidi
+ dev-libs/libcdio[-minimal]
+ dev-libs/libpcre[cxx]
+ >=dev-libs/lzo-2.04
+ >=dev-python/pysqlite-2
+ media-libs/alsa-lib
+ media-libs/faad2
+ media-libs/flac
+ media-libs/fontconfig
+ media-libs/freetype
+ >=media-libs/glew-1.5.6
+ media-libs/jasper
+ media-libs/jbigkit
+ virtual/jpeg
+ >=media-libs/libass-0.9.7
+ css? ( media-libs/libdvdcss )
+ media-libs/libmad
+ media-libs/libmms
+ media-libs/libmodplug
+ media-libs/libmpeg2
+ media-libs/libogg
+ media-libs/libpng
+ media-libs/libsamplerate
+ media-libs/libsdl[audio,opengl,video,X]
+ alsa? ( media-libs/libsdl[alsa] )
+ media-libs/libvorbis
+ media-libs/sdl-gfx
+ >=media-libs/sdl-image-1.2.10[gif,jpeg,png]
+ media-libs/sdl-mixer
+ media-libs/sdl-sound
+ media-libs/tiff
+ pulseaudio? ( media-sound/pulseaudio )
+ media-sound/wavpack
+ >=virtual/ffmpeg-0.6
+ rtmp? ( media-video/rtmpdump )
+ avahi? ( net-dns/avahi )
+ webserver? ( net-libs/libmicrohttpd )
+ net-misc/curl
+ || ( >=net-fs/samba-3.4.6[smbclient] <net-fs/samba-3.3 )
+ sys-apps/dbus
+ sys-libs/zlib
+ virtual/mysql
+ x11-apps/xdpyinfo
+ x11-apps/mesa-progs
+ vaapi? ( x11-libs/libva )
+ vdpau? (
+ || ( x11-libs/libvdpau >=x11-drivers/nvidia-drivers-180.51 )
+ virtual/ffmpeg[vdpau]
+ )
+ x11-libs/libXinerama
+ xrandr? ( x11-libs/libXrandr )
+ x11-libs/libXrender"
+RDEPEND="${COMMON_DEPEND}
+ udev? ( sys-fs/udisks sys-power/upower )"
+DEPEND="${COMMON_DEPEND}
+ dev-util/gperf
+ x11-proto/xineramaproto
+ dev-util/cmake
+ x86? ( dev-lang/nasm )"
+
+src_unpack() {
+ if [[ ${PV} == "9999" ]] ; then
+ subversion_src_unpack
+ cd "${S}"
+ rm -f configure
+ else
+ unpack ${A}
+ cd "${S}"
+ fi
+
+ # Fix case sensitivity
+ mv media/Fonts/{a,A}rial.ttf || die
+ mv media/{S,s}plash.png || die
+}
+
+src_prepare() {
+ epatch "${FILESDIR}"/${PN}-10.0-python-2.7.patch #350098
+ epatch "${FILESDIR}"/${PN}-10.1-gcc-4.6.patch #367261
+ epatch "${FILESDIR}"/${P}-libpng-1.5.patch #380127
+ epatch "${FILESDIR}"/${PN}-10.1-headers.patch #380127
+
+ # some dirs ship generated autotools, some dont
+ local d
+ for d in . xbmc/cores/dvdplayer/Codecs/{libdts,libdvd/lib*/} lib/cpluff ; do
+ [[ -e ${d}/configure ]] && continue
+ pushd ${d} >/dev/null
+ einfo "Generating autotools in ${d}"
+ eautoreconf
+ popd >/dev/null
+ done
+
+ local squish #290564
+ use altivec && squish="-DSQUISH_USE_ALTIVEC=1 -maltivec"
+ use sse && squish="-DSQUISH_USE_SSE=1 -msse"
+ use sse2 && squish="-DSQUISH_USE_SSE=2 -msse2"
+ sed -i \
+ -e '/^CXXFLAGS/{s:-D[^=]*=.::;s:-m[[:alnum:]]*::}' \
+ -e "1iCXXFLAGS += ${squish}" \
+ xbmc/lib/libsquish/Makefile.in || die
+
+ # Fix XBMC's final version string showing as "exported"
+ # instead of the SVN revision number.
+ export SVN_REV=${ESVN_WC_REVISION:-exported}
+
+ # Avoid lsb-release dependency
+ sed -i \
+ -e 's:lsb_release -d:cat /etc/gentoo-release:' \
+ xbmc/utils/SystemInfo.cpp
+
+ # Do not use termcap #262822
+ sed -i 's:-ltermcap::' xbmc/lib/libPython/Python/configure
+
+ # avoid long delays when powerkit isn't running #348580
+ sed -i \
+ -e '/dbus_connection_send_with_reply_and_block/s:-1:3000:' \
+ xbmc/linux/*.cpp || die
+
+ epatch_user #293109
+
+ # Tweak autotool timestamps to avoid regeneration
+ find . -type f -print0 | xargs -0 touch -r configure
+}
+
+src_configure() {
+ # Disable documentation generation
+ export ac_cv_path_LATEX=no
+ # Avoid help2man
+ export HELP2MAN=$(type -P help2man || echo true)
+
+ econf \
+ --docdir=/usr/share/doc/${PF} \
+ --disable-ccache \
+ --disable-optimizations \
+ --enable-external-libraries \
+ --disable-external-python \
+ --enable-goom \
+ --enable-gl \
+ --disable-liba52 \
+ --disable-libdts \
+ $(use_enable avahi) \
+ $(use_enable css dvdcss) \
+ $(use_enable debug) \
+ --disable-hal \
+ $(use_enable joystick) \
+ $(use_enable midi mid) \
+ $(use_enable profile profiling) \
+ $(use_enable pulseaudio pulse) \
+ $(use_enable rtmp) \
+ $(use_enable vaapi) \
+ $(use_enable vdpau) \
+ $(use_enable webserver) \
+ $(use_enable xrandr)
+}
+
+src_install() {
+ emake install DESTDIR="${D}" || die
+ dodoc keymapping.txt README.linux
+ rm "${D}"/usr/share/doc/${PF}/{copying.txt,LICENSE.GPL} || die
+
+# insinto /usr/share/applications
+# doins tools/Linux/xbmc.desktop
+# doicon tools/Linux/xbmc.png
+
+ insinto "$(python_get_sitedir)" #309885
+ doins tools/EventClients/lib/python/xbmcclient.py || die
+ newbin "tools/EventClients/Clients/XBMC Send/xbmc-send.py" xbmc-send || die
+}
+
+pkg_postinst() {
+ elog "Visit http://wiki.xbmc.org/?title=XBMC_Online_Manual"
+}
diff --git a/media-tv/xbmc/xbmc-99999.ebuild b/media-tv/xbmc/xbmc-99999.ebuild
new file mode 100644
index 0000000..8f67ce2
--- /dev/null
+++ b/media-tv/xbmc/xbmc-99999.ebuild
@@ -0,0 +1,206 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-tv/xbmc/xbmc-99999.ebuild,v 1.93 2011/10/12 22:53:27 vapier Exp $
+
+EAPI="2"
+
+inherit eutils python
+
+EGIT_REPO_URI="git://github.com/xbmc/xbmc.git"
+if [[ ${PV} == "99999" ]] ; then
+ inherit git-2 autotools
+else
+ inherit autotools
+ MY_P=${P/_/-}
+ SRC_URI="mirror://sourceforge/${PN}/${MY_P}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+ S=${WORKDIR}/${MY_P}
+fi
+
+DESCRIPTION="XBMC is a free and open source media-player and entertainment hub"
+HOMEPAGE="http://xbmc.org/"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="airplay alsa altivec avahi bluray css debug goom jack joystick midi profile +projectm pulseaudio +rsxs rtmp +samba sse sse2 udev vaapi vdpau webserver +xrandr"
+
+COMMON_DEPEND="virtual/opengl
+ app-arch/bzip2
+ app-arch/unzip
+ app-arch/zip
+ app-i18n/enca
+ airplay? ( app-pda/libplist )
+ >=dev-lang/python-2.4
+ dev-libs/boost
+ dev-libs/fribidi
+ dev-libs/libcdio[-minimal]
+ dev-libs/libpcre[cxx]
+ >=dev-libs/lzo-2.04
+ dev-libs/yajl
+ >=dev-python/pysqlite-2
+ dev-python/simplejson
+ media-libs/alsa-lib
+ media-libs/flac
+ media-libs/fontconfig
+ media-libs/freetype
+ >=media-libs/glew-1.5.6
+ media-libs/jasper
+ media-libs/jbigkit
+ virtual/jpeg
+ >=media-libs/libass-0.9.7
+ bluray? ( media-libs/libbluray )
+ css? ( media-libs/libdvdcss )
+ media-libs/libmad
+ media-libs/libmodplug
+ media-libs/libmpeg2
+ media-libs/libogg
+ media-libs/libpng
+ projectm? ( media-libs/libprojectm )
+ media-libs/libsamplerate
+ media-libs/libsdl[audio,opengl,video,X]
+ alsa? ( media-libs/libsdl[alsa] )
+ media-libs/libvorbis
+ media-libs/sdl-gfx
+ >=media-libs/sdl-image-1.2.10[gif,jpeg,png]
+ media-libs/sdl-mixer
+ media-libs/sdl-sound
+ media-libs/tiff
+ pulseaudio? ( media-sound/pulseaudio )
+ media-sound/wavpack
+ >=virtual/ffmpeg-0.6
+ rtmp? ( media-video/rtmpdump )
+ avahi? ( net-dns/avahi )
+ webserver? ( net-libs/libmicrohttpd )
+ net-misc/curl
+ samba? ( >=net-fs/samba-3.4.6[smbclient] )
+ sys-apps/dbus
+ sys-libs/zlib
+ virtual/mysql
+ x11-apps/xdpyinfo
+ x11-apps/mesa-progs
+ vaapi? ( x11-libs/libva )
+ vdpau? (
+ || ( x11-libs/libvdpau >=x11-drivers/nvidia-drivers-180.51 )
+ virtual/ffmpeg[vdpau]
+ )
+ x11-libs/libXinerama
+ xrandr? ( x11-libs/libXrandr )
+ x11-libs/libXrender"
+RDEPEND="${COMMON_DEPEND}
+ udev? ( sys-fs/udisks sys-power/upower )"
+DEPEND="${COMMON_DEPEND}
+ dev-util/gperf
+ x11-proto/xineramaproto
+ dev-util/cmake
+ x86? ( dev-lang/nasm )"
+
+src_unpack() {
+ if [[ ${PV} == "99999" ]] ; then
+ git-2_src_unpack
+ cd "${S}"
+ rm -f configure
+ else
+ unpack ${A}
+ cd "${S}"
+ fi
+
+ # Fix case sensitivity
+ mv media/Fonts/{a,A}rial.ttf || die
+ mv media/{S,s}plash.png || die
+}
+
+src_prepare() {
+ use jack && epatch "${FILESDIR}"/${PN}-99999~beta1-jack.patch
+ # some dirs ship generated autotools, some dont
+ local d
+ for d in \
+ . \
+ lib/{libdvd/lib*/,cpluff,libapetag,libid3tag/libid3tag} \
+ xbmc/screensavers/rsxs-* \
+ xbmc/visualizations/Goom/goom2k4-0
+ do
+ [[ -e ${d}/configure ]] && continue
+ pushd ${d} >/dev/null
+ einfo "Generating autotools in ${d}"
+ eautoreconf
+ popd >/dev/null
+ done
+
+ local squish #290564
+ use altivec && squish="-DSQUISH_USE_ALTIVEC=1 -maltivec"
+ use sse && squish="-DSQUISH_USE_SSE=1 -msse"
+ use sse2 && squish="-DSQUISH_USE_SSE=2 -msse2"
+ sed -i \
+ -e '/^CXXFLAGS/{s:-D[^=]*=.::;s:-m[[:alnum:]]*::}' \
+ -e "1iCXXFLAGS += ${squish}" \
+ lib/libsquish/Makefile.in || die
+
+ # Fix XBMC's final version string showing as "exported"
+ # instead of the SVN revision number.
+ export HAVE_GIT=no GIT_REV=${EGIT_VERSION:-exported}
+
+ # Avoid lsb-release dependency
+ sed -i \
+ -e 's:lsb_release -d:cat /etc/gentoo-release:' \
+ xbmc/utils/SystemInfo.cpp || die
+
+ # avoid long delays when powerkit isn't running #348580
+ sed -i \
+ -e '/dbus_connection_send_with_reply_and_block/s:-1:3000:' \
+ xbmc/linux/*.cpp || die
+
+ epatch_user #293109
+
+ # Tweak autotool timestamps to avoid regeneration
+ find . -type f -print0 | xargs -0 touch -r configure
+}
+
+src_configure() {
+ # Disable documentation generation
+ export ac_cv_path_LATEX=no
+ # Avoid help2man
+ export HELP2MAN=$(type -P help2man || echo true)
+
+ econf \
+ --docdir=/usr/share/doc/${PF} \
+ --disable-ccache \
+ --disable-optimizations \
+ --enable-external-libraries \
+ --enable-gl \
+ $(use_enable airplay) \
+ $(use_enable avahi) \
+ $(use_enable bluray libbluray) \
+ $(use_enable css dvdcss) \
+ $(use_enable debug) \
+ $(use_enable goom) \
+ --disable-hal \
+ $(use_enable joystick) \
+ $(use_enable midi mid) \
+ $(use_enable profile profiling) \
+ $(use_enable projectm) \
+ $(use_enable pulseaudio pulse) \
+ $(use_enable rsxs) \
+ $(use_enable rtmp) \
+ $(use_enable samba) \
+ $(use_enable vaapi) \
+ $(use_enable vdpau) \
+ $(use_enable webserver) \
+ $(use_enable xrandr)
+}
+
+src_install() {
+ emake install DESTDIR="${D}" || die
+ prepalldocs
+
+ insinto /usr/share/applications
+ doins tools/Linux/xbmc.desktop
+ doicon tools/Linux/xbmc.png
+
+ insinto "$(python_get_sitedir)" #309885
+ doins tools/EventClients/lib/python/xbmcclient.py || die
+ newbin "tools/EventClients/Clients/XBMC Send/xbmc-send.py" xbmc-send || die
+}
+
+pkg_postinst() {
+ elog "Visit http://wiki.xbmc.org/?title=XBMC_Online_Manual"
+}
diff --git a/media-video/dvdstyler/ChangeLog b/media-video/dvdstyler/ChangeLog
new file mode 100644
index 0000000..9d0d41c
--- /dev/null
+++ b/media-video/dvdstyler/ChangeLog
@@ -0,0 +1,276 @@
+# ChangeLog for media-video/dvdstyler
+# Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/media-video/dvdstyler/ChangeLog,v 1.53 2012/05/05 08:58:59 jdhore Exp $
+
+ 05 May 2012; Jeff Horelick <jdhore@gentoo.org> dvdstyler-2.1.ebuild:
+ dev-util/pkgconfig -> virtual/pkgconfig
+
+ 23 Dec 2011; Samuli Suominen <ssuominen@gentoo.org> dvdstyler-2.1.ebuild:
+ Fix building with FFmpeg >= 0.9 wrt #395793 by Helmut Jarausch
+
+ 22 Dec 2011; Samuli Suominen <ssuominen@gentoo.org>
+ -dvdstyler-2.0_rc1.ebuild, -dvdstyler-2.0_rc2.ebuild:
+ old
+
+*dvdstyler-2.1 (22 Dec 2011)
+
+ 22 Dec 2011; Samuli Suominen <ssuominen@gentoo.org> +dvdstyler-2.1.ebuild:
+ Version bump. Missing -ljpeg (in wxVillaLib/ for imagjpg.cpp) wrt #367863 by
+ Diego Elio Pettenò.
+
+*dvdstyler-2.0_rc2 (16 Oct 2011)
+
+ 16 Oct 2011; Samuli Suominen <ssuominen@gentoo.org>
+ +dvdstyler-2.0_rc2.ebuild:
+ Version bump.
+
+ 16 Oct 2011; Samuli Suominen <ssuominen@gentoo.org> -dvdstyler-1.8.1.ebuild,
+ -files/dvdstyler-1.8.1-cast.patch:
+ old
+
+ 09 Oct 2011; Samuli Suominen <ssuominen@gentoo.org> -dvdstyler-1.7.4.ebuild,
+ -files/dvdstyler-1.7.4-autoconf.patch, -dvdstyler-1.8.1_beta1.ebuild:
+ old
+
+*dvdstyler-2.0_rc1 (09 Oct 2011)
+
+ 09 Oct 2011; Samuli Suominen <ssuominen@gentoo.org>
+ +dvdstyler-2.0_rc1.ebuild:
+ Version bump wrt #353478 by Thomas Rausch. This will also fix building with
+ recent FFmpeg wrt #374797 by Diego Elio Pettenò.
+
+ 16 Sep 2011; Steve Dibb <beandog@gentoo.org> dvdstyler-1.7.4.ebuild,
+ dvdstyler-1.8.1_beta1.ebuild, dvdstyler-1.8.1.ebuild:
+ Use ffmpeg virtual, bug 362129
+
+ 13 Aug 2011; Kacper Kowalik <xarthisius@gentoo.org> dvdstyler-1.7.4.ebuild,
+ dvdstyler-1.8.1_beta1.ebuild, dvdstyler-1.8.1.ebuild:
+ Dropped ppc keywords wrt #361737
+
+ 20 Jul 2011; Pacho Ramos <pacho@gentoo.org> metadata.xml:
+ Drop maintainer due retirement, bug #34534
+
+*dvdstyler-1.8.1 (18 Jul 2010)
+
+ 18 Jul 2010; Daniel Black <dragonheart@gentoo.org>
+ +dvdstyler-1.8.1.ebuild, +files/dvdstyler-1.8.1-cast.patch:
+ version bump as per bug #327289.
+
+*dvdstyler-1.8.1_beta1 (28 Apr 2010)
+
+ 28 Apr 2010; Daniel Pielmeier <billie@gentoo.org>
+ +dvdstyler-1.8.1_beta1.ebuild:
+ Version bump.
+
+ 17 Feb 2010; Ryan Hill <dirtyepic@gentoo.org> dvdstyler-1.7.4.ebuild:
+ Fix wxsvg dependency to account for the removal of the ffmpeg USE flag in
+ later versions.
+
+*dvdstyler-1.7.4 (14 Oct 2009)
+
+ 14 Oct 2009; Daniel Black <dragonheart@gentoo.org>
+ dvdstyler-1.7.4_rc1.ebuild, +dvdstyler-1.7.4.ebuild,
+ +files/dvdstyler-1.7.4-autoconf.patch:
+ add missing xmlto dependency as was noticed on irc #gentoo (by I forget
+ who). Added version bump
+
+*dvdstyler-1.7.4_rc1 (16 Sep 2009)
+
+ 16 Sep 2009; Samuli Suominen <ssuominen@gentoo.org>
+ +dvdstyler-1.7.4_rc1.ebuild:
+ Version bump (#284035).
+
+*dvdstyler-1.7.3_beta3_p1 (05 Jul 2009)
+
+ 05 Jul 2009; Samuli Suominen <ssuominen@gentoo.org>
+ +dvdstyler-1.7.3_beta3_p1.ebuild,
+ +files/dvdstyler-1.7.3_beta3_p1-link_to_wxgtk_adv.patch:
+ Version bump wrt #273422.
+
+*dvdstyler-1.7.3_beta2 (29 Apr 2009)
+
+ 29 Apr 2009; Daniel Black <dragonheart@gentoo.org>
+ +dvdstyler-1.7.3_beta2.ebuild:
+ version bump - bug #265650 - ebuild by Fabio Correa
+
+*dvdstyler-1.7.2 (29 Apr 2009)
+
+ 29 Apr 2009; Daniel Black <dragonheart@gentoo.org>
+ +files/dvdstyler-1.7.2-skipxmlvalidation.patch,
+ dvdstyler-1.7.2_beta4.ebuild, +dvdstyler-1.7.2.ebuild:
+ version bug as per bug #262454. Ebuild changes thanks to Fabio
+
+ 16 Feb 2009; Daniel Black <dragonheart@gentoo.org>
+ -dvdstyler-1.5-r1.ebuild, -dvdstyler-1.5.1.ebuild,
+ -dvdstyler-1.5.1_p2.ebuild, -dvdstyler-1.7.2_beta3.ebuild:
+ removed as nolonger works - bug #25916 comment 0
+
+ 16 Feb 2009; Daniel Black <dragonheart@gentoo.org>
+ -dvdstyler-1.7.2_beta3.ebuild, dvdstyler-1.7.2_beta4.ebuild:
+ fix minium ffmpeg version - bug #257964 thanks Jordan Bradley. Fixed bug
+ #259160 - ffmpeg required USE=encoder to be useable. Thanks Ed Criscuolo
+
+*dvdstyler-1.7.2_beta4 (08 Feb 2009)
+
+ 08 Feb 2009; Daniel Black <dragonheart@gentoo.org>
+ +dvdstyler-1.7.2_beta4.ebuild:
+ version bump as per bug #257121 thanks Daniel Pielmeier and Bernd Butscheidt
+
+*dvdstyler-1.7.2_beta3 (18 Jan 2009)
+*dvdstyler-1.7.1 (18 Jan 2009)
+
+ 18 Jan 2009; Daniel Black <dragonheart@gentoo.org>
+ +dvdstyler-1.7.1.ebuild, +dvdstyler-1.7.2_beta3.ebuild:
+ version bump as per bug #215665. Thanks to all that waited so long and
+ provided feedback
+
+ 03 Jan 2009; Christoph Mende <angelos@gentoo.org> dvdstyler-1.5.1.ebuild,
+ dvdstyler-1.5.1_p2.ebuild:
+ Bumped to EAPI2, changed netpbm dependency to include [jpeg], fixed wxGTK
+ dependency
+
+ 01 Apr 2008; Daniel Black <dragonheart@gentoo.org>
+ dvdstyler-1.5-r1.ebuild, dvdstyler-1.5.1.ebuild,
+ dvdstyler-1.5.1_p2.ebuild:
+ remove duplicate desktop entry - bug #208806 thanks to Stefan Briesenick
+
+*dvdstyler-1.5.1_p2 (24 Dec 2007)
+
+ 24 Dec 2007; Daniel Black <dragonheart@gentoo.org>
+ +dvdstyler-1.5.1_p2.ebuild:
+ version bump to fix some serious problems - bug #203057 thanks to Michael
+
+*dvdstyler-1.5.1 (16 Aug 2007)
+
+ 16 Aug 2007; Daniel Black <dragonheart@gentoo.org>
+ +dvdstyler-1.5.1.ebuild:
+ version bump
+
+ 24 Jul 2007; Daniel Black <dragonheart@gentoo.org>
+ -files/dvdstyler-1.4-gcc4.patch, -dvdstyler-1.4.ebuild,
+ -dvdstyler-1.5.ebuild:
+ old version cleanout
+
+ 24 Jul 2007; Christian Faulhammer <opfer@gentoo.org>
+ dvdstyler-1.5-r1.ebuild:
+ stable x86, bug 185864
+
+ 02 Jul 2007; Daniel Black <dragonheart@gentoo.org>
+ dvdstyler-1.5-r1.ebuild:
+ addded missing media-libs/netpbm dependency as per bug #183848 thanks to
+ Paulo Aragao
+
+*dvdstyler-1.5-r1 (19 Jun 2007)
+
+ 19 Jun 2007; Daniel Black <dragonheart@gentoo.org>
+ +dvdstyler-1.5-r1.ebuild:
+ better make_desktop entry thanks to Chris Mayo bug #181958
+
+*dvdstyler-1.5 (10 Jun 2007)
+
+ 10 Jun 2007; Daniel Black <dragonheart@gentoo.org> +dvdstyler-1.5.ebuild:
+ version bump thanks to all supporters in bug #109894
+
+ 03 Feb 2007; Diego Pettenò <flameeyes@gentoo.org> ChangeLog:
+ Regenerate digest in Manifest2 format.
+
+ 29 Dec 2005; Mark Loeser <halcy0n@gentoo.org>
+ +files/dvdstyler-1.4-gcc4.patch, dvdstyler-1.4.ebuild:
+ Fix compilation with gcc-4.0; bug #113927
+
+ 15 Dec 2005; Donnie Berkholz <spyderous@gentoo.org>; dvdstyler-1.4.ebuild:
+ Port to modular X. Remove virtual/x11, it comes in from gtk+.
+
+ 07 Sep 2005; Daniel Black <dragonheart@gentoo.org> -dvdstyler-1.31.ebuild:
+ removed 1.31 as per bug #104872 to remove version problem. ~amd64 still has
+ issues according to Jim in bug #104872
+
+ 05 Sep 2005; Daniel Black <dragonheart@gentoo.org> dvdstyler-1.31.ebuild:
+ drop x86 keyword to avoid downgrade - bug #104872
+
+ 05 Sep 2005; Daniel Black <dragonheart@gentoo.org> dvdstyler-1.4.ebuild:
+ x86 stable on 1.4 plan to remove 1.31
+
+*dvdstyler-1.4 (04 Sep 2005)
+
+ 04 Sep 2005; Daniel Black <dragonheart@gentoo.org> +dvdstyler-1.4.ebuild,
+ dvdstyler-1.31.ebuild, -dvdstyler-1.40.ebuild:
+ QA clean - removed obscelete build commands, corrected versioing, removed
+ INSTALL and README from installation. Inspired by flameeyes
+
+ 08 Jun 2005; David Holm <dholm@gentoo.org> dvdstyler-1.40.ebuild:
+ Added to ~ppc.
+
+ 07 Jun 2005; Jan Brinkmann <luckyduck@gentoo.org> dvdstyler-1.31.ebuild,
+ dvdstyler-1.40.ebuild:
+ We now depend on =wxGTK-2.4*, see #93746 for details.
+
+*dvdstyler-1.40 (07 Jun 2005)
+
+ 07 Jun 2005; Jan Brinkmann <luckyduck@gentoo.org> +dvdstyler-1.40.ebuild:
+ New upstream release, fixes #95328.
+
+ 22 Apr 2005; Jan Brinkmann <luckyduck@gentoo.org>
+ -files/1.1-AutoMakefile.patch, -files/1.1-code.patch,
+ -files/1.1-gcc34.patch, -files/1.3_beta-code.patch, -dvdstyler-1.1.ebuild,
+ dvdstyler-1.31.ebuild, -dvdstyler-1.3_beta.ebuild:
+ stable on amd64 and x86, did some cleanup
+
+ 22 Apr 2005; Jan Brinkmann <luckyduck@gentoo.org> dvdstyler-1.31.ebuild:
+ stable on amd64 and x86
+
+ 19 Apr 2005; Bryan Østergaard <kloeri@gentoo.org> metadata.xml:
+ Remove retired developer from metadata.xml.
+
+ 30 Mar 2005; Jan Brinkmann <luckyduck@gentoo.org> dvdstyler-1.31.ebuild:
+ dvdstyler now generates desktop file using make_desktop_entry, fixes #82209
+
+*dvdstyler-1.31 (06 Feb 2005)
+
+ 06 Feb 2005; <augustus@gentoo.org> +dvdstyler-1.31.ebuild:
+ Added new build 1.31.
+
+ 15 Jan 2005; Jan Brinkmann <luckyduck@gentoo.org> dvdstyler-1.1.ebuild,
+ dvdstyler-1.3_beta.ebuild:
+ changed app-cdr/cdrtools dependency to virtual/cdrtools. see bug #77817.
+
+*dvdstyler-1.3_beta (21 Nov 2004)
+
+ 21 Nov 2004; Daniel Black <dragonheart@gentoo.org>
+ +files/1.3_beta-code.patch, +dvdstyler-1.3_beta.ebuild:
+ version bump.
+
+*dvdstyler-1.1 (21 Nov 2004)
+
+ 21 Nov 2004; Daniel Black <dragonheart@gentoo.org>
+ -files/1.05-AutoMakefile.patch, -files/1.05-code.patch,
+ -files/1.05-gcc34.patch, +files/1.1-AutoMakefile.patch,
+ +files/1.1-code.patch, +files/1.1-gcc34.patch, -dvdstyler-1.05-r1.ebuild,
+ +dvdstyler-1.1.ebuild:
+ version bump and cleanout. Ebuild and patches thanks to Philippe Weibel
+ <philippe.weibel@free.fr> and Patrick Dawson <pkdawson@gentoo.org> in bug
+ #47899.
+
+ 18 Oct 2004; Danny van Dyk <kugelfang@gentoo.org>
+ dvdstyler-1.05-r1.ebuild:
+ Marked ~amd64.
+
+ 04 Oct 2004; Patrick Dawson <pkdawson@gentoo.org> +files/1.05-gcc34.patch,
+ dvdstyler-1.05-r1.ebuild:
+ gcc-3.4 fix, closes bug #65983.
+
+*dvdstyler-1.05-r1 (05 Aug 2004)
+
+ 05 Aug 2004; Daniel Black <dragonheart@gentoo.org>
+ files/1.05-AutoMakefile.patch, +dvdstyler-1.05-r1.ebuild,
+ -dvdstyler-1.05.ebuild:
+ Changed to use installed dev-libs/expat rather than one that came with the
+ package. Also moved silence.mp2 to the correct directory.
+
+*dvdstyler-1.05 (30 Jul 2004)
+
+ 30 Jul 2004; Daniel Black <dragonheart@gentoo.org> +metadata.xml,
+ +dvdstyler-1.05.ebuild, +files/1.05-code.patch,
+ +files/1.05-AutoMakefile.patch:
+ Inital import as per bug #47899. Thanks to Ian Haylock
+ <haylocki@v21mail.co.uk> for the bug.
diff --git a/media-video/dvdstyler/Manifest b/media-video/dvdstyler/Manifest
new file mode 100644
index 0000000..0e61149
--- /dev/null
+++ b/media-video/dvdstyler/Manifest
@@ -0,0 +1,7 @@
+AUX dvdstyler-1.7.4-autoconf.patch 3058 SHA256 b85ca996bb831f79d2e61497d09f19313db097207935d3727f145354f8108143 SHA512 64ec0f4b0718fc8b89dfd78691fffd2a50514ea4fe91a56985d3b775394204d91b34858a49e454a0722f1bc4ed3f98622315f51adacfea7ccb160c2e0af4f1c4 WHIRLPOOL aa123edc1e90d96329d8d7dd8fb487243501d10a374b6a23d7e89765c7bf9bfc254a679442cafc23ef43deb9873aa289f41c62411103e5268c1ff91f737eb78c
+AUX dvdstyler-1.8.1-cast.patch 437 SHA256 5efcb4b2f943e2e3ad5b4d0e5891c69655ec0aec912a45c61eec32b8c5862070 SHA512 1e825a9911508a2e43ab41b81cf511b6bd43f15b0394df96a89231e0d97c0bac1259701fcf3b71cac781db74925710d4c8082b4dac4605187b7d5d81aec2f734 WHIRLPOOL e5a4f82e1a6a0d9f6c63e7d653ee2e2958f3f8f559d4532675e452f1f1ac6ac1a6ff1b4ce134f6b3cb8b124f4112b01663657ab9400c578c7cbee1288c080207
+AUX dvdstyler-1.8.1-fix_enum_error.patch 562 SHA256 d9a11f38dd0245ff0ce687296798139100171f484a7c90b43ff8b37c201a8240 SHA512 af5cdf9d6686b510794c3077ed1ec4551aa48b198b3570db9d4948a5a01246ee496e1c8bdd7b96c9c23372d0cc6d9e415df79a52c4f0f4c2b6cf3050cfded34a WHIRLPOOL 978f08233c30aa52220e89da3e9587753caf372100362d4097f3e856eeddf3b49bb179201994199a2eede0ec1fe44b954465f07b9eeb8795bcbfa1b7e99e1ec7
+DIST DVDStyler-2.3.tar.bz2 4458253 SHA256 42030f845d24db229e6d5f74fc7ad3d0ec2f2fe6046657aa06c48356b94670b1 SHA512 f7005d0a04968ffa2250a6b298b6b9612dc70611619667455e728131a23ec53d1ee9212839f13426508e419b00aab4c646ff9722885940fef80418be3bc66e9a WHIRLPOOL b0ef1c4a49e54f80e8c9e70280676ba1dac216d5b8d81fac514d193b0fe63341473d0f9a20994a3bb8e2fb6960b6d8afae3809bbee81d1df490d23d95ff44c4d
+EBUILD dvdstyler-2.3.ebuild 1650 SHA256 20046e0f945e7d49343062e1f0865cd04b409a59616073d07732433f9c9b6bca SHA512 81b68756ae2994e40bdd76eaf7ebce0009d0239e1744244866c6e9fc2bfb53220829b085fa1bcba59e8e5eb20bdd70835127400e7b4c0c8aaf58f187ea6645c5 WHIRLPOOL 077e87e69df04243c2be9040685f1446c62ed3d5dc10fbabbdb6d70f11e71ac30536988e012c12c97c89afb38a790379cb6bac987a7be516f133dcc8e6bbccdc
+MISC ChangeLog 9870 SHA256 d06504f6cfe54236c1551ce3b265393ec95e32774e7fea0ce4a0d09ceecbb84a SHA512 5fa60e5faf5ef59ad026628775dfb4e2fbae886c269c20a1be60310757a97cb91325633a1039a3638ce26c8f1f048d865dfaae96e9a3aac1c530098f6da29397 WHIRLPOOL efe178a726ee10999665ff8e09e19125b2b642d3bc4033b543148fd7b490c5db691d4744226a03145bf7467a84c8817cbfe5ea88f5b37ff7b77511b9894328ea
+MISC metadata.xml 158 SHA256 f9dd4fb4a7f368e776ea0d7d394dad8f3a674e67f6103d6fb58a8a98971eeee4 SHA512 0bfb0265d3c42ba1958f8e589316112dba381e7701773668443cf0afe678a8d80675392efb2713e3d376b85b03a5b2bfb390c94411e0c6cf8a223b26aa9a04ca WHIRLPOOL 447b37b9f46058b1adc8d30a57460a8ab6b5ec149870c5ea385956cae9dd10a99b36e63526f2d13cabf13a4185f8b4e22a78156ab141a6e397bba298ab7efb2a
diff --git a/media-video/dvdstyler/dvdstyler-2.3.ebuild b/media-video/dvdstyler/dvdstyler-2.3.ebuild
new file mode 100644
index 0000000..3c0180b
--- /dev/null
+++ b/media-video/dvdstyler/dvdstyler-2.3.ebuild
@@ -0,0 +1,65 @@
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-video/dvdstyler/dvdstyler-2.1.ebuild,v 1.4 2012/05/05 08:58:59 jdhore Exp $
+
+EAPI=4
+
+MY_P=${P/dvds/DVDS}
+WX_GTK_VER=2.8
+
+inherit wxwidgets
+
+DESCRIPTION="A cross-platform free DVD authoring application"
+HOMEPAGE="http://www.dvdstyler.org/"
+SRC_URI="mirror://sourceforge/${PN}/${MY_P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="debug gnome kernel_linux"
+
+COMMON_DEPEND=">=app-cdr/dvd+rw-tools-7.1
+ >=media-libs/libexif-0.6.16
+ >=media-libs/wxsvg-1.1.9
+ >=media-video/dvdauthor-0.7.0
+ >=media-video/xine-ui-0.99.1
+ virtual/cdrtools
+ >=virtual/ffmpeg-0.6.90[encode]
+ virtual/jpeg
+ x11-libs/wxGTK:2.8[gstreamer,X]
+ gnome? ( >=gnome-base/libgnomeui-2 )
+ kernel_linux? ( sys-fs/udev )"
+RDEPEND="${COMMON_DEPEND}
+ >=app-cdr/dvdisaster-0.72.2"
+DEPEND="${COMMON_DEPEND}
+ app-arch/zip
+ app-text/xmlto
+ virtual/pkgconfig
+ sys-devel/gettext"
+
+S=${WORKDIR}/${MY_P}
+
+src_prepare() {
+ use gnome || sed -i -e '/PKG_CONFIG/s:libgnomeui-2.0:dIsAbLeAuToMaGiC&:' configure
+
+ # rmdir: failed to remove `tempfoobar': Directory not empty
+ sed -i -e '/rmdir "$$t"/d' docs/Makefile.in || die
+
+ sed -i -e 's:@LIBS@:& -ljpeg:' wxVillaLib/Makefile.in || die #367863
+
+ if has_version ">=media-video/ffmpeg-0.9"; then
+ sed -i -e '/^#i/s:vsink_buffer:buffersink:' src/mediatrc_ffmpeg.cpp || die #395793
+ fi
+}
+
+src_configure() {
+ econf \
+ --docdir=/usr/share/doc/${PF} \
+ $(use_enable debug) \
+ --with-wx-config=${WX_CONFIG}
+}
+
+src_install() {
+ default
+ rm -f "${ED}"usr/share/doc/${PF}/{COPYING*,INSTALL*}
+}
diff --git a/media-video/dvdstyler/files/dvdstyler-1.7.4-autoconf.patch b/media-video/dvdstyler/files/dvdstyler-1.7.4-autoconf.patch
new file mode 100644
index 0000000..a9d6a2b
--- /dev/null
+++ b/media-video/dvdstyler/files/dvdstyler-1.7.4-autoconf.patch
@@ -0,0 +1,77 @@
+--- /tmp/DVDStyler-1.7.4/./src/Makefile.am 2009-09-04 15:49:32.000000000 +1000
++++ ./src/Makefile.am 2009-10-14 15:34:46.000000000 +1100
+@@ -7,7 +7,7 @@
+ VobListBox.cpp TitlePropDlg.cpp TitlesetManager.cpp\
+ BurnDlg.cpp ProgressDlg.cpp DirCtrl.cpp StatusBar.cpp MainWin.cpp dvdstyler.cpp
+
+-CXXFLAGS = @CXXFLAGS@ -I..
++AM_CXXFLAGS = @CXXFLAGS@ -I..
+ LDADD = ../wxVillaLib/libwxvilla.a
+
+ SUBDIRS = rc
+--- /tmp/DVDStyler-1.7.4/./Makefile.am 2008-07-15 07:58:46.000000000 +1000
++++ ./Makefile.am 2009-10-14 15:23:26.000000000 +1100
+@@ -1,6 +1,5 @@
+ SUBDIRS = wxVillaLib src locale backgrounds buttons objects data docs
+ ACLOCAL_AMFLAGS=-I.
+-pkgdatadir=@datadir@/doc/@PACKAGE@
+-pkgdata_DATA = AUTHORS COPYING INSTALL README ChangeLog
++doc_DATA = AUTHORS COPYING INSTALL README ChangeLog
+ run: all
+ $(MAKE) -C src run
+--- /tmp/DVDStyler-1.7.4/./wxVillaLib/Makefile.am 2007-12-31 09:51:35.000000000 +1100
++++ ./wxVillaLib/Makefile.am 2009-10-14 15:35:32.000000000 +1100
+@@ -3,4 +3,4 @@
+ PipeExecute.cpp PropDlg.cpp SConv.cpp\
+ Thumbnails.cpp ThumbnailFactory.cpp\
+ utils.cpp VerticalToolbar.cpp
+-CXXFLAGS = @CXXFLAGS@ @GNOMEUI2_CFLAGS@ @LIBEXIF_CFLAGS@ -DWX_SVG
++AM_CXXFLAGS = @CXXFLAGS@ @GNOMEUI2_CFLAGS@ @LIBEXIF_CFLAGS@ -DWX_SVG
+--- /tmp/DVDStyler-1.7.4/locale/Makefile.in 2009-09-19 18:46:38.000000000 +1000
++++ locale/Makefile.in 2009-10-14 15:46:49.000000000 +1100
+@@ -4,8 +4,10 @@
+ # building lang.mo files from the translated lang.po catalogs.
+
+ PROGNAME=dvdstyler
+-LINGUAS=cs da de el es eu fr hu it ko mk nl pl pt pt_BR ru sk sl sr sv vi zh_TW
+-LINGUAS_ALL=ca cs da de el es eu fr hu it ja ko mk nl pl pt pt_BR ru sk sl sr sv vi zh_TW
++# ls *.po | cut -f1 -d . | xargs echo >> Makefile.in
++LINGUAS=cs da de el es fr it ko mk pl pt pt_BR ru sl sr vi zh_TW
++LINGUAS_ALL=cs da de el es fr it ko mk pl pt pt_BR ru sl sr vi zh_TW
++
+
+ prefix=@prefix@
+ datarootdir=@datarootdir@
+--- /tmp/DVDStyler-1.7.4/docs/Makefile.am 2009-08-30 00:30:10.000000000 +1000
++++ docs/Makefile.am 2009-10-14 16:08:10.000000000 +1100
+@@ -1,22 +1,19 @@
+-pkgdatadir=@datadir@/man/man1
+-pkgdata_DATA = dvdstyler.1
++dist_man_MANS = dvdstyler.1
+
+ LINGUAS=en de
+-docdir=@datadir@/@PACKAGE@/docs
+ doc_DATA = $(LINGUAS:%=help_%.zip)
+
+ help%.zip: DVDStylerGuide%.xml
+- mkdir temp
+- (cd temp && $(XMLTO) --skip-validation htmlhelp ../DVDStylerGuide$*.xml && rm -f *.hh* && $(ZIP) ../help$*.zip *.html)
+- rm -f temp/*.html
+- rmdir temp
++ t=`mktemp -d tempXXXXXXX`; \
++ (cd "$$t" && $(XMLTO) --skip-validation htmlhelp ../DVDStylerGuide$*.xml && rm -f *.hh* && $(ZIP) ../help$*.zip *.html) ; \
++ rm -f "$$t"/*.html ; \
++ rmdir "$$t"
+ $(ZIP) help$*.zip htmlhelp.hhp toc.hhc images/*.png
+
+ html: $(LINGUAS:%=html_%)
+
+ html%: DVDStylerGuide%.xml
+- rm -rf html$*
+- mkdir html$*
+- (cd html$* && $(XMLTO) --skip-validation htmlhelp ../DVDStylerGuide$*.xml && rm -f *.hh*)
+- mkdir html$*/images
++ t=`mktemp -d htmlXXXXXX` ; \
++ (cd "$$t" && $(XMLTO) --skip-validation htmlhelp ../DVDStylerGuide$*.xml && rm -f *.hh*) ; \
++ mkdir "$$t"/images
+ cp images/*.png html$*/images/
diff --git a/media-video/dvdstyler/files/dvdstyler-1.8.1-cast.patch b/media-video/dvdstyler/files/dvdstyler-1.8.1-cast.patch
new file mode 100644
index 0000000..fb4bf90
--- /dev/null
+++ b/media-video/dvdstyler/files/dvdstyler-1.8.1-cast.patch
@@ -0,0 +1,11 @@
+--- /tmp/imagjpg.cpp 2010-07-18 15:46:11.000000000 +1000
++++ ./wxVillaLib/imagjpg.cpp 2010-07-18 15:46:29.000000000 +1000
+@@ -226,7 +226,7 @@
+
+ bool wxJPGHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbose, int WXUNUSED(index) )
+ {
+- wxCHECK_MSG( image, false, "NULL image pointer" );
++ wxCHECK_MSG( image, false, wxT("NULL image pointer") );
+
+ struct jpeg_decompress_struct cinfo;
+ wx_error_mgr jerr;
diff --git a/media-video/dvdstyler/files/dvdstyler-1.8.1-fix_enum_error.patch b/media-video/dvdstyler/files/dvdstyler-1.8.1-fix_enum_error.patch
new file mode 100644
index 0000000..a356310
--- /dev/null
+++ b/media-video/dvdstyler/files/dvdstyler-1.8.1-fix_enum_error.patch
@@ -0,0 +1,11 @@
+--- DVDStyler-1.8.1/src/mediatrc_ffmpeg.cpp 2011-08-29 19:24:10.000000000 +0200
++++ DVDStyler-1.8.1-new/src/mediatrc_ffmpeg.cpp 2011-08-29 19:24:56.000000000 +0200
+@@ -2242,7 +2242,7 @@
+ } else
+ big_picture.quality = (int) ost->st->quality;
+ if (!me_threshold)
+- big_picture.pict_type = 0;
++ big_picture.pict_type = AV_PICTURE_TYPE_NONE;
+ // big_picture.pts = AV_NOPTS_VALUE;
+ big_picture.pts= ost->sync_opts;
+ // big_picture.pts= av_rescale(ost->sync_opts, AV_TIME_BASE*(int64_t)enc->time_base.num, enc->time_base.den);
diff --git a/media-video/dvdstyler/metadata.xml b/media-video/dvdstyler/metadata.xml
new file mode 100644
index 0000000..d9df187
--- /dev/null
+++ b/media-video/dvdstyler/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<herd>video</herd>
+</pkgmetadata>
diff --git a/media-video/makemkv/Manifest b/media-video/makemkv/Manifest
new file mode 100644
index 0000000..2ac5fb5
--- /dev/null
+++ b/media-video/makemkv/Manifest
@@ -0,0 +1,9 @@
+DIST makemkv-bin-1.7.7.tar.gz 6586450 SHA256 3aa259389888479612cae50dc7134733a58ce93cb76d31f73290cf607335984b SHA512 96c256ac60ea0da72295a03a7f6e76f5819215f34265414e0964dffcbd33741260e86fa4f378ddfc73047e0fe4ddc0e08123963e8de8004274a46338c6ccb1d8 WHIRLPOOL 1e98cd711283d826ada15b4e6920922bca82d3a3137f09afe8117f1e012c5d72d7f291ab329debfe44339779f73b635f4b504b16bc1eacb3553eabc0f913dccb
+DIST makemkv-oss-1.7.7.tar.gz 484029 SHA256 05c15168a9fdca5a3b992ee9ea1789bff43d2e71b07546cf54967f6ccd4a296b SHA512 ac9ddf8868292161096b60cb130b0a6ea8090f7b6c9f08f21edd6b9d28bad0388c12ab4fd66700e7d4350e7dd7fb16321dcf86cd9b6d1125c3ae0b382fb3ea0a WHIRLPOOL feb707265e0f50e4668186f4e7795427c9fd6370dec174bf594e270c3c05c919776375f83d49ef60417ab6918ff1cc75840d9ba71ebf6689afaaed56ff57898c
+DIST makemkv_v1.6.16_bin.tar.gz 5877692 SHA256 0f0b2df68b7fc294834d7cbeda21d54884caf9e13a9b0190921dae27d7418309
+DIST makemkv_v1.6.16_oss.tar.gz 438026 SHA256 2cff47e51f465259704b0840717433f90e938d13fd7e18a01d674174b747f85b
+DIST makemkv_v1.7.4_bin.tar.gz 6691976 SHA256 0d0c14243fc8936792f0768d0c67682a071f79af489457f6a53826b543ad502a
+DIST makemkv_v1.7.4_oss.tar.gz 480897 SHA256 14be0175cce35fae31d2e175db5789b561b1859f125b2cd52af77ba180ec2ba1
+EBUILD makemkv-1.6.16.ebuild 1580 SHA256 5b0b7214275acbe4c8037429ca0858e3942c507323376f9318b47bd4a538e5a5 SHA512 0b38105e71b1ddac9cb21119e501cfffc99e2879ceca2d6d097e9dac3232332e7d4cef7261ddfa24beb73a9ad18c9b380e29b9a7781abcf021049ae9daa08659 WHIRLPOOL 82698211bacf848950b8a847b155ce5ee2379ffdc4ed213053fb05e85ac462d796663bc87c758350c5403536e307d12f5d3b2a389c78f0412ed48b068f93d3d7
+EBUILD makemkv-1.7.4.ebuild 1580 SHA256 5b0b7214275acbe4c8037429ca0858e3942c507323376f9318b47bd4a538e5a5 SHA512 0b38105e71b1ddac9cb21119e501cfffc99e2879ceca2d6d097e9dac3232332e7d4cef7261ddfa24beb73a9ad18c9b380e29b9a7781abcf021049ae9daa08659 WHIRLPOOL 82698211bacf848950b8a847b155ce5ee2379ffdc4ed213053fb05e85ac462d796663bc87c758350c5403536e307d12f5d3b2a389c78f0412ed48b068f93d3d7
+EBUILD makemkv-1.7.7.ebuild 1576 SHA256 999f8af2702e90e27cc34ac5ca15ff7c03a2228979bb98e46c4053a9c4fd5889 SHA512 3e8f45c6a9d040f525bfe6aec3e25c6ff005f08d13f7912589554c7a1a62dff007fe52c760afb51ce0921ce8088fda65fcff4c7969afbbd664632e16a6326df8 WHIRLPOOL 5773c52bd81b0226f2cf262fd3a7451cc906bd4b8f48a920d92322b46f56e8e638b72f493112182df2b8ccd3efc6525130cbc245fc944d008abd54d629572942
diff --git a/media-video/makemkv/makemkv-1.6.16.ebuild b/media-video/makemkv/makemkv-1.6.16.ebuild
new file mode 100644
index 0000000..a194337
--- /dev/null
+++ b/media-video/makemkv/makemkv-1.6.16.ebuild
@@ -0,0 +1,65 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=2
+
+RESTRICT="mirror"
+
+inherit multilib eutils
+
+MY_P="makemkv_v${PV}_oss"
+MY_PB="makemkv_v${PV}_bin"
+
+DESCRIPTION="Tool for converting Blu-Ray, HD-DVD and DVD videos to matroska."
+HOMEPAGE="http://www.makemkv.com"
+SRC_URI="http://www.makemkv.com/download/makemkv_v${PV}_oss.tar.gz
+ http://www.makemkv.com/download/makemkv_v${PV}_bin.tar.gz"
+
+LICENSE="makemkv-EULA"
+SLOT="0"
+KEYWORDS="-* ~amd64 ~x86"
+IUSE=""
+
+DEPEND="x11-libs/qt-gui
+ dev-libs/openssl
+ media-libs/mesa
+ x11-libs/qt-dbus"
+src_prepare() {
+ cd "${MY_P}"
+}
+
+src_compile() {
+ cd "${MY_P}"
+ emake GCC="$(tc-getCC) ${CFLAGS} ${LDFLAGS}" -f makefile.linux || die "make failed"
+}
+
+src_install() {
+ # install oss package
+ cd "${MY_P}"
+ dolib.so out/libdriveio.so.0
+ dolib.so out/libmakemkv.so.1
+ dosym libdriveio.so.0 /usr/$(get_libdir)/libdriveio.so.0.${PV}
+ dosym libmakemkv.so.1 /usr/$(get_libdir)/libmakemkv.so.1.${PV}
+ into /usr
+ dobin out/makemkv
+
+ newicon makemkvgui/src/img/128/mkv_icon.png ${PN}.png
+ make_desktop_entry ${PN} "MakeMKV" ${PN} "Qt;AudioVideo;Video"
+
+ # install bin package
+ cd "../${MY_PB}/bin"
+ if use x86; then
+ dobin i386/makemkvcon
+ elif use amd64; then
+ dobin amd64/makemkvcon
+ fi
+}
+
+pkg_postinst() {
+ elog "While MakeMKV is in beta mode, upstream has provided a license"
+ elog "to use if you do not want to purchase one."
+ elog ""
+ elog "See this forum thread for more information, including the key:"
+ elog "http://www.makemkv.com/forum2/viewtopic.php?f=5&t=1053"
+}
diff --git a/media-video/makemkv/makemkv-1.7.4.ebuild b/media-video/makemkv/makemkv-1.7.4.ebuild
new file mode 100644
index 0000000..a194337
--- /dev/null
+++ b/media-video/makemkv/makemkv-1.7.4.ebuild
@@ -0,0 +1,65 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=2
+
+RESTRICT="mirror"
+
+inherit multilib eutils
+
+MY_P="makemkv_v${PV}_oss"
+MY_PB="makemkv_v${PV}_bin"
+
+DESCRIPTION="Tool for converting Blu-Ray, HD-DVD and DVD videos to matroska."
+HOMEPAGE="http://www.makemkv.com"
+SRC_URI="http://www.makemkv.com/download/makemkv_v${PV}_oss.tar.gz
+ http://www.makemkv.com/download/makemkv_v${PV}_bin.tar.gz"
+
+LICENSE="makemkv-EULA"
+SLOT="0"
+KEYWORDS="-* ~amd64 ~x86"
+IUSE=""
+
+DEPEND="x11-libs/qt-gui
+ dev-libs/openssl
+ media-libs/mesa
+ x11-libs/qt-dbus"
+src_prepare() {
+ cd "${MY_P}"
+}
+
+src_compile() {
+ cd "${MY_P}"
+ emake GCC="$(tc-getCC) ${CFLAGS} ${LDFLAGS}" -f makefile.linux || die "make failed"
+}
+
+src_install() {
+ # install oss package
+ cd "${MY_P}"
+ dolib.so out/libdriveio.so.0
+ dolib.so out/libmakemkv.so.1
+ dosym libdriveio.so.0 /usr/$(get_libdir)/libdriveio.so.0.${PV}
+ dosym libmakemkv.so.1 /usr/$(get_libdir)/libmakemkv.so.1.${PV}
+ into /usr
+ dobin out/makemkv
+
+ newicon makemkvgui/src/img/128/mkv_icon.png ${PN}.png
+ make_desktop_entry ${PN} "MakeMKV" ${PN} "Qt;AudioVideo;Video"
+
+ # install bin package
+ cd "../${MY_PB}/bin"
+ if use x86; then
+ dobin i386/makemkvcon
+ elif use amd64; then
+ dobin amd64/makemkvcon
+ fi
+}
+
+pkg_postinst() {
+ elog "While MakeMKV is in beta mode, upstream has provided a license"
+ elog "to use if you do not want to purchase one."
+ elog ""
+ elog "See this forum thread for more information, including the key:"
+ elog "http://www.makemkv.com/forum2/viewtopic.php?f=5&t=1053"
+}
diff --git a/media-video/makemkv/makemkv-1.7.7.ebuild b/media-video/makemkv/makemkv-1.7.7.ebuild
new file mode 100644
index 0000000..37ef18d
--- /dev/null
+++ b/media-video/makemkv/makemkv-1.7.7.ebuild
@@ -0,0 +1,65 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=2
+
+RESTRICT="mirror"
+
+inherit multilib eutils
+
+MY_P="makemkv-oss-${PV}"
+MY_PB="makemkv-bin-${PV}"
+
+DESCRIPTION="Tool for converting Blu-Ray, HD-DVD and DVD videos to matroska."
+HOMEPAGE="http://www.makemkv.com"
+SRC_URI="http://www.makemkv.com/download/makemkv-oss-${PV}.tar.gz
+ http://www.makemkv.com/download/makemkv-bin-${PV}.tar.gz"
+
+LICENSE="makemkv-EULA"
+SLOT="0"
+KEYWORDS="-* ~amd64 ~x86"
+IUSE=""
+
+DEPEND="x11-libs/qt-gui
+ dev-libs/openssl
+ media-libs/mesa
+ x11-libs/qt-dbus"
+src_prepare() {
+ cd "${MY_P}"
+}
+
+src_compile() {
+ cd "${MY_P}"
+ emake GCC="$(tc-getCC) ${CFLAGS} ${LDFLAGS}" -f makefile.linux || die "make failed"
+}
+
+src_install() {
+ # install oss package
+ cd "${MY_P}"
+ dolib.so out/libdriveio.so.0
+ dolib.so out/libmakemkv.so.1
+ dosym libdriveio.so.0 /usr/$(get_libdir)/libdriveio.so.0.${PV}
+ dosym libmakemkv.so.1 /usr/$(get_libdir)/libmakemkv.so.1.${PV}
+ into /usr
+ dobin out/makemkv
+
+ newicon makemkvgui/src/img/128/mkv_icon.png ${PN}.png
+ make_desktop_entry ${PN} "MakeMKV" ${PN} "Qt;AudioVideo;Video"
+
+ # install bin package
+ cd "../${MY_PB}/bin"
+ if use x86; then
+ dobin i386/makemkvcon
+ elif use amd64; then
+ dobin amd64/makemkvcon
+ fi
+}
+
+pkg_postinst() {
+ elog "While MakeMKV is in beta mode, upstream has provided a license"
+ elog "to use if you do not want to purchase one."
+ elog ""
+ elog "See this forum thread for more information, including the key:"
+ elog "http://www.makemkv.com/forum2/viewtopic.php?f=5&t=1053"
+}
diff --git a/net-misc/yacy/Manifest b/net-misc/yacy/Manifest
new file mode 100644
index 0000000..86fdc6a
--- /dev/null
+++ b/net-misc/yacy/Manifest
@@ -0,0 +1,4 @@
+AUX yacy-1.04.confd 396 SHA256 d750007582e57672dcb4ddac4b0c843d3224debb2283f8d5a11435de05d21d62 SHA512 4f72d88673b63e5dfd1770c778223aad30567c468f754a19ad9a6d43da5588abdb8cea3aeae307822cdd3a9f84a1bf57de550371dfeb93fd2245de85b5c6c0c2 WHIRLPOOL 56e9f82cfcc29f3144509fe9974bebef1a1f1246ba94bb8453d0806a3dfcd0fb3a60ff1cd890e199d83cdcec0428df018266ccd712b730650a8597188b83669d
+AUX yacy-1.04.rc 1574 SHA256 9ee88a806e18aa1fb1345380cc97af78ca7a50099c2fb33e17b33ae2f854c253 SHA512 10fadf0f951f29712adb1864dbd3dfc445765e15a8ac8122c08731c2c10d50c27245fec88c349179433d1b13b0008c0305fec3f60896ab682f8b81eb90d5321d WHIRLPOOL e7d454d232177d0c65769d92a734bb39b8fd7169cac789b489bafaff32761210e1ffb2700b5286d5c92c1bf06ab83302fb9aeb55d69475ca413011d91375d1f7
+DIST yacy_v1.04_20120709_9000.tar.gz 36054202 SHA256 b1096127b5378351d663c119fea1626772a1bd21a66c1ab3efd27de2a07e86be SHA512 56511365c59371a4adb9664d37cd007b80ce2fe93c1f8ba9b23cab931ec098ec0da3f0d035be3a19694ab0bf59648c64321cae84675a4c2bb614c7072eb19c93 WHIRLPOOL da7a2506c92397c31efe1c716be5625544c3ca5572fcfc382016b7ddbbda936786f520d985bb640107695758ff1f6700794f7f0a64fd896aed2f4ce1b3108dbb
+EBUILD yacy-1.04.20120709.9000.ebuild 1161 SHA256 387f8682730f42b0a9531c9e885da341a74296371fbb7656a0629bda507650ee SHA512 ffed492af89eb024b292e3cbb16f5b38021454df73f4d1fe09ea961a0aba9f640984b6c2956ca2199c85ad193008e9e6fb289180788c1c7e65282c98aeccc6e7 WHIRLPOOL fc249008917d7d673769314de699a362bba11ab78b4ce0463d8e5334210f13aa7cd4fe8ff2bbcfe14f86b14840e11bc725726f1666c0a6173f8d64c0da3d7644
diff --git a/net-misc/yacy/files/yacy-1.04.confd b/net-misc/yacy/files/yacy-1.04.confd
new file mode 100755
index 0000000..32bf9eb
--- /dev/null
+++ b/net-misc/yacy/files/yacy-1.04.confd
@@ -0,0 +1,18 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+# home-directory
+YACY_HOME="/opt/yacy"
+
+# user to run yacy as
+YACY_USER="yacy"
+
+# java options (optional)
+JAVA_OPTIONS="-Xmx600m -Xms180m"
+
+# niceness (optional)
+NICENESS="1"
+
+# wait on stop, should be maxWaitingWordFlush, see DATA/SETTINGS/httpProxy.conf
+WAIT_ON_STOP="180"
diff --git a/net-misc/yacy/files/yacy-1.04.rc b/net-misc/yacy/files/yacy-1.04.rc
new file mode 100755
index 0000000..9560fcd
--- /dev/null
+++ b/net-misc/yacy/files/yacy-1.04.rc
@@ -0,0 +1,74 @@
+#!/sbin/runscript
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+depend() {
+ need net
+}
+
+cd $YACY_HOME
+
+JAVA="$(java-config --java)"
+
+JAVA_ARGS=""
+if [ -e DATA/SETTINGS/httpProxy.conf ] ; then
+ for i in $(grep javastart DATA/SETTINGS/httpProxy.conf); do
+ i="${i#javastart_*=}";
+ JAVA_ARGS=-$i" "$JAVA_ARGS;
+ done
+fi
+
+CLASSPATH=""
+test -e lib/ && for N in `ls -1 lib/*.jar`; do CLASSPATH="$CLASSPATH$N:"; done
+CLASSPATH="-classpath classes:htroot:$CLASSPATH"
+
+if [ -n "${NICENESS}" ] ; then
+ NICE="nice -n ${NICENESS}"
+fi
+
+#PORT="8090"
+
+start() {
+ ebegin "Starting YaCy"
+ ${NICE} sudo -u ${YACY_USER} ${JAVA} ${JAVA_OPTIONS} ${JAVA_ARGS} ${CLASSPATH} net.yacy.yacy &> /dev/null &
+ echo $! > /var/run/yacy.pid
+ sleep 1
+ ps ax|grep "^ *$(cat /var/run/yacy.pid)" > /dev/null
+ eend $?
+}
+
+stop() {
+ ebegin "Shutting down YaCy"
+ sudo -u ${YACY_USER} ${JAVA} ${JAVA_OPTIONS} ${JAVA_ARGS} ${CLASSPATH} net.yacy.yacy -shutdown &> /dev/null &
+ einfon "Waiting ."
+ cnt=0
+ while ( ps ax|grep "^ *$(cat /var/run/yacy.pid)" > /dev/null )
+ do
+ cnt=`expr $cnt + 2`
+ if [ $cnt -gt ${WAIT_ON_STOP} ] ; then
+ eend 1 "Failed."
+ exit
+ fi
+ sleep 2
+ echo -n "."
+ done
+ rm /var/run/yacy.pid
+ echo "done."
+ eend $?
+}
+
+status() {
+ if service_started "${myservice}" ; then
+ if ! ps p `cat /var/run/yacy.pid` &> /dev/null ; then
+ eerror "Service seems to be down"
+ return 1
+ fi
+ else
+ if [ -e /var/run/yacy.pid ]; then
+ eerror "Service seems to be running already"
+ return 1
+ fi
+ return 0
+ fi
+}
diff --git a/net-misc/yacy/yacy-1.04.20120709.9000.ebuild b/net-misc/yacy/yacy-1.04.20120709.9000.ebuild
new file mode 100755
index 0000000..2eaf239
--- /dev/null
+++ b/net-misc/yacy/yacy-1.04.20120709.9000.ebuild
@@ -0,0 +1,47 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $HEADER: $
+
+inherit eutils versionator
+
+MAJOR_PV="$(get_version_component_range 1-2)"
+REL_PV="$(get_version_component_range 3)"
+SVN_PV="$(get_version_component_range 4)"
+
+DESCRIPTION="YaCy - p2p based distributed web-search engine"
+HOMEPAGE="http://www.yacy.net/"
+SRC_URI="http://www.yacy.net/release/yacy_v${MAJOR_PV}_${REL_PV}_${SVN_PV}.tar.gz"
+SLOT="0"
+KEYWORDS="~x86 ~amd64"
+DEPEND=">=virtual/jdk-1.6.0
+ app-admin/sudo"
+LICENSE="GPL-2"
+
+IUSE=""
+
+S="${WORKDIR}/yacy"
+
+src_install() {
+ dodir /opt
+ mv "${S}" "${D}/opt/yacy"
+ chown -R yacy:yacy "${D}/opt/yacy"
+
+ dodir /var/log/yacy
+ chown yacy:yacy "${D}/var/log/yacy"
+ dosed "s:DATA/LOG/:/var/log/yacy/:g" "/opt/yacy/yacy.logging"
+
+ exeinto /etc/init.d
+ newexe "${FILESDIR}/yacy-${MAJOR_PV}.rc" yacy
+ insinto /etc/conf.d
+ newins "${FILESDIR}/yacy-${MAJOR_PV}.confd" yacy
+}
+
+pkg_setup() {
+ enewgroup yacy
+ enewuser yacy -1 /bin/bash /opt/yacy yacy
+}
+
+pkg_postinst() {
+ einfo "yacy.logging will write logfiles into /var/log/yacy/"
+ einfo "To setup YaCy, open http://localhost:8090 in your browser."
+}
diff --git a/profiles/repo_name b/profiles/repo_name
new file mode 100644
index 0000000..628631b
--- /dev/null
+++ b/profiles/repo_name
@@ -0,0 +1 @@
+my_local_overlay
diff --git a/repositories.xml b/repositories.xml
new file mode 100644
index 0000000..5fe597b
--- /dev/null
+++ b/repositories.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<layman>
+</layman>
diff --git a/www-apps/mumble-django/mumble-django-2.4.ebuild b/www-apps/mumble-django/mumble-django-2.4.ebuild
new file mode 100644
index 0000000..901c86d
--- /dev/null
+++ b/www-apps/mumble-django/mumble-django-2.4.ebuild
@@ -0,0 +1,134 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/www-apps/mediawiki/mediawiki-1.16.5.ebuild,v 1.1 2011/05/07 08:37:00 radhermit Exp $
+
+EAPI="3"
+inherit webapp depend.php versionator eutils
+
+MY_BRANCH=$(get_version_component_range 1-2)
+
+DESCRIPTION="Web Interface for the Mumble-Server Murmur"
+HOMEPAGE="http://mumble-django.org"
+SRC_URI="https://bitbucket.org/Svedrin/mumble-django/get/v2.4.tar.gz${MY_BRANCH}/${P}.tar.gz"
+
+LICENSE="GPL-2"
+KEYWORDS="~amd64"
+IUSE="ice dbus"
+
+DEPEND="media-sound/murmur
+ >=dev-lang/python-2.5
+ >=dev-python/django-1.2.3
+ dev-python/django-registration
+ dev-python/imaging
+ dev-python/simplejson
+ qr-code? ( qrencode-python )
+ dbus? ( sys-apps/dbus )
+RDEPEND="${DEPEND}
+ math? (
+ app-text/dvipng
+ virtual/tex-base
+ app-text/ghostscript-gpl
+ || ( media-gfx/imagemagick media-gfx/graphicsmagick[imagemagick] )
+ )
+ imagemagick? ( || ( media-gfx/imagemagick media-gfx/graphicsmagick[imagemagick] ) )
+ !imagemagick? ( || ( dev-lang/php[gd] dev-lang/php[gd-external] ) )
+ || ( >=dev-lang/php-5.3[mysql?,postgres?,session,xml]
+ <dev-lang/php-5.3[mysql?,pcre,postgres?,session,spl,xml] )
+ sqlite? ( dev-db/sqlite:3[fts3]
+ || ( >=dev-lang/php-5.3[sqlite3,pdo] <dev-lang/php-5.3[sqlite,pdo] ) )"
+
+RESTRICT="test"
+
+need_httpd_cgi
+need_php_httpd
+
+src_compile() {
+ if use math; then
+ einfo "Compiling math support"
+ cd math || die
+ if ! use ocamlopt; then
+ sed -e "s/ocamlopt/ocamlc/" \
+ -e "s/cmxa/cma/" \
+ -e "s/cmx/cmo/g" -i Makefile || die
+ fi
+ emake || die
+ else
+ einfo "Math support not enabled. Skipping."
+ fi
+
+ # TODO: 1. think about includes/zhtable/ support
+ # 2. generate docs (?): echo '0' | php mwdocgen.php
+}
+
+src_install() {
+ webapp_src_preinst
+
+ # First we install math, docs and then copy everything left into htdocs dir
+ # to avoid bugs like #236411.
+
+ # If we've enabled math USE-flag, install math support.
+ # We ensure the directories are prepared for writing. The post-
+ # install instructions guide the user to enable the feature.
+ if use math; then
+ einfo "Installing math support"
+ exeinto "${MY_HTDOCSDIR}"/math
+ doexe math/texvc || die "Failed to create math support executable."
+
+ docinto math
+ dodoc math/{README,TODO}
+ docinto ""
+
+ # Working directories. Server writeable.
+ dodir "${MY_HTDOCSDIR}"/images/math
+ webapp_serverowned "${MY_HTDOCSDIR}"/images/math
+ dodir "${MY_HTDOCSDIR}"/images/tmp
+ webapp_serverowned "${MY_HTDOCSDIR}"/images/tmp
+ fi
+
+ local DOCS="FAQ HISTORY INSTALL README RELEASE-NOTES UPGRADE"
+ dodoc ${DOCS} docs/*.txt
+ docinto php-memcached
+ dodoc docs/php-memcached/*
+
+ # Clean everything not used at the site...
+ rm -rf ${DOCS} COPYING tests math t docs
+ find . -name Makefile -delete
+ # and install
+ insinto "${MY_HTDOCSDIR}"
+ doins -r .
+
+ # If imagemagick is enabled then setup for image upload.
+ # We ensure the directory is prepared for writing.
+ if use imagemagick; then
+ webapp_serverowned "${MY_HTDOCSDIR}"/images
+ fi
+
+ webapp_postinst_txt en "${FILESDIR}/postinstall-1.13-en.txt"
+ webapp_postupgrade_txt en "${FILESDIR}/postupgrade-1.16-en.txt"
+ webapp_src_install
+}
+
+pkg_preinst() {
+ prev_instal="false"
+ if has_version ${CATEGORY}/${PN}; then
+ prev_instal="true"
+ fi
+}
+
+pkg_postinst() {
+ webapp_pkg_postinst
+ if ${prev_instal}; then
+ einfo
+ elog "=== Consult the release notes ==="
+ elog "Before doing anything, stop and consult the release notes"
+ elog "/usr/share/doc/${PF}/RELEASE-NOTES.bz2"
+ elog
+ elog "These detail bug fixes, new features and functionality, and any"
+ elog "particular points that may need to be noted during the upgrade procedure."
+ einfo
+ ewarn "Back up existing files and the database before upgrade."
+ ewarn "http://www.mediawiki.org/wiki/Manual:Backing_up_a_wiki"
+ ewarn "provides an overview of the backup process."
+ einfo
+ fi
+}