# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/default/linux/package.use.mask,v 1.16 2009/08/20 18:55:43 flameeyes Exp $

sys-devel/gcc hardened
sys-libs/glibc hardened

# Diego E. Pettenò <flameeyes@gentoo.org> (20 Aug 2009)
#
# Mask oss USE flag for PulseAudio; it's present for compatibility
# with FreeBSD and other operating systems that have no better
# interfaces, but people would probably abuse it with Linux as well.
#
# Older versions also had an OSS compatibility wrapper on that USE so
# they are excluded.
>=media-sound/pulseaudio-0.9.16_rc5 oss

# If building dpkg with nls it pulls in a bunch of packages, including po4a
# which will hang if output is redirected. This was stalling our buildbots.
app-arch/dpkg nls

# We don't need integration with cvs, perl, or subversion in git, so we can
# disable these for faster builds.
dev-vcs/git cvs perl subversion

# We use asynchronous dns resolution instead of threaded dns resolution.
net-misc/curl threads

# The qemu-kvm package is compiled statically now, and version 0.15.1
# cannot handle USE=bluetooth and static compilation.  We don't actually
# use bluetooth functionality for this package.
app-emulation/qemu-kvm	bluetooth

# Han Shen <shenhan@chromium.org> (16 Mar 2012)
#
# Disable hardened glibc for arm - current glibc for arm port has a bug in
# setjmp.S and __longjmp.S, this needs to be fixed before arm glibc could be
# hardened.
cross-armv7a-cros-linux-gnueabi/glibc hardened

# Han Shen <shenhan@chromium.org> (21 Mar 2012)
#
# Disable hardened for bare-metal toolchains.
cross-arm-none-eabi/gcc hardened
cross-arm-none-eabi/newlib hardened
cross-nds32le-cros-elf/nds32-gcc hardened
cross-nds32le-cros-elf/gcc hardened
cross-nds32le-cros-elf/nds32-newlib hardened
cross-nds32le-cros-elf/newlib hardened

# yasm-python is blocked until we upgrade to python 2.7.
dev-lang/yasm python

# We don't care about pam support in developer-only tool.
app-misc/screen pam
