# PPC Specific use flags
#
#Klibc does not work
klibc

# These flags should only be used for ppc
-ppcsha1
-pbbuttonsd
# Unmask the Altivec instruction set
-altivec

# Incompatible Use Flags
#
# These use-flags are x86/amd64 only, please feel free to make a bug report if
# this is in error!
#
3dfx
acpi
avi
lm_sensors
rar
hdf
fmod
i8x0
xvmc
# cg is only provided by nvidia's binary only cg toolkit
cg
# dmi depends on PC BIOSes, we don't have those
dmi
# Appears to be x86 only, feel free to remove if you disagree
nvtv
#2006/10/11 - corsair - bug #150925
graphlcd
lcd_devices_graphlcd
# Masked vaapi for PowerPC until it works on hardware available to PowerPC users (cell, etc.)
vaapi
# Doug Goldstein <cardoe@gentoo.org> (27 Apr 2007)
# Dell does not ship or sell PPC systems
dell
# User Mode Linux isn't supported on ppc yet
uml


### Other flags -- Please put additional maskings below here

# No keyworded versions of openafs
afs

# Masking mbrola for bug #84322, if a new version is released, remove this
mbrola

# Keep and eye on firebird and interbase as pair
interbase

# cardoe@gentoo.org
# masking ivtv since I got the original support for it
# but it was never stabled and it appears to have been
# broken in later releases by an endian issue. I no longer
# have the hardware to test
ivtv

# Modular X: unmask for architectures on which they are available
-input_devices_synaptics
-input_devices_wacom

# Diego Pettenò <flameeyes@gentoo.org> (6 Dec 2006)
# Unmask the 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 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

# George Shapovalov <george@gentoo.org> (8 Apr 2007)
# supported on ppc
-ada

# Joseph Jezak <josejx@gentoo.org> (28 Jun 2007)
# Masked Parallel LCD devices for bug #180683
# app-misc/lcd4linux
lcd_devices_lph7508
lcd_devices_m50530
lcd_devices_noritake
lcd_devices_routerboard
# app-misc/lcdproc
lcd_devices_sed1330
lcd_devices_sed1520
lcd_devices_stv5730
# Both
lcd_devices_t6963

# Fixes bug #86787
fusion

# 2006/08/18 - Donnie Berkholz <dberkholz@gentoo.org>
# Modular X: mask for architectures on which they aren't available
video_cards_apm
video_cards_ark
video_cards_ast
video_cards_cyrix
video_cards_i128
video_cards_i740
video_cards_intel
video_cards_neomagic
video_cards_nsc
video_cards_rendition
video_cards_siliconmotion
video_cards_sis
video_cards_tga
video_cards_tseng
video_cards_vesa

# 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

# Doug Goldstein <cardoe@gentoo.org> (3 Apr 2008)
# nvidia-drivers specific feature which don't exist for ppc
opengl-xvmc

# Intel Integrated Primitive (sci-libs/ipp) support
ipp

# dev-lang/orc doesn't play nice
schroedinger

# This will need >=media-libs/libgpod-0.8.0 keyworded and stabilized on both ppc/ppc64, bugs 313691 and 325839
ipod
ios

# Christian Faulhammer <fauli@gentoo.org> (01 Nov 2010)
# app-misc/lirc fails to compile on PPC64, see bug 275872 for example
# Samuli Suominen <ssuominen@gentoo.org> (03 Nov 2010)
# and it's also masked in arch/powerpc/ppc64/32ul/package.mask
lirc

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

# Kacper Kowalik <xarthisius@gentoo.org> (26 Jul 2011)
# ppc keywords were dropped for dev-libs/prelude
prelude

# 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

# Julian Ospald <hasufell@gentoo.org> (25 Apr 2012)
# Masked because nvidia-texture-tools is not (tested) for PowerPC
nvtt

# fdk-aac is already keyworded here
-fdk

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

# for gnome 3.6 keywording
-zeitgeist

# Chí-Thanh Christopher Nguyễn <chithanh@gentoo.org> (22 Aug 2013)
# virtual/opencl is not keyworded
opencl
