# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/default/bsd/fbsd/package.use.mask,v 1.36 2013/08/27 22:07:31 aballier Exp $

# As per UberLord's requests
sys-apps/openrc pam

# Jim Ramsay <lack@gentoo.org> (7 Sep 2007)
# app-admin/gkrellm may pull in hddtemp, which is not yet available here
app-admin/gkrellm hddtemp

# Somehow, check's tests are broken..
dev-libs/confuse test
dev-util/checkstyle test

# Dillo won't run on FreeBSD
# PDA masked until we can do some testing on it
mail-client/claws-mail dillo pda

# Original spell plugin uses ispell that requires
# miscfiles.. that in turn does not work
net-irc/rbot spell

# Diego Pettenò <flameeyes@gentoo.org> (18 Jan 2007)
# Vixie-Cron uses pam useflag for pam_limits.so that is provided
# by Linux-PAM we don't use for now.
sys-process/vixie-cron pam

x11-misc/xscreensaver new-login

# net-wireless/aircrack-ng - wireless capture tools not needed.
net-wireless/aircrack-ng wifi

# Gilles Dartiguelongue <eva@gentoo.org> (22 Oct 2007)
# GNU attr isn't supported
dev-libs/glib xattr
gnome-base/gnome-vfs acl
# https://bugs.gentoo.org/show_bug.cgi?id=435474
sys-devel/patch xattr
# https://bugs.gentoo.org/show_bug.cgi?id=432410
app-arch/tar xattr

# Diego Pettenò <flameeyes@gentoo.org> (21 Feb 2008)
# pam_cracklib is only provided by Linux-PAM which is not usable on
# Gentoo/FreeBSD.
# Javier Villavicencio <the_paya@gentoo.org> (31 Jul 2008)
# pam_ssh deps on Linux-PAM.
# Diego Pettenò <flameeyes@gentoo.org> (1 Aug 2008)
# sha512 is only supported by Linux-PAM's pam_unix for now
sys-auth/pambase cracklib pam_ssh sha512

# Alexis Ballier <aballier@gentoo.org> (31 Jan 2009)
# app-misc/tracker should work but needs some code fixups and it uses the fdatasync system call
# that we do not have (bug #257052)
# Mask it for now
gnome-base/nautilus tracker
media-video/totem tracker

# Naohiro Aota <naota@gentoo.org> (04 Aug 2011)
# ads require krb5, which is maksed on FreeBSD
# cluster require ctdb, which doesn't support FreeBSD
net-fs/samba ads cluster

# Naohiro Aota <naota@gentoo.org> (08 Nov 2011)
# capi require Linux features
# hardened require prelink which depends on glibc
app-emulation/wine capi

# Naohiro Aota <naota@gentoo.org> (24 Nov 2011)
# Masked because kerberos is masked
net-dns/bind gssapi

# Naohiro Aota <naota@gentoo.org> (13 Dec 2011)
# Masked because sun-j2me-bin does not support BSD
dev-java/proguard j2me

# Naohiro Aota <naota@gentoo.org> (20 Feb 2012)
# Upstream does not support FreeBSD wifi nor crashreporter
www-client/firefox wifi

# Naohiro Aota <naota@gentoo.org> (03 Oct 2012)
# Mask gbm, udev is not supported on FreeBSD.
media-libs/mesa gbm

# Naohiro Aota <naota@gentoo.org> (06 Oct 2012)
# Mask rpm, app-arch/rpm needs elfutils
net-analyzer/net-snmp rpm

# Naohiro Aota <naota@gentoo.org> (09 Oct 2012)
# Mask dmpai, sys-apps/dmapi cannot build on BSD
net-fs/samba dmapi

# Naohiro Aota <naota@gentoo.org> (15 Oct 2012)
# Mask numa on sys-apps/hwloc. numactl not available on FreeBSD
sys-apps/hwloc numa
