# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
#
# 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 prefix-guest prefix-stack"
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 nios2 ppc ppc64 ppc64-linux ppc-aix ppc-macos ppc-openbsd riscv s390 sh sparc sparc64-freebsd sparc64-solaris sparc-fbsd sparc-solaris x64-cygwin 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 bionic Cygwin Darwin DragonFly FreeBSD glibc HPUX Interix mingw mintlib musl NetBSD OpenBSD SunOS uclibc Winnt"
USE_EXPAND_VALUES_KERNEL="AIX Darwin FreeBSD freemint HPUX 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@lists.gentoo.org.
USE_EXPAND="ABI_ARM ABI_MIPS ABI_PPC ABI_S390 ABI_X86 ALSA_CARDS APACHE2_MODULES APACHE2_MPMS CALLIGRA_FEATURES CAMERAS COLLECTD_PLUGINS CPU_FLAGS_X86 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 LLVM_TARGETS MONKEYD_PLUGINS NETBEANS_MODULES NGINX_MODULES_HTTP NGINX_MODULES_MAIL NGINX_MODULES_STREAM 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 ROS_MESSAGES CPU_FLAGS_ARM"

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

# Basic CONFIG_PROTECT is defined by portage make.globals in /usr/share. That is really bad, kill it here.
# Leave one (fake) path in to avoid portage warning the value is empty.
CONFIG_PROTECT="-/etc /fake-file"
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"

# 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="${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>
# https://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="ruby25"

# 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.
# https://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_2 python_targets_python2_7"

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

# 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,
#    Note: Disabled for CrOS.
# 2) allow replacing unowned compiled Python modules (python-r1 migration),
# 3) allow replacing unowned dropin.cache files (twisted-r1 migration).
# 4) ignore collisions in the build-id tree. These are colliding symlinks
#    specifying where to get debug symbols for two identical executables
#    installed at different paths.
COLLISION_IGNORE="*.py[co] *\$py.class */dropin.cache /usr/lib/debug/.build-id"
UNINSTALL_IGNORE=""

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

# ChromeOS-specific: BOARD_USE for accessing board value in cros-board.eclass
#                    CROS_WORKON_TREE for cros-workon
#                    CHROMEOS_KERNEL_FAMILY for kernel config family
#                    FPMCU_FIRMWARE for compiling the fingerprint firmware
#                    LINUX_FIRMWARE for selecting upstream firmware components
#                    TESTS USE_EXPAND for autotest
#                    TTY_CONSOLE for enabling tty consoles
#                    U_BOOT_CONFIG_USE for selecting U-Boot config
#
# When you add a variable to USE_EXPAND, it means that if portage encounters
# the specified variable in make.defaults it will expand it into a USE variable
# with the prefix being a lowercase version of the variable.
#
# For example, if FPMCU_FIRMWARE is added to USE_EXPAND, setting
#
#   FPMCU_FIRMWARE="bloonchipper dartmonkey"
#
# in device-specific profile (e.g., overlays/baseboard-hatch/profiles/base/make.defaults)
# will result in the following USE flags being created:
#
#   fpmcu_firmware_bloonchipper
#   fpmcu_firmware_dartmonkey
USE_EXPAND="
	${USE_EXPAND}
	BOARD_USE
	CROS_WORKON_TREE
	CHROMEOS_KERNEL_FAMILY
	FPMCU_FIRMWARE
	LINUX_FIRMWARE
	TESTS
	TTY_CONSOLE
	U_BOOT_CONFIG_USE
"
USE_EXPAND_HIDDEN="${USE_EXPAND_HIDDEN} CROS_WORKON_TREE"

# Default licenses that are accepted for ChromiumOS builds.
# If you want to accept more, use the --accept_licenses flag
# when running setup_board.
ACCEPT_LICENSE="* -@EULA -@CHROMEOS"

# By default, we only start a console on tty2.
TTY_CONSOLE="tty2"

# Explicitly set the default value to "" otherwise portage will default it to
# "*".
CROS_WORKON_TREE=""

# We don't use the news feature anywhere.  Disable it to avoid useless runtime
# overhead (especially with locking checks).
FEATURES="-news"

# Languages are handled by Chrome, and localization is not required
# from individual packages.
LINGUAS="en"

# We set a SOURCE_DATE_EPOCH to encourage reproducible builds. Packages should
# feel free to override this value in their ebuilds if they want a proper time.
# We use a non-zero value because some packages will ignore 0 and others have
# assertions checking that the value != 0.
SOURCE_DATE_EPOCH="1"
