# Unmask the flag which corresponds to ARCH.
-ia64

# This is a list of USE flags that should not be used on ia64.

# No hardware to test by the team
3dfx
bluetooth
bluray
dvb
dvd
gnokii
gphoto2
gps
ios
ipod
ivtv
lirc
mythtv
nvtv
pcmcia
pda
pkcs11
scanner
sms
v4l
wifi

# Hardware not available on ia64
apm
battery
cpufreq
laptop
lm_sensors
pm-utils

# Stuff that doesn't work on ia64, or not tested
afs
blas
djbfft
emboss
jack
lapack
prolog
lqr
celt
capi
lensfun
kde
metalink
upnp
systemd
webm
fdk
valgrind

# Stuff we don't want
antlr
lasi
mpi
networkmanager
octave
timidity
semantic-desktop
tunepimp
captury
bittorrent-external
fits
ktts
libburn
topal
indi
flite
wicd
opencore-amr
nut
sctp
bs2b
tokyocabinet
schroedinger
ots
eclipse
vaapi
rtmp
vpx
frei0r
lpsol
libev
prelude
ladspa
aacplus
devil
gts
clang

# Stuff that doesn't compile on ia64
chicken
clisp
diet
emf
fusion
mono
mzscheme
pike
xemacs

# Other

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


# Samuli Suominen <ssuominen@gentoo.org> (02 Dec 2009)
# This will need media-sound/musepack-tools
musepack

# Raúl Porcel <armin76@gentoo.org> (20 Mar 2009)
# Current webkit segfaults
webkit

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

# see email to gentoo-dev with subject "use.mask and PHP5's crazy IUSE"
# Dated Sat, 31 Jul 2004 14:49:28 -0700, from robbat2@gentoo.org
# all of these are binary-only, and not presently available on this
# architecture.
qdbm

# java releated use flags
# need to get dev-java/ant marked stable stable
# before unmasking (16 Oct 2006 nichoj)
java
java6
java-internal
java-external
freetts
# need to keyword openjms-bin, sun-jms
jms
# need to keyword sun-jmx
jmx
# need to keyword sun-javamail-bin, sun-javamail
javamail
# depends on ibm-jdk-bin which isn't available for ia64
mpe-sdk
# needs java
pdfannotextractor

# Aggelos Orfanakos <agorf@gentoo.org> (18 Jan 2008)
# depends on www-server/mongrel which isn't available for ia64
mongrel

# beagle depends on dev-dotnet/gnome-sharp.. masked for testing (19 Aug 2006 kloeri)
beagle


# 2006/02/05 - Donnie Berkholz <dberkholz@gentoo.org>
# Modular X: mask for architectures on which they aren't available
video_cards_ast
video_cards_nsc
video_cards_newport
video_cards_siliconmotion
video_cards_sis

# Matt Turner <mattst88@gentoo.org> (02 Jan 2013)
# Not available on ia64. See bugs 449816, 448606.
video_cards_intel

# 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

# Diego Pettenò <flameeyes@gentoo.org> (6 Dec 2006)
# Mask ALSA drivers for ISA cards
alsa_cards_cs4232
alsa_cards_msnd-pinnacle
alsa_cards_cs4231-lib
alsa_cards_adlib
alsa_cards_ad1816a
alsa_cards_ad1848
alsa_cards_als100
alsa_cards_azt2320
alsa_cards_cmi8330
alsa_cards_cs4231
alsa_cards_cs4236
alsa_cards_dt019x
alsa_cards_es968
alsa_cards_es1688
alsa_cards_es18xx
alsa_cards_gusclassic
alsa_cards_gusextreme
alsa_cards_gusmax
alsa_cards_interwave
alsa_cards_interwave-stb
alsa_cards_opl3sa2
alsa_cards_opti92x-ad1848
alsa_cards_opti92x-cs4231
alsa_cards_opti93x
alsa_cards_miro
alsa_cards_sb8
alsa_cards_sb16
alsa_cards_sbawe
alsa_cards_sb16_csp
alsa_cards_sgalaxy
alsa_cards_sscape
alsa_cards_wavefront

# 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

# Diego Elio Pettenò <flameeyes@gentoo.org> (21 Aug 2012)
# IPMI is only implemented for x86, amd64 and ia64
-ipmi

# Michael Sterrett <mr_bones_@gentoo.org) (24 Aug 2012)
# media-sound/fluidsynth isn't keyworded
fluidsynth

# Alexandre Rostovtsev <tetromino@gentoo.org> (31 Dec 2012)
# net-misc/connman is not keyworded, bug 348308
connman

# 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

# toolkit for nvidia binary drivers
cg

# 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 s not keyworded, bug #320221
llvm
