diff options
-rw-r--r-- | pym/_emerge/depgraph.py | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 49e5db2b9..e2d16453e 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -2981,37 +2981,41 @@ class depgraph(object): else: use = self._pkg_use_enabled(pkg) + use_match = True + can_adjust_use = not pkg.built + if atom.use.enabled: need_enabled = atom.use.enabled.difference(use) if need_enabled: need_enabled = need_enabled.difference( atom.use.missing_enabled.difference(pkg.iuse.all)) if need_enabled: - if not pkg.built: - if not pkg.use.mask.intersection(need_enabled): - # Be careful about masked flags, since they - # typically aren't adjustable by the user. - packages_with_invalid_use_config.append(pkg) - continue + use_match = False + if can_adjust_use: + if pkg.use.mask.intersection(need_enabled): + can_adjust_use = False if atom.use.disabled: need_disabled = atom.use.disabled.intersection(use) if need_disabled: - if not pkg.built: - if not pkg.use.force.difference( - pkg.use.mask).intersection(need_disabled): - # Be careful about forced flags, since they - # typically aren't adjustable by the user. - packages_with_invalid_use_config.append(pkg) - continue - - need_disabled = atom.use.disabled.difference( - pkg.iuse.all).difference(atom.use.missing_disabled) - if need_disabled: - # Don't add this to packages_with_invalid_use_config - # since missing_disabled indicates an IUSE issue, and - # IUSE cannot be adjusted by the user. - continue + need_disabled = need_disabled.difference( + atom.use.missing_disabled.difference(pkg.iuse.all)) + if need_disabled: + use_match = False + if can_adjust_use: + if pkg.use.force.difference( + pkg.use.mask).intersection(need_disabled): + can_adjust_use = False + + if can_adjust_use: + # Above we must ensure that this package has + # absolutely no use.force, use.mask, or IUSE + # issues that the user typically can't make + # adjustments to solve (see bug #345979). + packages_with_invalid_use_config.append(pkg) + + if not use_match: + continue elif atom.unevaluated_atom.use: #Make sure we don't miss a 'missing IUSE'. |