aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pym/portage/dbapi/__init__.py10
-rw-r--r--repoman/pym/repoman/modules/scan/depend/profile.py36
2 files changed, 39 insertions, 7 deletions
diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
index 61d301839..6fca6090c 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/pym/portage/dbapi/__init__.py
@@ -219,17 +219,13 @@ class dbapi(object):
def _repoman_iuse_implicit_cnstr(self, pkg, metadata):
"""
In repoman's version of _iuse_implicit_cnstr, account for modifications
- of the self.settings reference between calls, and treat all flags as
- valid for the empty profile because it does not have any implicit IUSE
- settings. See bug 660982.
+ of the self.settings reference between calls.
"""
eapi_attrs = _get_eapi_attrs(metadata["EAPI"])
if eapi_attrs.iuse_effective:
- iuse_implicit_match = lambda flag: (True if not self.settings.profile_path
- else self.settings._iuse_effective_match(flag))
+ iuse_implicit_match = lambda flag: self.settings._iuse_effective_match(flag)
else:
- iuse_implicit_match = lambda flag: (True if not self.settings.profile_path
- else self.settings._iuse_implicit_match(flag))
+ iuse_implicit_match = lambda flag: self.settings._iuse_implicit_match(flag)
return iuse_implicit_match
def _iuse_implicit_cnstr(self, pkg, metadata):
diff --git a/repoman/pym/repoman/modules/scan/depend/profile.py b/repoman/pym/repoman/modules/scan/depend/profile.py
index 8e0a22f9c..d980f4eca 100644
--- a/repoman/pym/repoman/modules/scan/depend/profile.py
+++ b/repoman/pym/repoman/modules/scan/depend/profile.py
@@ -2,6 +2,7 @@
import copy
+import os
from pprint import pformat
from _emerge.Package import Package
@@ -12,6 +13,8 @@ from repoman.modules.scan.scanbase import ScanBase
from repoman.modules.scan.depend._depend_checks import _depend_checks
from repoman.modules.scan.depend._gen_arches import _gen_arches
from portage.dep import Atom
+from portage.package.ebuild.profile_iuse import iter_iuse_vars
+from portage.util import getconfig
def sort_key(item):
@@ -102,6 +105,11 @@ class ProfileDependsChecks(ScanBase):
local_config=False,
_unmatched_removal=self.options.unmatched_removal,
env=self.env, repositories=self.repo_settings.repoman_settings.repositories)
+
+ if not prof.abs_path:
+ self._populate_implicit_iuse(dep_settings,
+ self.repo_settings.repo_config.eclass_db.porttrees)
+
dep_settings.categories = self.repo_settings.repoman_settings.categories
if self.options.without_mask:
dep_settings._mask_manager_obj = \
@@ -257,3 +265,31 @@ class ProfileDependsChecks(ScanBase):
def runInEbuilds(self):
'''Ebuild level scans'''
return (True, [self.check])
+
+ @staticmethod
+ def _populate_implicit_iuse(config, repo_locations):
+ """
+ Populate implicit IUSE for the empty profile, see bug 660982.
+
+ @param config: config instance for the empty profile
+ @type config: portage.config
+ @param repo_locations: locations of repositories containing relevant
+ implicit IUSE settings
+ @type repo_locations: list
+ """
+ dest = config.configdict['defaults']
+ for location in repo_locations:
+ for parent_dir, dirs, files in os.walk(os.path.join(location, 'profiles')):
+ src = getconfig(os.path.join(parent_dir, 'make.defaults'))
+ if not src:
+ continue
+ for k, v in iter_iuse_vars(src):
+ v_before = dest.get(k)
+ if v_before is not None:
+ merged_values = set(v_before.split())
+ merged_values.update(v.split())
+ v = ' '.join(sorted(merged_values))
+ dest[k] = v
+
+ config.regenerate()
+ config._init_iuse()