def __init__(self, pkg, tokens, iuse_implicit_match, aliases, eapi): self._pkg = pkg self.tokens = tuple(tokens) self._iuse_implicit_match = iuse_implicit_match enabled = [] disabled = [] other = [] enabled_aliases = [] disabled_aliases = [] other_aliases = [] aliases_supported = eapi_has_use_aliases(eapi) self.alias_mapping = {} for x in tokens: prefix = x[:1] if prefix == "+": enabled.append(x[1:]) if aliases_supported: self.alias_mapping[x[1:]] = aliases.get(x[1:], []) enabled_aliases.extend(self.alias_mapping[x[1:]]) elif prefix == "-": disabled.append(x[1:]) if aliases_supported: self.alias_mapping[x[1:]] = aliases.get(x[1:], []) disabled_aliases.extend(self.alias_mapping[x[1:]]) else: other.append(x) if aliases_supported: self.alias_mapping[x] = aliases.get(x, []) other_aliases.extend(self.alias_mapping[x]) self.enabled = frozenset(chain(enabled, enabled_aliases)) self.disabled = frozenset(chain(disabled, disabled_aliases)) self.all = frozenset(chain(enabled, disabled, other)) self.all_aliases = frozenset(chain(enabled_aliases, disabled_aliases, other_aliases))
def getUseAliases(self, pkg): if hasattr(pkg, "eapi") and not eapi_has_use_aliases(pkg.eapi): return {} cp = getattr(pkg, "cp", None) if cp is None: slot = dep_getslot(pkg) repo = dep_getrepo(pkg) pkg = _pkg_str(remove_slot(pkg), slot=slot, repo=repo) cp = pkg.cp usealiases = {} if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO: repos = [] try: repos.extend(repo.name for repo in self.repositories[pkg.repo].masters) except KeyError: pass repos.append(pkg.repo) for repo in repos: usealiases_dict = self._repo_usealiases_dict.get(repo, {}) for real_flag, aliases in usealiases_dict.items(): for alias in aliases: if any(alias in v for k, v in usealiases.items() if k != real_flag): writemsg( _("--- Duplicated USE flag alias for '%s%s%s': '%s'\n" ) % (pkg.cpv, _repo_separator, pkg.repo, alias), noiselevel=-1, ) else: usealiases.setdefault(real_flag, []).append(alias) cp_usealiases_dict = self._repo_pusealiases_dict.get( repo, {}).get(cp) if cp_usealiases_dict: usealiases_dict_list = ordered_by_atom_specificity( cp_usealiases_dict, pkg) for usealiases_dict in usealiases_dict_list: for real_flag, aliases in usealiases_dict.items(): for alias in aliases: if any(alias in v for k, v in usealiases.items() if k != real_flag): writemsg( _("--- Duplicated USE flag alias for '%s%s%s': '%s'\n" ) % (pkg.cpv, _repo_separator, pkg.repo, alias), noiselevel=-1, ) else: usealiases.setdefault(real_flag, []).append(alias) return usealiases
def getUseAliases(self, pkg): if hasattr(pkg, "eapi") and not eapi_has_use_aliases(pkg.eapi): return {} cp = getattr(pkg, "cp", None) if cp is None: slot = dep_getslot(pkg) repo = dep_getrepo(pkg) pkg = _pkg_str(remove_slot(pkg), slot=slot, repo=repo) cp = pkg.cp usealiases = {} if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO: repos = [] try: if self.repositories[pkg.repo].use_aliases_masters is not None: masters = self.repositories[pkg.repo].use_aliases_masters else: masters = self.repositories[pkg.repo].masters repos.extend(repo.name for repo in masters) except KeyError: pass repos.append(pkg.repo) for repo in repos: usealiases_dict = self._repo_usealiases_dict.get(repo, {}) for real_flag, aliases in usealiases_dict.items(): for alias in aliases: if any(alias in v for k, v in usealiases.items() if k != real_flag): writemsg( _("--- Duplicated USE flag alias for '%s%s%s': '%s'\n") % (pkg.cpv, _repo_separator, pkg.repo, alias), noiselevel=-1, ) else: usealiases.setdefault(real_flag, []).append(alias) cp_usealiases_dict = self._repo_pusealiases_dict.get(repo, {}).get(cp) if cp_usealiases_dict: usealiases_dict_list = ordered_by_atom_specificity(cp_usealiases_dict, pkg) for usealiases_dict in usealiases_dict_list: for real_flag, aliases in usealiases_dict.items(): for alias in aliases: if any(alias in v for k, v in usealiases.items() if k != real_flag): writemsg( _("--- Duplicated USE flag alias for '%s%s%s': '%s'\n") % (pkg.cpv, _repo_separator, pkg.repo, alias), noiselevel=-1, ) else: usealiases.setdefault(real_flag, []).append(alias) return usealiases
def __init__(self, pkg, enabled_flags): self._pkg = pkg self._expand = None self._expand_hidden = None self._force = None self._mask = None if eapi_has_use_aliases(pkg.eapi): for enabled_flag in enabled_flags: enabled_flags.extend(pkg.iuse.alias_mapping.get(enabled_flag, [])) self.enabled = frozenset(enabled_flags) if pkg.built: # Use IUSE to validate USE settings for built packages, # in case the package manager that built this package # failed to do that for some reason (or in case of # data corruption). missing_iuse = pkg.iuse.get_missing_iuse(self.enabled) if missing_iuse: self.enabled = self.enabled.difference(missing_iuse)