# Copyright 2010-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

from __future__ import unicode_literals

__all__ = (
	'case_insensitive_vars', 'default_globals', 'env_blacklist', \
	'environ_filter', 'environ_whitelist', 'environ_whitelist_re',
)

import re

# Blacklisted variables are internal variables that are never allowed
# to enter the config instance from the external environment or
# configuration files.
env_blacklist = frozenset((
	"A", "AA", "CATEGORY", "DEPEND", "DESCRIPTION", "EAPI",
	"EBUILD_FORCE_TEST", "EBUILD_PHASE",
	"EBUILD_PHASE_FUNC", "EBUILD_SKIP_MANIFEST",
	"ED", "EMERGE_FROM", "EPREFIX", "EROOT",
	"GREP_OPTIONS", "HDEPEND", "HOMEPAGE",
	"INHERITED", "IUSE", "IUSE_EFFECTIVE",
	"KEYWORDS", "LICENSE", "MERGE_TYPE",
	"PDEPEND", "PF", "PKGUSE", "PORTAGE_BACKGROUND",
	"PORTAGE_BACKGROUND_UNMERGE", "PORTAGE_BUILDDIR_LOCKED",
	"PORTAGE_BUILT_USE", "PORTAGE_CONFIGROOT",
	"PORTAGE_INTERNAL_CALLER", "PORTAGE_IUSE",
	"PORTAGE_NONFATAL", "PORTAGE_PIPE_FD", "PORTAGE_REPO_NAME",
	"PORTAGE_USE", "PROPERTIES", "PROVIDE", "RDEPEND", "REPOSITORY",
	"RESTRICT", "ROOT", "SLOT", "SRC_URI"
))

environ_whitelist = []

# Whitelisted variables are always allowed to enter the ebuild
# environment. Generally, this only includes special portage
# variables. Ebuilds can unset variables that are not whitelisted
# and rely on them remaining unset for future phases, without them
# leaking back in from various locations (bug #189417). It's very
# important to set our special BASH_ENV variable in the ebuild
# environment in order to prevent sandbox from sourcing /etc/profile
# in it's bashrc (causing major leakage).
environ_whitelist += [
	"ACCEPT_LICENSE", "BASH_ENV", "BUILD_PREFIX", "COLUMNS", "D",
	"DISTDIR", "DOC_SYMLINKS_DIR", "EAPI", "EBUILD",
	"EBUILD_FORCE_TEST",
	"EBUILD_PHASE", "EBUILD_PHASE_FUNC", "ECLASSDIR", "ECLASS_DEPTH", "ED",
	"EMERGE_FROM", "EPREFIX", "EROOT",
	"FEATURES", "FILESDIR", "HOME", "MERGE_TYPE", "NOCOLOR", "PATH",
	"PKGDIR",
	"PKGUSE", "PKG_LOGDIR", "PKG_TMPDIR",
	"PORTAGE_ACTUAL_DISTDIR", "PORTAGE_ARCHLIST", "PORTAGE_BASHRC_FILES",
	"PORTAGE_BASHRC", "PM_EBUILD_HOOK_DIR",
	"PORTAGE_BINPKG_FILE", "PORTAGE_BINPKG_TAR_OPTS",
	"PORTAGE_BINPKG_TMPFILE", "PORTAGE_DEBUGSYMBOLS_TMPFILE",
	"PORTAGE_BIN_PATH",
	"PORTAGE_BUILDDIR", "PORTAGE_BUILD_GROUP", "PORTAGE_BUILD_USER",
	"PORTAGE_BUNZIP2_COMMAND", "PORTAGE_BZIP2_COMMAND",
	"PORTAGE_COLORMAP", "PORTAGE_COMPRESS",
	"PORTAGE_COMPRESS_EXCLUDE_SUFFIXES",
	"PORTAGE_CONFIGROOT", "PORTAGE_DEBUG", "PORTAGE_DEPCACHEDIR",
	"PORTAGE_DOHTML_UNWARNED_SKIPPED_EXTENSIONS",
	"PORTAGE_DOHTML_UNWARNED_SKIPPED_FILES",
	"PORTAGE_DOHTML_WARN_ON_SKIPPED_FILES",
	"PORTAGE_EBUILD_EXIT_FILE", "PORTAGE_FEATURES",
	"PORTAGE_GID", "PORTAGE_GRPNAME",
	"PORTAGE_INTERNAL_CALLER",
	"PORTAGE_INST_GID", "PORTAGE_INST_UID",
	"PORTAGE_IPC_DAEMON", "PORTAGE_IUSE", "PORTAGE_ECLASS_LOCATIONS",
	"PORTAGE_LOG_FILE", "PORTAGE_OVERRIDE_EPREFIX", "PORTAGE_PIPE_FD",
	"PORTAGE_PYM_PATH", "PORTAGE_PYTHON",
	"PORTAGE_PYTHONPATH", "PORTAGE_QUIET",
	"PORTAGE_REPO_NAME", "PORTAGE_REPOSITORIES", "PORTAGE_RESTRICT",
	"PORTAGE_SIGPIPE_STATUS",
	"PORTAGE_TMPDIR", "PORTAGE_UPDATE_ENV", "PORTAGE_USERNAME",
	"PORTAGE_VERBOSE", "PORTAGE_WORKDIR_MODE", "PORTAGE_XATTR_EXCLUDE",
	"PORTDIR", "PORTDIR_OVERLAY", "PREROOTPATH",
	"REPLACING_VERSIONS", "REPLACED_BY_VERSION",
	"ROOT", "ROOTPATH", "SYSROOT", "T", "TMP", "TMPDIR",
	"USE_EXPAND", "USE_ORDER", "WORKDIR",
	"XARGS", "__PORTAGE_TEST_HARDLINK_LOCKS",
]

# user config variables
environ_whitelist += [
	"DOC_SYMLINKS_DIR", "INSTALL_MASK", "PKG_INSTALL_MASK"
]

environ_whitelist += [
	"A", "AA", "CATEGORY", "P", "PF", "PN", "PR", "PV", "PVR"
]

# misc variables inherited from the calling environment
environ_whitelist += [
	"COLORTERM", "DISPLAY", "EDITOR", "LESS",
	"LESSOPEN", "LOGNAME", "LS_COLORS", "PAGER",
	"TERM", "TERMCAP", "USER",
	'ftp_proxy', 'http_proxy', 'no_proxy',
]

# tempdir settings
environ_whitelist += [
	"TMPDIR", "TEMP", "TMP",
]

# localization settings
environ_whitelist += [
	"LANG", "LC_COLLATE", "LC_CTYPE", "LC_MESSAGES",
	"LC_MONETARY", "LC_NUMERIC", "LC_TIME", "LC_PAPER",
	"LC_ALL",
]

# other variables inherited from the calling environment
environ_whitelist += [
	"CVS_RSH", "ECHANGELOG_USER",
	"GPG_AGENT_INFO",
	"SSH_AGENT_PID", "SSH_AUTH_SOCK",
	"STY", "WINDOW", "XAUTHORITY",
]

environ_whitelist = frozenset(environ_whitelist)

environ_whitelist_re = re.compile(r'^(CCACHE_|DISTCC_).*')

# Filter selected variables in the config.environ() method so that
# they don't needlessly propagate down into the ebuild environment.
environ_filter = []

# Exclude anything that could be extremely long here (like SRC_URI)
# since that could cause execve() calls to fail with E2BIG errors. For
# example, see bug #262647.
environ_filter += [
	'DEPEND', 'RDEPEND', 'PDEPEND', 'SRC_URI',
]

# misc variables inherited from the calling environment
environ_filter += [
	"INFOPATH", "MANPATH", "USER",
]

# variables that break bash
environ_filter += [
	"HISTFILE", "POSIXLY_CORRECT",
]

# portage config variables and variables set directly by portage
environ_filter += [
	"ACCEPT_CHOSTS", "ACCEPT_KEYWORDS", "ACCEPT_PROPERTIES",
	"ACCEPT_RESTRICT", "AUTOCLEAN",
	"CLEAN_DELAY", "COLLISION_IGNORE",
	"CONFIG_PROTECT", "CONFIG_PROTECT_MASK",
	"DCO_SIGNED_OFF_BY",
	"EGENCACHE_DEFAULT_OPTS", "EMERGE_DEFAULT_OPTS",
	"EMERGE_LOG_DIR",
	"EMERGE_WARNING_DELAY",
	"FETCHCOMMAND", "FETCHCOMMAND_FTP",
	"FETCHCOMMAND_HTTP", "FETCHCOMMAND_HTTPS",
	"FETCHCOMMAND_RSYNC", "FETCHCOMMAND_SFTP",
	"GENTOO_MIRRORS", "NOCONFMEM", "O",
	"PORTAGE_BACKGROUND", "PORTAGE_BACKGROUND_UNMERGE",
	"PORTAGE_BINHOST", "PORTAGE_BINPKG_FORMAT",
	"PORTAGE_BUILDDIR_LOCKED",
	"PORTAGE_CHECKSUM_FILTER",
	"PORTAGE_ELOG_CLASSES",
	"PORTAGE_ELOG_MAILFROM", "PORTAGE_ELOG_MAILSUBJECT",
	"PORTAGE_ELOG_MAILURI", "PORTAGE_ELOG_SYSTEM",
	"PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS", "PORTAGE_FETCH_RESUME_MIN_SIZE",
	"PORTAGE_GPG_DIR",
	"PORTAGE_GPG_KEY", "PORTAGE_GPG_SIGNING_COMMAND",
	"PORTAGE_IONICE_COMMAND",
	"PORTAGE_PACKAGE_EMPTY_ABORT",
	"PORTAGE_REPO_DUPLICATE_WARN",
	"PORTAGE_RO_DISTDIRS",
	"PORTAGE_RSYNC_EXTRA_OPTS", "PORTAGE_RSYNC_OPTS",
	"PORTAGE_RSYNC_RETRIES", "PORTAGE_SSH_OPTS", "PORTAGE_SYNC_STALE",
	"PORTAGE_USE",
	"PORT_LOGDIR", "PORT_LOGDIR_CLEAN",
	"QUICKPKG_DEFAULT_OPTS", "REPOMAN_DEFAULT_OPTS",
	"RESUMECOMMAND", "RESUMECOMMAND_FTP",
	"RESUMECOMMAND_HTTP", "RESUMECOMMAND_HTTPS",
	"RESUMECOMMAND_RSYNC", "RESUMECOMMAND_SFTP",
	"UNINSTALL_IGNORE", "USE_EXPAND_HIDDEN", "USE_ORDER",
	"__PORTAGE_HELPER"
]

# No longer supported variables
environ_filter += [
	"SYNC"
]

environ_filter = frozenset(environ_filter)

# Variables that are not allowed to have per-repo or per-package
# settings.
global_only_vars = frozenset([
	"CONFIG_PROTECT",
])

default_globals = {
	'ACCEPT_LICENSE':           '* -@EULA',
	'ACCEPT_PROPERTIES':        '*',
	'PORTAGE_BZIP2_COMMAND':    'bzip2',
}

validate_commands = ('PORTAGE_BZIP2_COMMAND', 'PORTAGE_BUNZIP2_COMMAND',)

# To enhance usability, make some vars case insensitive
# by forcing them to lower case.
case_insensitive_vars = ('AUTOCLEAN', 'NOCOLOR',)
