# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License, v2
# $Header: /var/cvsroot/gentoo-x86/profiles/arch/sparc/use.mask,v 1.114 2013/11/10 15:48:14 chithanh Exp $

# Unmask the flag which corresponds to ARCH.
-sparc

# This file contains a list of useflags that cannot be used on sparc.

# 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)
# Not keyworded on sparc
xine

# Diego Elio Pettenò <flameeyes@gentoo.org> (17 Aug 2012)
# qstat is not available on sparc, as it is
nagios-game

# Samuli Suominen <ssuominen@gentoo.org> (07 May 2012)
# Missing keywording in www-client/firefox wrt #360427,
# as used by, for example, x11-themes/gtk-engines-qtcurve
firefox
mozilla
thunderbird

# Alexandre Rostovtsev <tetromino@gmail.com> (28 Oct 2011)
# x11-misc/colord and app-admin/packagekit-base not tested. Bug #387959.
colord
packagekit

# Raúl Porcel <armin76@gentoo.org>
# Stuff that sigbuses
libburn
# bug #266193
srtp
# bug #290154
tokyocabinet
# bug 235685
webkit
# bug 359963
webp

# Gustavo Zacarias <gustavoz@gentoo.org> 14 Feb 2007
# Mono needs gcc4 and it's not yet stable
beagle
galago
mono

# Gustavo Zacarias <gustavoz@gentoo.org>
# It doesn't even build
d
# Mask krb4, it's generally broken and really not secure see #116471
krb4
# LCDproc masks see bug #148072
lcd_devices_g15
lcd_devices_graphlcd
lcd_devices_ula200
# mzscheme seems somewhat b0rked and we want vim7
mzscheme
# Masking hardened, it isn't really supported, see bugs #144126 #78951
hardened
# AIO is b0rked for now....
aio
romio
# They're borked
dar32
dar64

# 2006/09/05 - Tupone Alfredo <tupone@gentoo.org>
# doomsday ebuild is not available on this architecture
doomsday

# Needs java
pdfannotextractor

# Stuff that won't ever work on sparc
3dfx
acpi
afs
amd
apm
battery
cpufreq
dell
dmi
ibm
hyperwave-api
jfs
libedit
nforce2
pm-utils
reiser4
reiserfs
voodoo3
xfs

# Need testing
musepack
pyste
topal
lqr
epos
wicd
indi
chm
ebook
celt
capi
lensfun
jingle
mod_wsgi
vaapi
rtmp
vpx
kde
wildmidi
barcode
xmms2
gme
aacplus
systemd
soundcloud
devil
gts
clang
metalink
tremor
fdk

# No hardware to test
ifp
chipcard
hbci
ivtv
laptop
lm_sensors
njb
pkcs11
openct
bluetooth
dmraid
ipod
ios
mtp
pda
apcupsd
bluray
ups
gps

# Stuff we don't want
schroedinger
ots
frei0r
libvirt
prelude

# Asterisk use flag masking
bri
florz
resperl
zaptel
ukcid


# USE-flags from differents origins
brltty
cle266
commercial
cpufreq
directfb
djbfft
dvb
freetts
glitz
i8x0
java
java-internal
java-external
lirc
mpm-peruser
mythtv
netbeans
networkmanager
nvtv
pbs
pcmcia
rar
trusted
uml
valgrind
wavelan
wifi
wlan
xvmc
zoran

# Other masks
clisp
hdf
hdf5
pike

# requires a JDK
mpe-sdk

# This should probably never be touched

# Unmask sparc-only video cards
-video_cards_sunbw2
-video_cards_suncg14
-video_cards_suncg3
-video_cards_suncg6
-video_cards_sunffb
-video_cards_sunleo
-video_cards_suntcx

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

# 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)
# Unmask the Sun-specific drivers
-alsa_cards_sun-cs4231
# 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_hdsp
alsa_cards_hdspm
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

# Enable H264 with x264
-x264

# Copied over from default-linux/sparc/sparc64
-gcc64
-vis

# Unmask ultra1
-ultra1

# The default on SPARC is non-multilib
# if a sub-profile want's it, it can -use.mask it
multilib

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

# 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

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

-zeitgeist

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

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