# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/base/use.mask,v 1.81 2009/09/10 12:03:43 scarabeus Exp $

# 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
ssse3
svga
win32codecs
real
nvram

# ppc arch specific USE flags
altivec
pbbuttonsd
ppcsha1

# mips arch specific USE flags
n32
n64
fixed-point

# ppc64 arch specific USE flags
ibm

# sparc arch specific USE flags
vis
ultra1

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

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

# 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_vermilion
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 system
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-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_IRIX
elibc_mintlib
elibc_NetBSD
elibc_OpenBSD
elibc_SunOS
elibc_uclibc

kernel_AIX
kernel_Darwin
kernel_FreeBSD
kernel_freemint
kernel_HPUX
kernel_Interix
kernel_IRIX
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)
clvm
gulm
cman

# 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

# Alexey Shvetsov <alexxy@gentoo.org>
# Mask kdeprefix since its broken by now
kdeprefix

# Diego E. Pettenò <flameeyes@gentoo.org> (6 Jul 2009)
#  on behalf of QA Team
# Removal of cman is scheduled for 2009-10-06
cman

# Markus Duft <mduft@gentoo.org> (7 Jul 2009)
# This use flag only applies to _one_ version of interix (all
# versions share the same keyword, that's why i need a USE flag).
# Since this is meaningless for all others, it's globally masked.
i6fork

# Samuli Suominen <ssuominen@gentoo.org> (01 Aug 2009)
# RealMagic Hollywood+/Creative DXR3 support
dxr3
