# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/arch/arm/package.use.mask,v 1.12 2009/09/27 13:26:40 maekke Exp $

# Lutz Justen <ljusten@chromium.org> (16 Feb 2017)
# authpolicy lacks arm-specific seccomp filters and depends on Samba, which
# doesn't compile for arm yet.
chromeos-base/chromeos-chrome authpolicy

# Denis Nikitin <denik@chromium.org> (1 Feb 2021)
# Mask debug fission on 64-bit targets, b/178492639.
chromeos-base/chromeos-chrome debug_fission

# Markus Meier <maekke@gentoo.org> (27 Sep 2009)
# mask media-gfx/imagemagick[autotrace] as autotrace is not keyworded
media-gfx/imagemagick autotrace

# Jim Ramsay <lack@gentoo.org> (5 Nov 2008)
# app-admin/gkrellm may pull in net-libs/libntlm, which is not keyworded
app-admin/gkrellm ntlm

# Gilles Dartiguelongue <eva@gentoo.org> (19 Oct 2007)
# gdm depends on zenity which is not keyworded
>=gnome-base/gdm-2.20 remote

# Gilles Dartiguelongue <eva@gentoo.org> (23 Oct 2007)
# gdm depends on zenity which is not keyworded
>=media-video/totem-2.20 galago

# Masking this so repoman shuts up about paludis
sys-apps/paludis ruby-bindings

# missing keywords
media-sound/sox amrnb amrwb ladspa
media-plugins/gst-plugins-meta lame taglib

# David Hendricks <dhendrix@chromium.org> (10 Oct 2011)
# libpci will cause program to exit(1) during init if PCI not present in system
sys-apps/flashrom drkaiser gfxnvidia nicintel nicintel_spi nicrealtek ogp_spi satasii

# Masking as Lacros isn't supported on this arch.
virtual/target-chromium-os lacros_rootfs
