# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/arch/powerpc/ppc64/package.use.mask,v 1.56 2013/11/12 22:09:03 mr_bones_ Exp $

# Michael Sterrett <mr_bones_@gentoo.org (12 Nov 2013)
# Mask openmedia use flag because the content generation tools
# are missing keywords.
games-simulation/openttd openmedia

# Patrick Lauer <patrick@gentoo.org> (27 May 2013)
# Mask useflags for stable things depending on systemd
# as systemd is still ~ppc64
media-sound/pulseaudio systemd
sys-auth/polkit systemd
sys-fs/udisks systemd
sys-power/upower systemd
x11-misc/colord systemd

# Michael Palimaka <kensington@gentoo.org> (02 Apr 2013)
# Requires dev-lang/mono which currently has some issues
# on ppc64.
kde-base/kdebindings-meta csharp
net-libs/libkolabxml csharp

# Sergey Popov <pinkbyte@gentoo.org> (18 Feb 2013)
# sys-cluster/ploop can not be build on ppc64, bug #447644
# Masking USE-dep on it
sys-cluster/vzctl ploop

# Alexandre Rostovtsev <tetromino@gentoo.org> (31 Dec 2012)
# requires app-office/unoconv, which requires virtual/ooo, which is not
# keyworded here. Remove mask if this situation changes.
gnome-extra/sushi office

# Michael Weber <xmw@gentoo.org> (14 Jun 2012)
# Mask net-misc/networkmanager[wimax] till bug 386121 is resolved
net-misc/networkmanager wimax

# Kacper Kowalik <xarthisius@gentoo.org> (09 Mar 2012)
# Mask media-video/ffmpeg[vpx] and media-video/mplayer[vpx] 
# on ppc64 as there is no stable version yet
media-video/ffmpeg vpx
media-video/mplayer vpx

# Kacper Kowalik <xarthisius@gentoo.org> (02 Sep 2011)
# Mask www-client/seamonkey[ipc] on ppc64 wrt #381191
www-client/seamonkey ipc

# Sergei Trofimovich <slyfox@gentoo.org> (03 Aug 2011)
# sys-devel/llvm has no ppc64 keywords yet (bug #320221)
dev-lang/ghc llvm

# Kacper Kowalik <xarthisius@gentoo.org> (22 Mar 2011)
# Mask polkit[kde] wrt #354509
sys-auth/polkit kde

# Alexey Shvetsov <alexxy@gentoo.org> (26 Jan 2011)
# Mask gps for marble
kde-base/marble	gps

# Pacho Ramos <pacho@gentoo.org> (08 Jul 2010)
# Needs app-mobilephone/obex-data-server keyworded, bug 305913
gnome-base/gvfs bluetooth

# Samuli Suominen <ssuominen@gentoo.org> (21 Jun 2010)
# These need stable kdelibs-4.
app-i18n/uim kde
app-arch/p7zip kde
dev-vcs/subversion kde
media-video/vlc kde
net-libs/libproxy kde

# Tomáš Chvátal <scarabeus@gentoo.org> (06 June 2010)
# requires more keywording per bug #323003
kde-base/kde-meta sdk

# Kacper Kowalik <xarthisius@gentoo.org> (30 May 2010)
# quesoglc is not keyworded
x11-misc/rss-glx quesoglc

# uses games-board/ggz-gtk-client
games-strategy/freeciv ggz

# Mark Loeser <halcy0n@gentoo.org> (02 Mar 2010)
# Mask webkit useflag since dev-python/mako and dev-python/pywebkitgtk are not
# keyworded
media-sound/rhythmbox webkit

# Ben de Groot <yngwin@gentoo.org> (15 Jul 2009)
# Mask dillo useflag as current version is unkeyworded (bug 253083)
mail-client/claws-mail dillo

# Brent Baude <ranger@gentoo.org> (05 May 2009)
# Masking webkit from  libproxy due to TOC failure on webkit
# and stupid 64bit toolchain.
net-libs/libproxy webkit

# Brent Baude <ranger@gentoo.org> (11 June 2008)
# Masking webkit from gimp do to lame ppc64 toolchain and TOC
>=media-gfx/gimp-2.6.4 webkit

# Brent Baude <ranger@gentoo.org> (11 June 2008)
# Masking out passwdqc from pambase since passwdqc
sys-auth/pambase passwdqc

# Joseph Jezak <josejx@gentoo.org> (12 February 2010)
# Mask unstable pidgin deps until we can mark them stable (farsight2)
net-im/pidgin gstreamer
