| # Copyright 2012 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| from portage import os, _supported_eapis |
| from portage.dep import use_reduce |
| from portage.eapi import eapi_has_automatic_unpack_dependencies |
| from portage.exception import InvalidDependString |
| from portage.localization import _ |
| from portage.util import grabfile, writemsg |
| |
| def load_unpack_dependencies_configuration(repositories): |
| repo_dict = {} |
| for repo in repositories.repos_with_profiles(): |
| for eapi in _supported_eapis: |
| if eapi_has_automatic_unpack_dependencies(eapi): |
| file_name = os.path.join(repo.location, "profiles", "unpack_dependencies", eapi) |
| lines = grabfile(file_name, recursive=True) |
| for line in lines: |
| elements = line.split() |
| suffix = elements[0].lower() |
| if len(elements) == 1: |
| writemsg(_("--- Missing unpack dependencies for '%s' suffix in '%s'\n") % (suffix, file_name)) |
| depend = " ".join(elements[1:]) |
| try: |
| use_reduce(depend, eapi=eapi) |
| except InvalidDependString as e: |
| writemsg(_("--- Invalid unpack dependencies for '%s' suffix in '%s': '%s'\n" % (suffix, file_name, e))) |
| else: |
| repo_dict.setdefault(repo.name, {}).setdefault(eapi, {})[suffix] = depend |
| |
| ret = {} |
| for repo in repositories.repos_with_profiles(): |
| for repo_name in [x.name for x in repo.masters] + [repo.name]: |
| for eapi in repo_dict.get(repo_name, {}): |
| for suffix, depend in repo_dict.get(repo_name, {}).get(eapi, {}).items(): |
| ret.setdefault(repo.name, {}).setdefault(eapi, {})[suffix] = depend |
| |
| return ret |