# Unmask the flag which corresponds to ARCH.
-ia64

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

# Julian Ospald <hasufell@gentoo.org> (20 Sep 2015)
# no LibreSSL support yet
curl_ssl_libressl
libressl

# 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
webm
fdk
valgrind
matplotlib
mongodb
pgm
scim

# 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
librtmp
rtmp
vpx
frei0r
lpsol
libev
prelude
ladspa
aacplus
devil
gts
clang
redis

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

# Other

# Raúl Porcel <armin76@gentoo.org> (20 Aug 2014)
# Upstream drops support on ia64 from 4.0 onwards, bug #430352
ocamlopt


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

# Matt Turner <mattst88@gmail.com> (06 May 2011)
# media-sound/mumble not keyworded on ppc
mumble

# 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

# James Le Cuirot <chewi@gentoo.org> (11 Jul 2015)
# We don't support java on ia64.
java
freetts
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_amdgpu
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

# Pacho Ramos <pacho@gentoo.org> (08 Jan 2014)
# Unmask systemd since it is keyworded here.
-systemd

# sys-libs/libseccomp has not been ported to this arch yet #524148
seccomp

# need to test sys-cluster/glusterfs #519618
glusterfs

# need to test ceph and friends #519618
rbd

# Ben de Groot <yngwin@gentoo.org> (01 Feb 2015)
# please remove when keyworded
qt5
