diff options
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 Binary files differnew file mode 100644 index 0000000..27265e0 --- /dev/null +++ b/mail-client/thunderbird/files/icon/thunderbird-icon-unbranded.png diff --git a/mail-client/thunderbird/files/icon/thunderbird-icon.png b/mail-client/thunderbird/files/icon/thunderbird-icon.png Binary files differnew file mode 100644 index 0000000..90ff395 --- /dev/null +++ b/mail-client/thunderbird/files/icon/thunderbird-icon.png 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 +} |