aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/portage/package/ebuild')
-rw-r--r--lib/portage/package/ebuild/_config/special_env_vars.py3
-rw-r--r--lib/portage/package/ebuild/config.py22
-rw-r--r--lib/portage/package/ebuild/doebuild.py15
3 files changed, 29 insertions, 11 deletions
diff --git a/lib/portage/package/ebuild/_config/special_env_vars.py b/lib/portage/package/ebuild/_config/special_env_vars.py
index 8b65762ea..72fc31401 100644
--- a/lib/portage/package/ebuild/_config/special_env_vars.py
+++ b/lib/portage/package/ebuild/_config/special_env_vars.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Gentoo Authors
+# Copyright 2010-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
__all__ = (
@@ -68,6 +68,7 @@ environ_whitelist += [
"PORTAGE_INST_GID", "PORTAGE_INST_UID",
"PORTAGE_IPC_DAEMON", "PORTAGE_IUSE", "PORTAGE_ECLASS_LOCATIONS",
"PORTAGE_LOG_FILE", "PORTAGE_OVERRIDE_EPREFIX", "PORTAGE_PIPE_FD",
+ "PORTAGE_PROPERTIES",
"PORTAGE_PYM_PATH", "PORTAGE_PYTHON",
"PORTAGE_PYTHONPATH", "PORTAGE_QUIET",
"PORTAGE_REPO_NAME", "PORTAGE_REPOSITORIES", "PORTAGE_RESTRICT",
diff --git a/lib/portage/package/ebuild/config.py b/lib/portage/package/ebuild/config.py
index 0d0b51053..773135b3d 100644
--- a/lib/portage/package/ebuild/config.py
+++ b/lib/portage/package/ebuild/config.py
@@ -1359,12 +1359,13 @@ class config:
values['ACCEPT_LICENSE'] = settings._license_manager.get_prunned_accept_license( \
settings.mycpv, use, settings.get('LICENSE', ''), settings.get('SLOT'), settings.get('PORTAGE_REPO_NAME'))
- values['PORTAGE_RESTRICT'] = self._restrict(use, settings)
+ values['PORTAGE_PROPERTIES'] = self._flatten('PROPERTIES', use, settings)
+ values['PORTAGE_RESTRICT'] = self._flatten('RESTRICT', use, settings)
return values
- def _restrict(self, use, settings):
+ def _flatten(self, var, use, settings):
try:
- restrict = set(use_reduce(settings.get('RESTRICT', ''), uselist=use, flat=True))
+ restrict = set(use_reduce(settings.get(var, ''), uselist=use, flat=True))
except InvalidDependString:
restrict = set()
return ' '.join(sorted(restrict))
@@ -1713,17 +1714,25 @@ class config:
iuse_implicit_match = self._iuse_implicit_match
if pkg is None:
+ raw_properties = pkg_configdict.get("PROPERTIES")
raw_restrict = pkg_configdict.get("RESTRICT")
else:
+ raw_properties = pkg._raw_metadata["PROPERTIES"]
raw_restrict = pkg._raw_metadata["RESTRICT"]
restrict_test = False
if raw_restrict:
try:
if built_use is not None:
+ properties = use_reduce(raw_properties,
+ uselist=built_use, flat=True)
restrict = use_reduce(raw_restrict,
uselist=built_use, flat=True)
else:
+ properties = use_reduce(raw_properties,
+ uselist=frozenset(x for x in self['USE'].split()
+ if x in explicit_iuse or iuse_implicit_match(x)),
+ flat=True)
restrict = use_reduce(raw_restrict,
uselist=frozenset(x for x in self['USE'].split()
if x in explicit_iuse or iuse_implicit_match(x)),
@@ -1731,7 +1740,10 @@ class config:
except PortageException:
pass
else:
- restrict_test = "test" in restrict
+ allow_test = self.get('ALLOW_TEST', '').split()
+ restrict_test = (
+ "test" in restrict and not "all" in allow_test and
+ not ("test_network" in properties and "network" in allow_test))
if restrict_test and "test" in self.features:
# Handle it like IUSE="-test", since features USE is
@@ -1754,6 +1766,8 @@ class config:
lazy_vars = self._lazy_vars(built_use, self)
env_configdict.addLazySingleton('ACCEPT_LICENSE',
lazy_vars.__getitem__, 'ACCEPT_LICENSE')
+ env_configdict.addLazySingleton('PORTAGE_PROPERTIES',
+ lazy_vars.__getitem__, 'PORTAGE_PROPERTIES')
env_configdict.addLazySingleton('PORTAGE_RESTRICT',
lazy_vars.__getitem__, 'PORTAGE_RESTRICT')
diff --git a/lib/portage/package/ebuild/doebuild.py b/lib/portage/package/ebuild/doebuild.py
index 476689d5e..86c1d40b4 100644
--- a/lib/portage/package/ebuild/doebuild.py
+++ b/lib/portage/package/ebuild/doebuild.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Gentoo Authors
+# Copyright 2010-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
__all__ = ['doebuild', 'doebuild_environment', 'spawn', 'spawnebuild']
@@ -142,11 +142,14 @@ def _doebuild_spawn(phase, settings, actionmap=None, **kwargs):
kwargs['ipc'] = 'ipc-sandbox' not in settings.features or \
phase in _ipc_phases
kwargs['mountns'] = 'mount-sandbox' in settings.features
- kwargs['networked'] = 'network-sandbox' not in settings.features or \
- (phase == 'unpack' and \
- 'live' in settings.configdict['pkg'].get('PROPERTIES', '').split()) or \
- phase in _ipc_phases or \
- 'network-sandbox' in settings['PORTAGE_RESTRICT'].split()
+ kwargs['networked'] = (
+ 'network-sandbox' not in settings.features or
+ (phase == 'unpack' and
+ 'live' in settings['PORTAGE_PROPERTIES'].split()) or
+ (phase == 'test' and
+ 'test_network' in settings['PORTAGE_PROPERTIES'].split()) or
+ phase in _ipc_phases or
+ 'network-sandbox' in settings['PORTAGE_RESTRICT'].split())
kwargs['pidns'] = ('pid-sandbox' in settings.features and
phase not in _global_pid_phases)