# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/arch/sparc/package.use.mask,v 1.150 2013/10/26 09:10:58 gienah Exp $

# Mark Wright <gienah@gentoo.org> (26 Oct 2013)
# template-haskell not yet available
dev-haskell/dataenc test

# Tom Wijsman <TomWij@gentoo.org> (16 Oct 2013)
# Mask luajit on ~media-video/mpv-0.2.0 because it only has amd64 x86 keywords. See bug #488318.
>=media-video/mpv-0.2.0 luajit

# Chí-Thanh Christopher Nguyễn <chithanh@gentoo.org> (22 Aug 2013)
# dev-libs/jemalloc is not keyworded
www-plugins/gnash jemalloc

# Pacho Ramos <pacho@gentoo.org> (20 Jul 2013)
# Keywords pending, bug #476710
>=gnome-base/gnome-extra-apps-3.8 games

# Michael Weber <xmw@gentoo.org> (08 Jul 2013)
# missing keywords on dev-python/pydns
net-dns/rbldnsd test

# Patrick Lauer <patrick@gentoo.org> (17 June 2013)
# Fix per-arch mask of phonon[zeitgeist] #460140
media-libs/phonon zeitgeist

# Chí-Thanh Christopher Nguyễn <chithanh@gentoo.org> (28 May 2013)
# depends on sys-devel/llvm[video_cards_radeon]
media-libs/mesa r600-llvm-compiler

# Patrick Lauer <patrick@gentoo.org> (27 May 2013)
# stable keywords missing on tagpy/coherence
media-video/totem upnp-av
media-sound/rhythmbox upnp-av

# Julian Ospald <hasufell@gentoo.org> (31 Mar 2013)
# depends on mono
>=net-irc/hexchat-2.9.4-r1 theme-manager

# Alexandre Rostovtsev <tetromino@gentoo.org> (31 Jan 2013)
# remove mask when net-libs/libqmi is keyworded here
net-misc/modemmanager qmi qmi-newest

# Alexandre Rostovtsev <tetromino@gentoo.org> (22 Jan 2013)
# remove mask if/when media-gfx/argyllcms is keywored here.
x11-misc/colord extra-print-profiles

# Alexandre Rostovtsev <tetromino@gentoo.org> (31 Dec 2012)
# requires firefox, which is not keyworded on sparc
app-misc/tracker firefox-bookmarks

# 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

# Raúl Porcel <armin76@gentoo.org> (30 Dec 2012)
# Needs testing
media-libs/phonon gstreamer vlc

# Alexandre Rostovtsev <tetromino@gentoo.org> (27 Dec 2012)
# remove mask when dev-java/fop is keyworded here
gnome-extra/libgda reports

# Robin H Johnson <robbat2@gentoo.org> (01 Nov 2012)
# MySQL 5.5 wants systemtap, tcmalloc & jemalloc
>=dev-db/mysql-5.5 systemtap tcmalloc jemalloc
>=dev-db/mariadb-5.5 systemtap tcmalloc jemalloc

# Diego Elio Pettenò <flameeyes@gentoo.org> (24 Jun 2012)
# Requires libpcre with jit
www-apache/mod_security jit

# Ben de Groot <yngwin@gentoo.org> (14 Jun 2012)
# Since dev-qt/qt* will no longer be available for sparc, we need
# to mask the reverse dependencies
dev-cpp/eigen examples
dev-tex/latex-beamer lyx
media-sound/pulseaudio equalizer
media-video/vlc skins

# Raúl Porcel <armin76@gentoo.org> (28 May 2012)
# Needs x11-misc/lightdm(which also requires some other deps)
x11-misc/xscreensaver new-login

# Alexandre Rostovtsev <tetromino@gentoo.org> (25 May 2012)
# Remove mask entry when app-misc/geoclue and app-accessibility/at-spi2-core
# are keyworded here, bug #411761
net-libs/webkit-gtk webkit2

# Samuli Suominen <ssuominen@gentoo.org> (15 May 2012)
# UDisks2 untested wrt http://bugs.gentoo.org/412801
gnome-base/gvfs udisks

# Pacho Ramos <pacho@gentoo.org> (07 May 2012)
# libhid is not keyworded
app-misc/lcdproc hid

# Alexandre Rostovtsev <tetromino@gentoo.org> (12 Apr 2012)
# Temporary mask-in-base, unmask-in-arch for dev-python/mako keywording for
# gobject-introspection[doctool], bug #411761
dev-libs/gobject-introspection -doctool

# Alexandre Rostovtsev <tetromino@gentoo.org> (12 Apr 2012)
# Requires gnutls[pkcs11], which is use.masked on sparc
net-libs/glib-networking smartcard

# Alexey Shvetsov <alexxy@gentoo.org> (17 Dec 2011)
# Mask use numa for openmpi
sys-cluster/openmpi openmpi_fabrics_psm openmpi_fabrics_knem openmpi_fabrics_open-mx openmpi_fabrics_ofed openmpi_fabrics_dapl openmpi_rm_slurm openmpi_ofed_features_rdmacm

# Raúl Porcel <armin76@gentoo.org> (05 Nov 2011)
# jit not supported on sparc
dev-libs/libpcre jit

# Alexandre Rostovtsev <tetromino@gentoo.org> (03 Nov 2011)
# Missing keywords in gst-plugins-faac, bug #389433
gnome-extra/gnome-media aac

# Raúl Porcel <armin76@gentoo.org> (08 Oct 2011)
# Needs media-sound/lilypond
app-text/asciidoc test

# Patrick McLean <chutzpah@gentoo.org> (07 Sep 2011)
# missing keywords on dependencies
media-video/x264-encoder ffmpegsource

# Robin H. Johnson <robbat2@gentoo.org> (03 Sep 2011)
# Remove this for your arch after you keyword dev-utils/google-perftools (bug #381737
dev-libs/libmemcached tcmalloc

# Alexey Shvetsov <alexxy@gentoo.org> (31 Aug 2011)
# Mask numa use flag per bug #381313
sys-apps/hwloc numa

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

# Patrick Lauer <patrick@gentoo.org> (03 Aug 2011)
# Missing jre on sparc
net-analyzer/metasploit gui

# Pacho Ramos <pacho@gentoo.org> (19 Jul 2011)
# Missing keywords on dependencies
app-cdr/brasero vcd

# Pacho Ramos <pacho@gentoo.org> (27 Jan 2011)
# missing keywords on needed plugins
media-plugins/gst-plugins-meta dts dv libvisual vcd wavpack

# Michael Weber <xmw@gentoo.org> (03 Jan 2011)
# dev-libs/libev is not keyworded
www-servers/lighttpd libev

# Raúl Porcel <armin76@gentoo.org> (5 Dec 2010)
# Mask doc-pdf because of Java dependencies (bug #347259)
net-analyzer/wireshark doc-pdf

# Justin Lecher <jlec@gentoo.org> (13 Aug 2010)
# MKL not available on this arch
media-gfx/povray mkl

# Steve Arnold <nerdboy@gentoo.org> (12 Jun 2010)
# masking for gdal (see bug 315659)
sci-libs/gdal ecwj2k

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

# Alexey Shvetsov <alexxy@gentoo.org> (09 Feb 2010)
# need dev-db/virtuoso-* keyworded
dev-libs/soprano virtuoso

# Alexey Shvetsov <alexxy@gentoo.org> (09 Feb 2010)
# need sys-auth/polkit keyworded
app-admin/system-config-printer-common  policykit

# Ben de Groot <yngwin@gentoo.org> (16 Jan 2010)
# qtmultimedia is not keyworded, bug 293671
dev-python/PyQt4 multimedia

# Ben de Groot <yngwin@gentoo.org> (11 Nov 2009)
# Requires qthelp, which requires qtwebkit, bug 292838
dev-libs/uriparser doc
media-libs/libxspf doc

# Romain Perier <mrpouet@gentoo.org> (18 Oct. 2009)
# >=networkmanager-0.7.0 is not keyworded.
gnome-base/gnome-applets networkmanager

# Raúl Porcel <armin76@gentoo.org>
# Depends on dev-java/fop which requires java...
sci-geosciences/gpsbabel doc

# depends on mpich2 which isn't keyworded (bug #217854)
sci-libs/hdf5 mpi

# wavgain fails to build
media-sound/rubyripper wav

# Needs libmodplug
media-libs/sdl-sound mikmod

# Needs clisp which won't build
app-text/texlive xindy

# Needs krb4 USE flag for mit-krb5 (Bug #255579), and we believe it to be unstable.
net-im/pidgin zephyr

# Mask zemberek for enchant because it requires java.
app-text/enchant zemberek

# Mask srtp for ortp because libsrtp is marked -sparc
net-libs/ortp srtp

# Ultrabug <ultrabug@gentoo.org) (05 Sept 2011)
# missing keyword for net-libs/zeromq
app-admin/rsyslog zeromq
