# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

# This file requires eapi 5 or later. New entries go on top.
# Please use the same syntax as in package.use.mask

# Ian Delaney <idella4@gentoo.org> (04 Jan 2016)
# on behalf of Ilya Tumaykin <itumaykin+gentoo@gmail.com>
# media-libs/libcaca wasn't stabilized in the past, but now
# it's ready for the next stable mpv release after the one below.
=media-video/mpv-0.9.2-r1 libcaca

# Mike Gilbert <floppym@gentoo.org> (02 Dec 2015)
# Needs unstable ffmpeg.
=www-client/chromium-47* system-ffmpeg
=www-client/chromium-48* system-ffmpeg

# Mike Gilbert <floppym@gentoo.org> (03 Oct 2015)
# Unmask python3.5 for python-exec
dev-lang/python-exec -python_targets_python3_5

# Andreas Huettel <dilfridge@gentoo.org> (26 Sep 2015)
# Not stable enough for stable (Debian and SuSE disable it completely)
=app-office/libreoffice-5.0* gtk3
=app-office/libreoffice-5.1* gtk3

# Johannes Huber <johu@gentoo.org> (27 Aug 2015)
# Needs KF 5 stable, bug #558460
net-irc/quassel qt5

# Davide Pesavento <pesa@gentoo.org> (26 Aug 2015)
# The corresponding Qt5 modules are not stable yet, and we don't want
# to stabilize them solely because of PyQt5 when there are no other
# in-tree users yet.
dev-python/PyQt5 positioning sensors serialport webchannel websockets

# Pacho Ramos <pacho@gentoo.org> (15 May 2015)
# Version compatible with current ffmpeg is not ready to be stabilized
# bug #539212
app-emulation/vice ffmpeg

# Pacho Ramos <pacho@gentoo.org> (13 May 2015)
# texinfo-5 cannot be stabilized yet
=dev-lang/gnat-gcc-4.6* doc

# Jeroen Roovers <jer@gentoo.org> (26 Apr 2015)
# mongodb support is nice, but dev-libs/mongo-c-driver upstream is not ready
# yet (bug #542210)
net-analyzer/pmacct mongodb

# Matthias Maier <tamiko@gentoo.org> (13 Mar 2015)
# Masking glusterfs for the time being, see entry for app-emulation/qemu of
# 12 Sep 2013: Waiting on glusterfs maintainers in bug #484016
app-emulation/libvirt glusterfs

# Pacho Ramos <pacho@gentoo.org>
# sci-visualization/paraview is not ready for stabilization yet
# See bug #541012
sci-libs/openfoam paraview

# Pacho Ramos <pacho@gentoo.org>
# dev-libs/libappindicator isn't going to be stabilized
x11-misc/redshift appindicator

# Ben de Groot <yngwin@gentoo.org>
# Mask experimental feature on stable. This also needs not yet stable mupdf.
app-text/qpdfview fitz

# Andreas K. Huettel <dilfridge@gentoo.org> (12 Feb 2015)
# Pulls in way too many unstable sci packages
app-office/libreoffice coinmp

# Andreas K. Huettel <dilfridge@gentoo.org> (30 Oct 2014)
# Pulls in sci-libs/vtk with a lot of new dependencies; stabilizing
# that will take some more time
media-libs/opencv vtk

# Mikle Kolyada <zlogene@gentoo.org> (16 Aug 2014)
# Not yet stabilized dependency, need more testing
>=dev-perl/PDL-2.4.11 pdl2 pgplot plplot

# Samuli Suominen <ssuominen@gentoo.org> (01 Aug 2014)
# Optional (not required by anything in gentoo-x86) and fragile (based on
# host system, like Java JRE version). Keep masked indefinately until
# something starts requiring these.
# https://bugs.gentoo.org/483372 and https://bugs.gentoo.org/508564
media-libs/libcaca java mono

# Alon Bar-Lev <alonbl@gentoo.org> (21 Jul 2014)
# dev-libs/opencryptoki will not be stabile any time soon (bug#510204)
app-crypt/tpm-tools pkcs11

# Andreas K. Huettel <dilfridge@gentoo.org> (29 Jun 2014)
# Not yet stabilized dependencies blocking sec bug 514886
app-office/libreoffice firebird

# Agostino Sarubbo <ago@gentoo.org> (31 Aug 2013)
# Clang is not stable
app-portage/eix clang

# Sergey Popov <pinkbyte@gentoo.org> (28 Oct 2013)
# sys-cluster/cman is still in ~arch.
sys-cluster/pacemaker cman

# Samuli Suominen <ssuominen@gentoo.org> (01 Aug 2013)
# The dependencies for these flags are still in ~arch.
sys-fs/lvm2 clvm cman

# Doug Goldstein <cardoe@gentoo.org> (12 Sep 2013)
# Waiting on glusterfs maintainers in bug #484016
app-emulation/qemu glusterfs

# Ian Delaney <idella4@gentoo.org> (09 Dec 2013)
# subsequent to the total inaction of the maintainer of
# ocaml to honour / respond in any way to
# Bug #486076, ocaml masked to allow xen to once again
# become a stabilisable package
app-emulation/xen-tools ocaml

# Samuli Suominen <ssuominen@gentoo.org> (19 Mar 2014)
# Some open source OpenCL providers cause sandbox violation while accessing /dev/dri/card*
# from a command like eg. `/usr/bin/mogrify -version`, see bug #472766
media-gfx/imagemagick opencl

# Andreas K. Huettel <dilfridge@gentoo.org> (28 Mar 2013)
# No stable sci-chemistry/avogadro yet but we want kde-4.10 to go stable
>=kde-apps/kalzium-4.10.0 editor

# Chris Reffett <creffett@gentoo.org> (23 Nov 2012)
# CMake's PHP module can't find our install location, so
# libkolab(xml) fails with the php flag enabled, bug #430858.
net-libs/libkolab php
net-libs/libkolabxml php
