# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/arch/alpha/package.use.mask,v 1.141 2013/11/13 19:33:29 pacho Exp $

# Pacho Ramos <pacho@gentoo.org> (13 Nov 2013)
# Missing keywords, bug #478254
>=gnome-base/gnome-3.8 classic

# 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

# Pacho Ramos <pacho@gentoo.org> (01 Sep 2013)
# CONFIG_AUDITSYSCALL=y is not implemented, bug #438368
sys-apps/systemd pam
sys-auth/consolekit pam
sys-auth/pambase consolekit

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

# William Hubbs <williamh@gentoo.org> (22 Jun 2013)
# dev-python/cython is not keyworded for alpha
>=app-accessibility/brltty-4.5 python

# Patrick Lauer <patrick@gentoo.org> (17 Jun 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

# Dirkjan Ochtman <djc@gentoo.org> (3 May 2013)
# depends on net-libs/polarssl
>=net-misc/openvpn-2.3.1 polarssl

# Gilles Dartiguelongue <eva@gentoo.org> (1 Apr 2013)
# missing keyword on media-libs/tremor, bug #453200
media-libs/gst-plugins-base ivorbis

# 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 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

# Alexandre Rostovtsev <tetromino@gentoo.org> (15 Dec 2012)
# media-video/coherence not keyworded
=media-video/totem-2* upnp-av

# Luca Barbato <lu_zero@gentoo.org> (11 Nov 2012)
# Libav 9 can use fdk-aac
>=media-video/libav-9_beta2 fdk

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

# Raúl Porcel <armin76@gentoo.org> (25 Jun 2012)
# dev-qt/qtwebkit doesn't seem to work
dev-python/PyQt4 webkit
dev-qt/assistant webkit
dev-qt/designer webkit
dev-qt/qtdeclarative webkit
dev-qt/qthelp webkit
net-irc/kvirc webkit

# 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-accessibility/at-spi2-core
# is keyworded here, bug #411761
net-libs/webkit-gtk webkit2

# Samuli Suominen <ssuominen@gentoo.org> (20 May 2012)
# This is masked because of this entry:
# arch/alpha/package.mask:>=sys-fs/udev-167
# Soon as that mask entry is gone, this can be removed too.
sys-auth/consolekit acl

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

# 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

# Patrick McLean <chutzpah@gentoo.org> (08 Nov 2011)
# mask conntrack USE flag for dnsmasq as dep is not keyworded
net-dns/dnsmasq conntrack

# Tobias Klausmann <klausman@gentoo.org> (02 Nov 2011)
# libpcre jit is not supported on alpha
dev-libs/libpcre jit

# Pacho Ramos <pacho@gentoo.org> (24 Oct 2011)
# Missing keywords in needed packages, bug #388367
net-im/empathy map

# 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

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

# Pacho Ramos <pacho@gentoo.org> (30 Jun 2011)
# Needed plugins are not keyworded on this arch
media-plugins/gst-plugins-meta dts libvisual

# Pacho Ramos <pacho@gentoo.org> (02 Apr 2011)
# quvi support is needed to play youtube files now
media-video/totem flash youtube

# Diego Elio Pettenò <flameeyes@gentoo.org> (17 Dec 2010)
# needs sys-libs/libcap-ng that is masked right now
sys-apps/smartmontools caps

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

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

# Raúl Porcel <armin76@gentoo.org> (26 Jun 2010)
# custom-optimization doesn't work on alpha
mail-client/thunderbird custom-optimization
www-client/firefox custom-optimization
www-client/seamonkey custom-optimization

# 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

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

# Raúl Porcel <armin76@gentoo.org> (07 Jul 2008)
# Make clisp deps minimal
dev-lisp/clisp hyperspec pari svm

# Tobias Klausmann <klausman@gentoo.org> (15 Jun 2008)
# No hardware to test net-dialup/linux-atm on alpha, so mask atm use flag
# on those.
sys-apps/iproute2 atm
net-dialup/ppp atm

# Needs nut and qstat respectively, neither is keyworded on alpha.
net-analyzer/nagios-plugins ups nagios-game

# Matt Turner <mattst88@gentoo.org> (26 Dec 2010)
# No idea why. Bug 347827
www-client/elinks javascript
