blob: 3f3757209f5945d499ea30ad98ee9c8cdc8e5e4c [file] [log] [blame]
# Copyright 2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
from __future__ import unicode_literals
from portage.exception import InvalidData
from portage.localization import _
from portage.dep.soname.SonameAtom import SonameAtom
_error_empty_category = _("Multilib category empty: %s")
_error_missing_category = _("Multilib category missing: %s")
_error_duplicate_category = _("Multilib category occurs"
" more than once: %s")
def parse_soname_deps(s):
"""
Parse a REQUIRES or PROVIDES dependency string, and raise
InvalidData if necessary.
@param s: REQUIRES or PROVIDES string
@type s: str
@rtype: iter
@return: An iterator of SonameAtom instances
"""
categories = set()
category = None
previous_soname = None
for soname in s.split():
if soname.endswith(":"):
if category is not None and previous_soname is None:
raise InvalidData(_error_empty_category % category)
category = soname[:-1]
previous_soname = None
if category in categories:
raise InvalidData(_error_duplicate_category % category)
categories.add(category)
elif category is None:
raise InvalidData(_error_missing_category % soname)
else:
previous_soname = soname
yield SonameAtom(category, soname)
if category is not None and previous_soname is None:
raise InvalidData(_error_empty_category % category)