# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/base/use.mask,v 1.180 2013/09/28 09:23:23 pacho 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
ssse3
avx
avx128fma
avx256
svga
nvram

# ppc arch specific USE flags
altivec
pbbuttonsd
ppcsha1

# mips arch specific USE flags
n32
n64
fixed-point
loongson2f

# ppc64 arch specific USE flags
ibm
ps3

# sparc arch specific USE flags
vis
ultra1

# arm arch specific USE flags
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 flag should never be used on non prefix profiles
prefix

# 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

# 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
