# Unmask the flag which corresponds to ARCH.
-arm

# Unmask arm arch specific flags
-iwmmxt

# doomsday ebuild is not available on this architecture
doomsday

# Markus Meier <maekke@gentoo.org> (22 Aug 2010)
# unmask synaptics input driver
-input_devices_synaptics

# Markus Meier <maekke@gentoo.org> (22 Aug 2010)
# net-wireless/wimax not tested
wimax

# Markus Meier <maekke@gentoo.org> (21 Aug 2010)
# app-antivirus/clamav not tested
clamav

# Kacper Kowalik <xarthisius@gentoo.org> (9 Aug 2010)
# cblas-external as virtual/cblas is also masked
cblas-external

# Samuli Suominen <ssuominen@gentoo.org> (17 Oct 2009)
# Required package: media-sound/musepack-tools
musepack

# Raúl Porcel <armin76@gentoo.org>
# I've been told xfs is broken on ARM
xfs

# Raúl Porcel <armin76@gentoo.org>
# Fails to build/work
openexr

# Samuli Suominen <drac@gentoo.org>
# media-libs/amrnb and media-libs/amrwb not tested.
amr

# Samuli Suominen <drac@gentoo.org>
# sci-visualization/grace not tested.
grace

# Samuli Suominen <drac@gentoo.org>
# media-gfx/gimp not tested.
gimp

# No hardware to test by the team
dvb
ios
ipod

# Stuff that doesn't make sense on this arch
3dfx
cpufreq
dell
laptop
dmi

# Stuff we don't want
chicken
clisp
fuse
R
octave
tracker
xindy
lyx
mpi
lasi
fusion
debug-utils
schroedinger
hardened
frei0r
libvirt
pdfannotextractor
prelude
mssql

# havent tested yet
cupsddk
gphoto2
mythtv
afs
mono
pike
lirc
lm_sensors
netjack
beagle
nvtv
mzscheme
xemacs
scanner
madwifi
libupnp
zvbi
dvd
fluidsynth
gnomecd
cblas
prolog
sid
mms
mtp
ieee1394
sctp
pm-utils
wicd
darcs
bs2b
toolame
ladspa
ggi
nut
xanim
dvd
fits
tokyocabinet
vaapi
rtmp
vpx
iplayer
plotutils
lpsol
upnp
quvi
bluray
libtar
zvbi
aacplus
devil
gts
anthy
ace
csharp

# Unmask ARM-only video-cards
-video_cards_exynos
-video_cards_freedreno
-video_cards_omap
-video_cards_omapfb

# 2006/02/05 - Donnie Berkholz <dberkholz@gentoo.org>
# Modular X: mask for architectures on which they aren't available
video_cards_apm
video_cards_ark
video_cards_ast
video_cards_ati
video_cards_cirrus
video_cards_chips
video_cards_cyrix
video_cards_glint
video_cards_i128
video_cards_i740
video_cards_intel
video_cards_mach64
video_cards_mga
video_cards_neomagic
video_cards_newport
video_cards_nouveau
video_cards_nsc
video_cards_nv
video_cards_r128
video_cards_radeon
video_cards_rendition
video_cards_s3
video_cards_s3virge
video_cards_savage
video_cards_siliconmotion
video_cards_sis
video_cards_tdfx
video_cards_tga
video_cards_trident
video_cards_tseng
video_cards_vesa
video_cards_via
video_cards_voodoo

# Matt Turner <mattst88@gentoo.org>
# Mask more VIDEO_CARDs added with mesa-8.0
video_cards_r100
video_cards_r200
video_cards_r300
video_cards_r600
video_cards_radeonsi
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

# Diego Pettenò <flameeyes@gentoo.org> (6 Dec 2006)
# Unmask the ARM-specific ALSA drivers
-alsa_cards_pxa2xx-i2sound
-alsa_cards_pxa2xx-soc
-alsa_cards_pxa2xx-soc-corgi
-alsa_cards_pxa2xx-soc-poodle
-alsa_cards_pxa2xx-soc-spitz
-alsa_cards_pxa2xx-soc-tosa
-alsa_cards_sa11xx-uda1341ts
-alsa_cards_armaaci
-alsa_cards_at91-soc
-alsa_cards_at91-soc-eti-b1-wm8731

# 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

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

# fdk-aac is already keyworded here
-fdk

# 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

# Michał Górny <mgorny@gentoo.org> (4 May 2013)
# Unmask systemd since it is keyworded here.
-systemd

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

# Chí-Thanh Christopher Nguyễn <chithanh@gentoo.org> (10 Nov 2013)
# sys-devel/llvm is keyworded
-llvm

