# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/base/use.mask,v 1.184 2014/01/16 00:12:06 redlizard Exp $

# masking here and unmasking in default/linux/
kmod

# not ready for primetime
packagekit

# masking here, and unmasking in arch/x86/use.mask
vidix

# Mask as long its not available everywhere
zeitgeist

# vdpau is currently only available with binary nvidia-drivers, thus amd64/x86*
vdpau

# Infiniband stuff should generaly work on all arches but keyworded only on amd64/x86
infiniband

# These ABIs are in constant change and currently only available for SVN snapshots
php_targets_php5-2
#php_targets_php5-4

# Its deps are not mature enough yet
ayatana

# Only available on x86
fdftk

# These need libieee1284 which is amd64/x86 only.
sane_backends_canon_pp
sane_backends_hpsj5s
sane_backends_mustek_pp
sane_backends_qcam

# Gluon still don't have release.
gluon

# profile specific USE flags
# Don't put hardened in here.
selinux
uclibc
multilib

# amd64/x86 arch specific USE flags
kqemu
3dnow
3dnowext
lilo
mmx
mmxext
sse
sse2
sse3
sse4
sse4a
sse4_1
sse4_2
ssse3
avx
avx128fma
avx256
fma4
svga
nvram

# ppc arch specific USE flags
altivec
pbbuttonsd
ppcsha1

# mips arch specific USE flags
n32
n64
fixed-point
loongson2f
mips32r2
mipsdspr1
mipsdspr2
mipsfpu

# ppc64 arch specific USE flags
ibm
ps3

# sparc arch specific USE flags
vis
ultra1

# arm arch specific USE flags
armvfp
armv5te
armv6
armv6t2
iwmmxt
neon

# nVidia XvMC requires nvidia-drivers/nvidia-legacy-drivers
nvidia

# dev-db/oracle-instantclient-basic is only available on x86
oci8-instant-client
oracle

# net-libs/osptoolkit is only available on x86 (used by asterisk, bug 115798)
osp

# yellownet is only avaible as a binary blob (bug 149970)
yellownet

# not keyworded on non-x86 systems
video_cards_geode
video_cards_xgi
video_cards_voodoo

# not needed on non-sparc systems
video_cards_sunbw2
video_cards_suncg14
video_cards_suncg3
video_cards_suncg6
video_cards_sunffb
video_cards_sunleo
video_cards_suntcx

# not needed on non-mips systems
video_cards_newport
video_cards_impact

# not needed on non-x86, non-amd64 systems
input_devices_virtualbox
input_devices_vmmouse
video_cards_nvidia
video_cards_fglrx
video_cards_via
video_cards_vmware
video_cards_virtualbox

# not needed on non-arm systems
video_cards_exynos
video_cards_freedreno
video_cards_omap
video_cards_omapfb

# linux-only drivers
video_cards_qxl

# not needed on non-x86, non-amd64, non-ppc systems
input_devices_synaptics
input_devices_wacom

# psyco only works on x86
psyco

# Mask ELIBC, KERNEL, and USERLAND flags that apply to specific profiles.
userland_BSD

elibc_AIX
elibc_Darwin
elibc_DragonFly
elibc_FreeBSD
elibc_HPUX
elibc_Interix
elibc_mintlib
elibc_musl
elibc_NetBSD
elibc_OpenBSD
elibc_SunOS
elibc_uclibc

kernel_AIX
kernel_Darwin
kernel_FreeBSD
kernel_freemint
kernel_HPUX
kernel_Interix
kernel_NetBSD
kernel_OpenBSD
kernel_SunOS

# Diego Pettenò <flameeyes@gentoo.org> (6 Dec 2006)
# Mask specific Apple drivers
alsa_cards_aoa
alsa_cards_aoa-fabric-layout
alsa_cards_aoa-onyx
alsa_cards_aoa-soundbus
alsa_cards_aoa-soundbus-i2s
alsa_cards_aoa-tas
alsa_cards_aoa-toonie
alsa_cards_powermac
# Mask specific Sun drivers
alsa_cards_sun-amd7930
alsa_cards_sun-cs4231
alsa_cards_sun-dbri
# Mask specific ARM 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
# Mask specific HPPA drivers
alsa_cards_harmony
# Mask specific MIPS drivers
alsa_cards_au1x00

# Diego Pettenò <flameeyes@gentoo.org> (29 Dec 2006)
# Adobe FDF toolkit is x86 only.
fdftk

# Diego Pettenò <flameeyes@gentoo.org> (30 Dec 2006)
# These are specific of Mac OS X
aqua
coreaudio

# Diego Pettenò <flameeyes@gentoo.org> (4 Jan 2007)
# Mask the flags for PHP that are available only on x86
sybase-ct
ingres
birdstep
adabas
filepro
pfpro
informix
empress
empress-bcs
sybase
frontbase
dbmaker
esoob
solid
# Shared with amd64
oci8
oracle7
firebird
db2

# Robert Buchholz <rbu@gentoo.org> (03 Jun 2007)
# Only works on x86 or amd64
lcd_devices_svga
lcd_devices_luise

# Joseph Jezak <josejx@gentoo.org> (11 Mar 2007)
# Only for x86 and amd64 (in pbbuttonsd)
macbook

# George Shapovalov <george@gentoo.org> (8 Apr 2007)
# Ada is supported only on x86, amd64 and ppc at present
ada

# lvm2 clustered use flags (moved from default-linux)
gulm

# tcc is x86 only
tcc

# Diego Pettenò <flameeyes@gentoo.org> (15 Nov 2007)
# pam_console was masked for removal for security issue.
# mask the flag too.
pam_console

# Jeremy Olexa <darkside@gentoo.org>
# The prefix USE flags should never be used on non prefix profiles
prefix
prefix-guest

# Diego E. Pettenò <flameeyes@gentoo.org> (6 Dec 2009)
#  on behalf of QA Team
# Removal of pvm is scheduled for Februrary 4.
pvm

# Alex Legler <a3li@gentoo.org> (7 Dec 2009)
# JRuby, REE18, and Rubinius are whitelisted on supported arches
ruby_targets_jruby
ruby_targets_ree18
ruby_targets_rbx

# Diego E. Pettenò <flameeyes@gentoo.org> (19 Oct 2010)
# masking flags that only apply to FreeBSD
kqueue

# Samuli Suominen <ssuominen@gentoo.org> (03 Oct 2011)
# RealMagic Hollywood+/Creative DXR3 support
# Still using obsolete V4L1 wrt bug 350211
# If fixed, should be unmasked in amd64/x86/ppc32 use.mask
dxr3

# Ralph Sennhauser <sera@gentoo.org> (31 Jul 2012)
# Unmask in arch specific profiles when jython implementaton is available.
python_targets_jython2_5
python_targets_jython2_7
python_targets_jython3_1
python_single_target_jython2_5
python_single_target_jython2_7
python_single_target_jython3_1

# Diego Elio Pettenò <flameeyes@gentoo.org> (18 Aug 2012)
# Prelude is being masked for removal
prelude

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

# Diego Elio Pettenò <flameeyes@gentoo.org> (27 Aug 2012)
# netlink is a Linux-specific interface
netlink

# Alexandre Rostovtsev <tetromino@gentoo.org> (09 Dec 2012)
# dev-lang/orc is useful only for some specific arches (amd64/x86/arm/...)
orc

# Mike Gilbert <floppym@gentoo.org> (02 Jan 2013)
# PyPy is unkeyworded on most arches. If you are running amd64 or x86,
# please switch to one of the testing 13.0 profiles to get it.
python_targets_pypy2_0
python_single_target_pypy2_0

# Michał Górny <mgorny@gentoo.org> (26 Jan 2013)
# Mask the multilib flags globally. Unmasked in specific arches.
abi_x86_32
abi_x86_64
abi_x86_x32
# Matt Turner <mattst88@gentoo.org> (29 Jul 2013)
abi_mips_o32
abi_mips_n32
abi_mips_n64
abi_ppc_32
abi_ppc_64
abi_s390_32
abi_s390_64

# Zac Medico <zmedico@gentoo.org> (21 Mar 2013)
# Python 3.4 pre-releases not available in main tree yet.
python_targets_python3_4

# Andrey Grozin <grozin@gentoo.org> (1 May 2013)
# gcl is masked, cmucl only available on x86, clozurecl on x86 and amd64
gcl
cmucl
clozurecl

# Michał Górny <mgorny@gentoo.org> (4 May 2013)
# Mask systemd flag globally, unmasked on arches on which systemd
# is keyworded.
systemd

# Michael Palimaka <kensington@gentoo.org> (1 May 2013)
# Mask until Qt 5 is in portage. (The flag is here already
# to permit the neccessary package preparation.)
qt5

# Pacho Ramos <pacho@gentoo.org> (28 Sep 2013)
# This USE flag is available after long dicussion in
# http://www.gossamer-threads.com/lists/gentoo/dev/276077
# to let some prople not able to run systemd to skip the dep (#480336).
# Enabling this you will get a fully unsupported Gnome setup that
# could suffer unexpected problem, don't expect support for it then.
openrc-force
