# 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

# 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, or subversion in git, so we can
# disable these for faster builds.
dev-vcs/git cvs subversion

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

# 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
cross-armv7a-cros-linux-gnueabihf/glibc hardened

# Han Shen <shenhan@chromium.org> (21 Mar 2012)
#
# Disable hardened for bare-metal toolchains.
cross-arm-none-eabi/binutils hardened
cross-arm-none-eabi/gcc hardened
cross-arm-none-eabi/newlib hardened
cross-armv7m-cros-eabi/binutils hardened
cross-armv7m-cros-eabi/gcc hardened
cross-armv7m-cros-eabi/newlib hardened
cross-riscv64-cros-elf/binutils hardened
cross-riscv64-cros-elf/gcc hardened
cross-riscv64-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

# We split out the protobuf python bindings into the protobuf-python package.
dev-libs/protobuf python

# We don't care about python bindings with the module tools.
sys-apps/kmod python

# We don't care about the ssl lib.
dev-libs/libevent ssl

# Don't inject CACert/SPI certs into NSS. They are not trusted CAs
# Don't include the NSS PEM parsing routines. They are experimental and not
#   yet upstreamed.
dev-libs/nss cacert nss-pem
app-crypt/nss cacert nss-pem

# librsvg does not really depend on GTK (which is prohibited in chromiumos).
gnome-base/librsvg gtk

# USE=bindist only controls elliptic curve support now, and we want it.
dev-libs/openssl bindist
# openssh tracks USE=bindist only because openssl does.
net-misc/openssh bindist
# We want WPA3 features, which currently aren't available with openssl's
# USE=bindist.
net-wireless/wpa_supplicant-cros bindist

# Resolve circular dependency between libcap and pam.
# http://crbug.com/508630 (see #8)
sys-libs/libcap pam

# We don't care about smartcard support in GPG, and USB is only used for that.
app-crypt/gnupg smartcard usb

# Pulls in packages we don't have or want, like app-crypt/p11-kit. But we may
# enable 'smartcard' for the sake of other packages.
net-libs/glib-networking smartcard
