# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/arch/x86-fbsd/package.use.mask,v 1.34 2013/08/27 22:11:58 aballier Exp $

# Justin Lecher <jlec@gentoo.org> (18 Mar 2010)
# Unkeyworded deps
net-im/gajim kde

# Alexandre Rostovtsev <tetromono@gentoo.org> (09 Jan 2012)
# jsc JIT compilation is supported only on amd64/arm/x86 and their prefixes, so
# it's masked in base profile and unmasked here (bug #396313).
net-libs/webkit-gtk -jit
www-client/epiphany -jit

# Pacho Ramos <pacho@gentoo> (18 Mar 2011)
# Missing keywords on deps (GNOME related packages)
dev-libs/totem-pl-parser quvi
media-plugins/gst-plugins-meta dv dvd musepack vcd vpx wavpack

# Justin Lecher <jlec@gentoo.org> (19 Sep 2010)
# kde-base/konqueror not keyworded
app-arch/p7zip kde

# Justin Lecher <jlec@gentoo.org> (12 Sep 2010)
# net-libs/farsight2 not keyworded
net-im/gajim jingle

# Justin Lecher <jlec@gentoo.org> (13 Aug 2010)
# MKL not available on this arch
media-gfx/povray mkl

# Romain Perier <mrpouet@gentoo.org> (18 Oct. 2009)
# >=networkmanager-0.7.0 is not keyworded.
gnome-base/gnome-applets networkmanager

# Java currently uses generation 1
dev-libs/cyrus-sasl java

# nvidia-driver uses acpid
x11-drivers/nvidia-drivers acpi

# Gilles Dartiguelongue <eva@gentoo.org> (19 Oct 2007)
# afs not keyworded
>=gnome-base/gdm-2.20 afs

# gavl and opencv do not build
media-plugins/frei0r-plugins scale0tilt facedetect

# needs to rework xanim's ebuild to make it bsd-friendly
media-video/mplayer xanim

# Dependencies not keyworded, bug #424571
net-nds/openldap smbkrb5passwd
