# Copyright 1999-2013 Gentoo Foundation.
# Distributed under the terms of the GNU General Public License, v2
# $Header: /var/cvsroot/gentoo-x86/profiles/arch/alpha/use.mask,v 1.88 2013/11/13 04:18:20 mattst88 Exp $

# Unmask the flag which corresponds to ARCH.
-alpha

# This file masks out USE flags that are simply NOT allowed in the default
# profile for any architecture.  This works, for example, if a non-default
# profile (such as the selinux profiles) have a USE flag associated with
# them.

# No hardware to test by the team
3dfx
apcupsd
bluetooth
bluray
chipcard
dvb
gnokii
gps
hbci
ios
ipod
ivtv
mtp
mythtv
nvtv
lirc
openct
pcmcia
pda
sms
upnp
ups
wifi

# Hardware not available on alpha
apm
battery
cpufreq
dell
dmi
laptop
pm-utils

# Stuff that doesn't work on alpha, or not tested
avi
clang
djbfft
emboss
freetts
gnustep
hardened
howl
mecab
mzscheme
netbeans
pike
timidity
valgrind
vaapi
rtmp
vpx
kde
quvi
metalink
tremor
fdk

# Stuff that doesn't compile on alpha
clisp
emf
mono
ocamlopt
webm

# Stuff we don't want
afs
schroedinger
ots
frei0r
libev
prelude
libtar
aacplus
devil
gts

# Other

# Raúl Porcel <armin76@gentoo.org> (23 Apr 2011)
# Needs to be tested
video_cards_nouveau

# Ben de Groot <yngwin@gentoo.org> (11 Feb 2009)
# Both dev-qt/qtphonon and media-sound/phonon are unkeyworded
phonon

# 14 May 2007 Raúl Porcel <armin76@gentoo.org>
# Alpha doesn't have wpa_supplicant keyworded, bug 175714
networkmanager


# alpha doesn't have java support
java
java-internal
java-external
pdfannotextractor

# Mask vpopmail until net-mail/vpopmail goes out of package.mask
vpopmail

# Mask pyste until gccxml / elementtree work on alpha
pyste

# RDEPEND on mono
beagle

# apache segfaults when using mpm-peruser (bug 105778)
mpm-peruser

# We don't have any virtual/mpi (bug 111807)
mpi

# masks required for asterisk
bri
pri
zaptel

# Modular X: mask non-alpha cards
video_cards_apm
video_cards_ark
video_cards_ast
video_cards_chips
video_cards_cyrix
video_cards_i128
video_cards_i740
video_cards_intel
video_cards_neomagic
video_cards_newport
video_cards_nsc
video_cards_siliconmotion
video_cards_sis
video_cards_trident
video_cards_tseng
video_cards_vesa

# Matt Turner <mattst88@gentoo.org>
# Mask more VIDEO_CARDs added with mesa-8.0
video_cards_i915
video_cards_i965
video_cards_ilo
# vmware wasn't added with mesa-8.0, but it should still be masked
video_cards_vmware
# llvm is not keyworded
video_cards_radeonsi

# dspam and dspam-web use this one
# We've never supported cyrus-imapd because nobody asked for
cyrus

# disable until tested
# # bug 148402
pcsc-lite

# conky dependencies missing keywords related (dragonheart -20061112)
# media-sound/mpd
mpd

# USE=d seems to break gcc-4.1.2 (#178896)
d

# USE=audit masked prior to testing on alpha, arm, hppa, ppc64, s390, sh.
# Bug #184563, 18 Sep 2007
# Robin H. Johnson <robbat2@gentoo.org>
audit

# This works
-x264

# uses gnat/ada which is too big to support currently
topal

# Matt Turner <mattst88@gentoo.org> (13 Dec 2010)
# We don't have sys-devel/llvm
llvm

# Matt Turner <mattst88@gentoo.org) (10 Feb 2012)
# mask d3d since we don't have wine
d3d

# Matt Turner <mattst88@gentoo.org) (10 Feb 2012)
# mask wayland since dev-libs/wayland isn't keyworded
wayland

# Matt Turner <mattst88@gentoo.org (27 May 2012)
# net-misc/connman is not keyworded
connman

# Matt Turner <mattst88@gentoo.org (27 May 2012)
# sys-apps/entropy is not keyworded
entropy

# Matt Turner <mattst88@gentoo.org (29 May 2012)
# net-libs/libsocialweb is not keyworded
socialweb

# Alexandre Rostovtsev <tetromino@gentoo.org> (31 Dec 2012)
# media-libs/xine-lib is not keyworded
xine

# Samuli Suominen <ssuominen@gentoo.org> (18 Jan 2013)
# libdlm and cman are not keyworded
cman
clvm

-zeitgeist
template_haskell

# nvidia cg toolkit for binary drivers
cg

# Chí-Thanh Christopher Nguyễn <chithanh@gentoo.org> (22 Aug 2013)
# virtual/opencl is not keyworded
opencl

# Unmask once sys-libs/libunwind gets ported & keyworded.
unwind
