This does this in a general way so we could use it for anything.
if self.requires.startswith("/"):
return "file"
- elif self.requires.startswith("pkgconfig("):
- return "pkgconfig"
+ elif "(" in self.requires:
+ return "virtual"
elif ">" in self.requires or "<" in self.requires or "=" in self.requires:
return "expr"
self.add_package(pkg, transaction=False)
def add_requires(self, requires, pkg=None, dep=False):
- # XXX for now, we skip the virtual perl requires
- if requires.startswith("perl(") or requires.startswith("perl>") or requires.startswith("perl="):
- return
-
requires = Requires(pkg, requires, dep)
if requires in self.__requires:
return False
- elif requires.type == "pkgconfig":
- (r_expr, r_name, r_version) = \
- util.parse_pkgconfig_expr(requires.requires)
+ elif requires.type == "virtual":
+ (r_type, r_expr, r_name, r_version) = \
+ util.parse_virtual_expr(requires.requires)
# If we get an invalid expression with no name, we
# do not provide this.
return False
for provides in self.provides:
- if not provides.startswith("pkgconfig("):
- continue
-
- (p_expr, p_name, p_version) = \
- util.parse_pkgconfig_expr(provides)
+ (p_type, p_expr, p_name, p_version) = \
+ util.parse_virtual_expr(provides)
# If name does not match, we have no match at all.
- if not p_name == r_name:
+ if not p_type == r_type or not p_name == r_name:
continue
# Check if the expression is fulfilled.
for s in strings:
print s, parse_pkg_expr(s)
-
-def parse_pkgconfig_expr(s):
+def parse_virtual_expr(s):
# pkgconfig(bla)=1.2.3
- (name, exp, version) = (None, None, None)
+ (type, name, exp, version) = (None, None, None, None)
- m = re.match(r"^pkgconfig\(([A-Za-z0-9\.\-\+]+)\)(=|\<|\>|\>=|\<=)?([A-Za-z0-9\.\-]+)?", s)
+ m = re.match(r"^([A-Za-z0-9]+)\(([A-Za-z0-9\.\-\+:]+)\)?(=|\<|\>|\>=|\<=)?([A-Za-z0-9\.\-]+)?", s)
if m:
- (name, exp, version) = m.groups()
-
- return (exp, name, version)
+ (type, name, exp, version) = m.groups()
+ return (type, exp, name, version)
-def test_parse_pkgconfig_expr():
+def test_parse_virtual_expr():
strings = (
"pkgconfig(libxml-2.0)",
"pkgconfig(libxml-2.0)=1.2.3",
)
for s in strings:
- print s, parse_pkgconfig_expr(s)
+ print s, parse_virtual_expr(s)
if __name__ == "__main__":
test_parse_pkg_expr()
- test_parse_pkgconfig_expr()
+ test_parse_virtual_expr()