diff options
Diffstat (limited to 'lib/portage/package/ebuild')
-rw-r--r-- | lib/portage/package/ebuild/_config/special_env_vars.py | 3 | ||||
-rw-r--r-- | lib/portage/package/ebuild/config.py | 22 | ||||
-rw-r--r-- | lib/portage/package/ebuild/doebuild.py | 15 |
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) |