# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/targets/desktop/gnome/package.use,v 1.19 2013/06/06 05:34:50 tetromino Exp $

# Required for cheese in gnome3
>=media-libs/gst-plugins-base-1.0 theora

# Required for gnome-base/gnome-2.32 to be merged directly, for
# gnome-extra/hamster-applet-2.32 and x11-misc/alacarte-0.13
dev-lang/python sqlite
gnome-base/gnome-menus python

# REQUIRED_USE="?? ( pulseaudio gstreamer )", and we want pulse in gnome
net-misc/spice-gtk -gstreamer

# Required by app-accessibility/orca-3
app-accessibility/speech-dispatcher python

# gtk3 input method plugins required for gnome3; gnome-shell wants ibus[dconf]
app-i18n/ibus dconf gtk3
app-i18n/uim gtk3

# incompatible with >=evolution-data-server-3.6, bug #449138
dev-vcs/giggle -eds

# Required for webkit-gtk-2
media-libs/harfbuzz icu

# Pulled in by net-im/telepathy-connection-managers[msn] (via dev-python/papyon
# and net-voip/telepathy-butterfly)
net-libs/farsight2 python
net-libs/libproxy python

# Required by net-misc/vinagre-3
net-libs/gtk-vnc gtk3

# Required by dev-libs/folks[libsocialweb]
net-libs/libsocialweb vala

# The following are required by ekiga-3
net-libs/opal sip
net-libs/ptlib wav

# For net-misc/vinagre-3.4 and gnome-boxes
net-misc/spice-gtk gtk3

# liboauth (required by evolution-data-server[gnome-online-accounts] and
# gnome-documents in gnome-3.2) has +nss in IUSE, pulls in curl[-gnutls,nss]
# In >=curl-7.25.0-r1, need CURL_SSL="-gnutls nss -openssl"
net-misc/curl -curl_ssl_gnutls curl_ssl_nss -curl_ssl_openssl -gnutls nss
dev-python/pycurl -curl_ssl_gnutls curl_ssl_nss -curl_ssl_openssl

# Required by app-admin/sabayon
x11-base/xorg-server kdrive
