# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/base/make.defaults,v 1.110 2014/01/18 01:02:47 vapier Exp $
#
# System-wide defaults for the Portage system
# See portage(5) manpage

# Profile IUSE injection (applies only to ebuilds which use EAPI 5 or later)
IUSE_IMPLICIT="prefix"
USE_EXPAND_UNPREFIXED="ARCH"
USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND"
USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd amd64-linux arm arm-linux arm64 hppa hppa-hpux ia64 ia64-hpux ia64-linux m68k m68k-mint mips ppc ppc64 ppc64-linux ppc-aix ppc-macos ppc-openbsd s390 sh sparc sparc64-freebsd sparc64-solaris sparc-fbsd sparc-solaris x64-freebsd x64-macos x64-openbsd x64-solaris x86 x86-cygwin x86-fbsd x86-freebsd x86-interix x86-linux x86-macos x86-netbsd x86-openbsd x86-solaris x86-winnt"
USE_EXPAND_VALUES_ELIBC="AIX Cygwin Darwin FreeBSD glibc HPUX Interix mintlib musl NetBSD OpenBSD SunOS uclibc Winnt"
USE_EXPAND_VALUES_KERNEL="AIX Cygwin Darwin FreeBSD freemint HPUX Interix linux NetBSD OpenBSD SunOS Winnt"
USE_EXPAND_VALUES_USERLAND="BSD GNU"

# Env vars to expand into USE vars.  Modifying this requires prior
# discussion on gentoo-dev@gentoo.org.
USE_EXPAND="ABI_MIPS ABI_PPC ABI_S390 ABI_X86 ALSA_CARDS APACHE2_MODULES APACHE2_MPMS CALLIGRA_FEATURES CAMERAS COLLECTD_PLUGINS CROSSCOMPILE_OPTS CURL_SSL DRACUT_MODULES DVB_CARDS ELIBC ENLIGHTENMENT_MODULES FCDSL_CARDS FFTOOLS FOO2ZJS_DEVICES FRITZCAPI_CARDS GPSD_PROTOCOLS GRUB_PLATFORMS INPUT_DEVICES KERNEL LCD_DEVICES LIBREOFFICE_EXTENSIONS LINGUAS LIRC_DEVICES MONKEYD_PLUGINS NETBEANS_MODULES NGINX_MODULES_HTTP NGINX_MODULES_MAIL OFED_DRIVERS OFFICE_IMPLEMENTATION OPENMPI_FABRICS OPENMPI_OFED_FEATURES OPENMPI_RM PHP_TARGETS PYTHON_SINGLE_TARGET PYTHON_TARGETS QEMU_SOFTMMU_TARGETS QEMU_USER_TARGETS RUBY_TARGETS SANE_BACKENDS USERLAND UWSGI_PLUGINS VIDEO_CARDS VOICEMAIL_STORAGE XFCE_PLUGINS XTABLES_ADDONS"

# USE_EXPAND variables whose contents are not shown in package manager
# output. Changes need discussion on gentoo-dev.
USE_EXPAND_HIDDEN="USERLAND KERNEL ELIBC CROSSCOMPILE_OPTS ABI_MIPS ABI_PPC ABI_S390 ABI_X86"

CONFIG_PROTECT="/etc"
CONFIG_PROTECT_MASK="/etc/env.d /etc/gconf"

# Variables that are set exclusively by the profile
# and not by user configuration files.
PROFILE_ONLY_VARIABLES="ARCH ELIBC IUSE_IMPLICIT KERNEL USERLAND USE_EXPAND_IMPLICIT USE_EXPAND_UNPREFIXED USE_EXPAND_VALUES_ARCH USE_EXPAND_VALUES_ELIBC USE_EXPAND_VALUES_KERNEL USE_EXPAND_VALUES_USERLAND"

# 'Sane' defaults
ELIBC="glibc"
KERNEL="linux"
USERLAND="GNU"
INPUT_DEVICES="keyboard mouse"

# Tomáš Chvátal <scarabeus@gentoo.org> (23 Mar 2013)
# By default enable libreoffice implementation only.
OFFICE_IMPLEMENTATION="libreoffice"

# Tomáš Chvátal <scarabeus@gentoo.org> (12 Aug 2011)
# By default do not build any grub platform and let it guess.
GRUB_PLATFORMS=""

# Tomáš Chvátal <scarabeus@gentoo.org> (05 May 2013)
# By default enable all extensions with no dependencies
LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer"

# Tomáš Chvátal <scarabeus@gentoo.org> (15 May 2011)
# Andreas K. Hüttel <dilfridge@gentoo.org> (19 Aug 2011, 25 Mar 2012)
# By default build all koffice / calligra features.
CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author"

# Pacho Ramos <pacho@gentoo.org> (14 Feb 2010)
# Enable 'ptp2' by default as it is available for most cameras.
CAMERAS="ptp2"

# Ole Markus With <olemarkus@gentoo.org> (09 Oct 2010)
# Default PHP targets (should always be latest stable version)
PHP_TARGETS="php5-5"

# Andreas K. Huettel <dilfridge@gentoo.org> (28 Sep 2010)
# Small default list of enabled plugins for collectd
COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog"

# Tomáš Chvátal <scarabeus@gentoo.org> (26 Oct 2010)
# By default enable all protocols for average GPS user
GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ublox ubx"

# Benedikt Böhm <hollow@gentoo.org> (27 Nov 2007)
# Sane defaults for built-in apache modules
# Patrick Lauer <patrick@gentoo.org> (12 Oct 2012)
# extend for apache 2.4
APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias"

# Peter Volkov <pva@gentoo.org> (29 Apr 2010)
# Set some defaults or package will fail to build (Check mconfig in package sources)
XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"

# Robert Buchholz <rbu@gentoo.org> (17 Jan 2006)
# Some common lcd devices
LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text"

# 2006/10/17 - Daniel Drake <dsd@gentoo.org>
# cracklib is becoming optional in shadow (and removed from system) as of
# today. However, cracklib is very standard across the Linux world so we
# enable it by default.
#
# Diego Pettenò <flameeyes@gentoo.org> (14 Jul 2007)
# Moved to base/ profile from default-linux/ so that it also applies to
# embedded and hardened profiles.
USE="cracklib"

# Miroslav Šulc <fordfrog@gentoo.org> (19 Nov 2008)
# Netbeans modules/clusters
NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"

# 2009/09/21 Robin H. Johnson <robbat2@gentoo.org>
# http://archives.gentoo.org/gentoo-dev/msg_dc705dc2c1a45e18a85aa62e8fb17009.xml
# Build kernel modules from linux-mod by default:
USE="${USE} modules"

# Alex Legler <a3li@gentoo.org> (30 Nov 2009)
# Default Ruby build targets
RUBY_TARGETS="ruby19 ruby18"

# Samuli Suominen <ssuominen@gentoo.org> (03 Dec 2009)
# Enable USE cxx by default so base-system and toolchain pkgs can start using USE cxx
# instead of USE nocxx.
# http://archives.gentoo.org/gentoo-dev/msg_a181cd0d36600067b599f4b996c6989f.xml
USE="${USE} cxx"

# Tiziano Müller <dev-zero@gentoo.org> (24 Jan 2010)
# We usually don't want python to (re)write .py[co] files during phase runs
# since it could cause sandbox violations
PYTHONDONTWRITEBYTECODE="1"

# Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org> (16 Nov 2011)
# Add default USE value for bootstrap and rename it from STAGE1_USE to BOOTSTRAP_USE
# Add in expanded PYTHON_TARGETS or stage1 builds break because of USE="-* ${BOOTSTRAP_USE}"
# This MUST be kept in sync with the PYTHON_TARGETS below
BOOTSTRAP_USE="cxx unicode python_targets_python3_3 python_targets_python2_7"

# Mike Gilbert <floppym@gentoo.org> (15 May 2012)
# Default target(s) for python-r1.eclass
PYTHON_TARGETS="python2_7 python3_3"
PYTHON_SINGLE_TARGET="python2_7"

# Michał Górny <mgorny@gentoo.org> (10 Aug 2013)
# Moved from portage's make.globals.
# 1) do not uninstall kernel modules and therefore allow replacing them,
# 2) allow replacing unowned compiled Python modules (python-r1 migration),
# 3) allow replacing unowned dropin.cache files (twisted-r1 migration).
COLLISION_IGNORE="/lib/modules/* *.py[co] *\$py.class */dropin.cache"
UNINSTALL_IGNORE="/lib/modules/*"

# Andreas K. Hüttel <dilfridge@gentoo.org> (23 Aug 2013)
# Make emerge messages default to English as per Council decision
LC_MESSAGES=C
